[파이썬] PyQt 하드웨어 디바이스와의 통신

Python은 PyQt라는 라이브러리를 통해 사용자 인터페이스(GUI)를 개발할 수 있습니다. 이러한 GUI 애플리케이션은 종종 하드웨어 디바이스와 상호작용해야 하는 경우가 있습니다.

이 글에서는 PyQt를 사용하여 하드웨어 디바이스와의 통신을 어떻게 수행할 수 있는지 살펴보겠습니다.

1. 시리얼 통신 설정

하드웨어 디바이스와 시리얼 통신을 수행하기 위해서는 먼저 PyQt에서 시리얼 포트를 설정해야 합니다. QSerialPort 클래스를 사용하여 시리얼 포트를 열고 설정할 수 있습니다.

import sys
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo

def setup_serial_port():
    serial_port = QSerialPort()
    port_name = "/dev/ttyUSB0"  # 시리얼 포트의 이름

    # 시리얼 포트 설정
    serial_port.setPortName(port_name)
    serial_port.setBaudRate(QSerialPort.Baud115200)
    serial_port.setDataBits(QSerialPort.Data8)
    serial_port.setParity(QSerialPort.NoParity)
    serial_port.setStopBits(QSerialPort.OneStop)

    if not serial_port.open(QSerialPort.ReadWrite):
        print("시리얼 포트 열기 실패")
        return

    print("시리얼 포트 설정 완료")

2. 데이터 송수신

시리얼 포트를 설정한 후에는 데이터를 송수신할 수 있습니다. PyQt를 사용하여 시리얼 포트로 데이터를 보내거나 받을 수 있습니다.

def send_data(serial_port, data):
    if not serial_port.isOpen():
        print("시리얼 포트가 열려있지 않습니다.")
        return

    # 데이터 전송
    serial_port.write(data.encode())

def receive_data(serial_port):
    if not serial_port.isOpen():
        print("시리얼 포트가 열려있지 않습니다.")
        return

    # 데이터 수신
    data = serial_port.readAll()
    if data:
        # 수신된 데이터 처리
        print(data.decode())

3. 이벤트 처리

시리얼 포트로부터 데이터를 받을 때마다 일어나는 이벤트를 처리하기 위해 PyQt의 이벤트 루프를 사용할 수 있습니다.

from PyQt5.QtCore import QIODevice, QEventLoop, QTimer

def setup_event_loop(serial_port):
    loop = QEventLoop()
    serial_port.readyRead.connect(loop.quit)

    # 데이터를 주기적으로 확인하기 위한 타이머 설정
    timer = QTimer()
    timer.timeout.connect(lambda: send_data(serial_port, "Ping!"))
    timer.start(1000)  # 1초마다 실행

    loop.exec_()

4. 실행

위의 코드를 실행하여 PyQt를 사용하여 하드웨어 디바이스와 통신할 수 있습니다.

if __name__ == "__main__":
    app = QApplication(sys.argv)
    setup_serial_port()

    sys.exit(app.exec_())

이제 PyQt를 사용하여 하드웨어 디바이스와의 통신을 쉽게 개발할 수 있습니다. PyQt를 활용하여 더 많은 기능을 추가하고, 자신의 프로젝트에 적용해보세요.

이 글은 PyQt를 사용하여 하드웨어 디바이스와의 통신에 대한 간단한 예제를 제공했습니다. 여러분은 여기에서 출발하여 세부적인 기능을 추가하여 진정한 애플리케이션을 개발할 수 있습니다.

앞으로도 PyQt와 함께 하드웨어 디바이스와의 통신을 통해 좀 더 멋진 프로젝트를 개발해보세요!