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

はじめに

前回「PyQt5」を使ってPython-Arduino間でシリアル通信を行いました。
touch-sp.hatenablog.com
今回PyQt6を使用するためにスクリプトを書き換えました。

目的

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

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

Python環境の構築

「pyqt6」と「pyyaml」をインストールしました。pipで可能です。

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

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

「pyyaml」についてはこちらを参照して下さい。

PythonスクリプトとYAMLファイル

Pythonスクリプト

from PyQt6 import QtSerialPort
from PyQt6.QtCore import QIODevice
from PyQt6.QtWidgets import QWidget, QApplication, QPushButton, QHBoxLayout

from constructGUI import construct

class Window(QWidget):

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

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

    def initUI(self):
        self.setWindowTitle("pyqt-serial sample")
        
        self.button_on = construct(QPushButton('on'), 'settings.yaml', 'button_1')
        self.button_on.clicked.connect(self.led_on)

        self.button_off = construct(QPushButton('off'), 'settings.yaml', 'button_1')
        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()

YAMLファイル(「settings.yaml」)

button_1:
  type: QPushButton
  width: 200
  height: 80
  fontFamily: times
  fontPoint: 24
  fontBold: True

実行結果

Pythonスクリプトを実行する前にWSL2上で以下の1行を実行する必要があります。

sudo chmod 777 /dev/ttyACM0



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

環境

Windows 11
Ubuntu 20.04 on WSL2
usbipd-win 1.3.0
WSL バージョン: 0.56.2.0
カーネル バージョン: 5.10.102.1
WSLg バージョン: 1.0.30
MSRDC バージョン: 1.2.2924
Direct3D バージョン: 1.601.0
Windows バージョン: 10.0.22000.593
PyQt6==6.2.3
PyQt6-Qt6==6.2.4
PyQt6-sip==13.2.1
PyYAML==6.0

その他(接続を簡略化)

接続を簡略化するためにはこちらが役に立つと思います。
touch-sp.hatenablog.com