WSL2上のPythonでArduinoとシリアル通信をする【PyQt5編】

はじめに

前回「pyserial」を使ってPython-Arduino間でシリアル通信を行いました。
touch-sp.hatenablog.com
あまり知られていないと思いますが実は「PyQt」を使ってもシリアル通信ができます。

その際には「pyserial」のインストールは不要です。

PyQt6編はこちらです。
touch-sp.hatenablog.com

目的

今回の目的は前回同様WSL2とArduino間でシリアル通信を行うこととします。


Arduinoのスケッチは前回から変更していません。

Python環境の構築

「pyqt5」のみインストールしました。pipで可能です。

先ほども書きましたが「pyserial」のインストールは不要です。

WSL2でPyQtを使うための設定はこちらを参照して下さい。

Pythonスクリプト

from PyQt5 import QtSerialPort
from PyQt5.QtCore import QSize, QIODevice
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont

class Window(QWidget):

    button_size = QSize(200, 80)

    def __init__(self):
        super().__init__()    
        self.initUI()

        self.serial = QtSerialPort.QSerialPort(
            '/dev/ttyACM0', baudRate=QtSerialPort.QSerialPort.Baud9600)
        self.serial.open(QIODevice.WriteOnly)

    def initUI(self):
        self.setWindowTitle("pyqt-serial sample")
        
        self.button_on = QPushButton('on')
        self.button_on.setFont(QFont("Times", 24, QFont.Bold))
        self.button_on.setFixedSize(self.button_size)
        self.button_on.clicked.connect(self.led_on)

        self.button_off = QPushButton('off')
        self.button_off.setFont(QFont("Times", 24, QFont.Bold))
        self.button_off.setFixedSize(self.button_size)
        self.button_off.clicked.connect(self.led_off)

        self.main_layout = QHBoxLayout()
        self.main_layout.addWidget(self.button_on)
        self.main_layout.addWidget(self.button_off)

        self.setLayout(self.main_layout)
    
    def led_on(self):
        self.serial.write((0).to_bytes(1, 'big'))
    
    def led_off(self):
        self.serial.write((1).to_bytes(1, 'big'))

    def closeEvent(self, e):
       self.serial.close()
       e.accept()

if __name__ == "__main__":
    app = QApplication([])
    ex =Window()
    ex.show()
    app.exec_()

実行結果

こういうGUIが表示されます。
f:id:touch-sp:20220313200430p:plain
ボタンを押すことでArduinoボード上のLEDをつけたり消したりできます。

環境

Windows 11
Ubuntu 20.04 on WSL2
WSL バージョン: 0.51.3.0
カーネル バージョン: 5.10.93.2
WSLg バージョン: 1.0.30
Windows バージョン: 10.0.22000.556
python 3.8.10
PyQt5==5.15.6
PyQt5-Qt5==5.15.2
PyQt5-sip==12.9.1