[파이썬] 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와 함께 하드웨어 디바이스와의 통신을 통해 좀 더 멋진 프로젝트를 개발해보세요!