การใช้ Pygame เพื่อควบคุมจอยสติ๊กและนำข้อมูลไปใช้ด้วย Python

Pygame เป็นไลบรารีสำหรับพัฒนาเกมในภาษา Python ที่มีเครื่องมือสำหรับจัดการอุปกรณ์อินพุตต่างๆ เช่น คีย์บอร์ด เมาส์ และจอยสติ๊ก การใช้ Pygame เพื่อควบคุมจอยสติ๊กช่วยให้เราสามารถอ่านข้อมูลจากจอยสติ๊ก เช่น การเคลื่อนไหวของแกน (axis) ปุ่มกด (buttons) และตัวควบคุมพิเศษอื่นๆ เพื่อพัฒนาโปรเจกต์หลากหลายรูปแบบ เช่น เกม การควบคุมฮาร์ดแวร์ หรือการประยุกต์ในงานด้าน IoT และ Automation

เริ่มต้นใช้งาน Pygame สำหรับจอยสติ๊ก

ติดตั้ง Pygame

ก่อนอื่นคุณต้องติดตั้ง Pygame ในระบบของคุณ:

pip install pygame

การตั้งค่าจอยสติ๊กใน Pygame

Pygame มีโมดูล joystick ที่ใช้สำหรับจัดการจอยสติ๊ก คุณสามารถเริ่มต้นใช้งานได้ดังนี้:


import pygame

# เริ่มต้นระบบ Pygame
pygame.init()

# ตรวจสอบว่ามีจอยสติ๊กเชื่อมต่ออยู่หรือไม่
if pygame.joystick.get_count() == 0:
    print("ไม่มีจอยสติ๊กเชื่อมต่อ")
else:
    # สร้างอ็อบเจ็กต์จอยสติ๊ก
    joystick = pygame.joystick.Joystick(0)
    joystick.init()

    print(f"เชื่อมต่อจอยสติ๊ก: {joystick.get_name()}")
    print(f"จำนวนแกน (Axes): {joystick.get_numaxes()}")
    print(f"จำนวนปุ่ม (Buttons): {joystick.get_numbuttons()}")

การอ่านข้อมูลจากจอยสติ๊ก

ข้อมูลจากจอยสติ๊ก เช่น การเคลื่อนไหวของแกนหรือปุ่มกด สามารถอ่านได้ผ่านอีเวนต์ของ Pygame:


import pygame

pygame.init()

# ตรวจสอบว่ามีจอยสติ๊กเชื่อมต่อหรือไม่
if pygame.joystick.get_count() == 0:
    print("ไม่มีจอยสติ๊กเชื่อมต่อ")
    exit()

joystick = pygame.joystick.Joystick(0)
joystick.init()

# ลูปหลักสำหรับอ่านข้อมูลจากจอยสติ๊ก
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        # อ่านการเคลื่อนไหวของแกน (Axes)
        elif event.type == pygame.JOYAXISMOTION:
            axis = event.axis
            value = event.value
            print(f"แกนที่ {axis}: ค่า {value}")

        # อ่านการกดปุ่ม (Buttons)
        elif event.type == pygame.JOYBUTTONDOWN:
            button = event.button
            print(f"ปุ่มที่ {button} ถูกกด")

        # อ่านการปล่อยปุ่ม (Buttons)
        elif event.type == pygame.JOYBUTTONUP:
            button = event.button
            print(f"ปุ่มที่ {button} ถูกปล่อย")

pygame.quit()

การนำข้อมูลจากจอยสติ๊กไปพัฒนาโปรเจกต์

งานด้าน Automation

คุณสามารถนำข้อมูลจากจอยสติ๊กไปใช้ควบคุมระบบอัตโนมัติ เช่น การควบคุมแขนกล การบังคับรถหุ่นยนต์ หรือการปรับแต่งอุปกรณ์อิเล็กทรอนิกส์ ตัวอย่างการควบคุมมอเตอร์ผ่านโปรโตคอล Serial:


import pygame
import serial

pygame.init()

# ตั้งค่าจอยสติ๊ก
joystick = pygame.joystick.Joystick(0)
joystick.init()

# ตั้งค่าพอร์ต Serial
ser = serial.Serial('/dev/ttyUSB0', 9600)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        elif event.type == pygame.JOYAXISMOTION:
            axis = event.axis
            value = int((event.value + 1) * 50)  # แปลงค่าเป็นช่วง 0-100
            ser.write(f"AXIS{axis}:{value}\n".encode())

pygame.quit()
ser.close()

งานด้าน IoT

จอยสติ๊กสามารถใช้ควบคุมอุปกรณ์ IoT เช่น โดรน หุ่นยนต์ หรืออุปกรณ์สมาร์ทโฮม ตัวอย่างการส่งคำสั่งผ่าน MQTT:


import pygame
import paho.mqtt.client as mqtt

pygame.init()

# ตั้งค่าจอยสติ๊ก
joystick = pygame.joystick.Joystick(0)
joystick.init()

# ตั้งค่า MQTT
client = mqtt.Client()
client.connect("mqtt.eclipseprojects.io", 1883, 60)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        elif event.type == pygame.JOYAXISMOTION:
            axis = event.axis
            value = event.value
            topic = f"joystick/axis/{axis}"
            client.publish(topic, value)

        elif event.type == pygame.JOYBUTTONDOWN:
            button = event.button
            client.publish(f"joystick/button/{button}", "pressed")

        elif event.type == pygame.JOYBUTTONUP:
            button = event.button
            client.publish(f"joystick/button/{button}", "released")

pygame.quit()
client.disconnect()

การพัฒนาต่อยอด

  • ควบคุมหุ่นยนต์: ใช้ข้อมูลจากจอยสติ๊กควบคุมแขนกลหรือรถหุ่นยนต์ เชื่อมต่อกับ Raspberry Pi หรือ Arduino
  • ระบบจำลองการทำงาน: สร้างโปรแกรมจำลองสำหรับควบคุมระบบอัตโนมัติในโรงงาน
  • งานด้านสมาร์ทโฮม: ใช้จอยสติ๊กควบคุมไฟ อุปกรณ์เครื่องใช้ไฟฟ้า หรือระบบรักษาความปลอดภัยในบ้านผ่าน IoT
  • เกมและแอปพลิเคชัน: พัฒนาเกมที่ใช้จอยสติ๊กเป็นอินพุต หรือแอปพลิเคชันที่ต้องการการควบคุมแบบแม่นยำ

Pygame เป็นเครื่องมือที่ทรงพลังสำหรับการควบคุมจอยสติ๊กใน Python และสามารถนำไปประยุกต์ใช้ในงานหลากหลายรูปแบบ ทั้งด้าน Automation, IoT และการควบคุมฮาร์ดแวร์ การเข้าใจและใช้งานข้อมูลจากจอยสติ๊กได้อย่างถูกต้องจะช่วยให้คุณพัฒนานวัตกรรมใหม่ๆ ได้อย่างมีประสิทธิภาพ