【第6回】WSL2にUbuntu 22.04 LTSを導入する(PyQt6を使ってArduino Lチカ)

はじめに

必要なことは「usbipd-winの導入」と「PyQt6の導入」です。
良ければ過去の記事を参考にして下さい。

usbipd-winの導入

touch-sp.hatenablog.com

PyQt6の導入

touch-sp.hatenablog.com

Arduinoとの接続

こちらを参考にして下さい。
Ubuntu 20.04を使っている時の記事ですがUbuntu 22.04でも同じ手順で接続可能です。
touch-sp.hatenablog.com

Pythonスクリプト

上のようなトグルボタンでLEDをつけたり消したりします。

オリジナルのトグルボタンを定義したPythonファイルをGitHUbで公開しています。
まずはそれをダウンロードして下さい。(説明はこちら

import os
from urllib.request import urlretrieve

url = 'https://raw.githubusercontent.com/dai-ichiro/pyqt6_yaml/main/qtyaml.py'
fname = os.path.basename(url)

if not os.path.isfile(fname):
    urlretrieve(url, fname)



あとは以下のスクリプトを実行するだけです。

from PyQt6 import QtSerialPort
from PyQt6.QtCore import QIODevice
from PyQt6.QtCore import pyqtSlot
from PyQt6.QtWidgets import QWidget, QApplication, QLabel, QHBoxLayout
from PyQt6.QtGui import QFont

from qtyaml import ToggleButton

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('arduino LED')

        font = QFont()
        font.setPointSize(72)
        font.setBold(True)
                    
        self.on_off_label = QLabel('off')
        self.on_off_label.setFont(font)

        self.toggle_button = ToggleButton()
        self.toggle_button.clicked.connect(self.handle_clicked)
        
        mainFrame = QHBoxLayout()
        mainFrame.addWidget(self.on_off_label)
        mainFrame.addWidget(self.toggle_button)
        
        self.setLayout(mainFrame)

    @pyqtSlot(bool)
    def handle_clicked(self, on_off):
        match on_off:
            case True:
                self.on_off_label.setText('on')
                self.serial.write((0).to_bytes(1, 'big'))
            case False:
                self.on_off_label.setText('off')
                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()

Arduinoスケッチ


<注意>Arduinoへのスケッチ書き込みはWindowsで行っています。

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if(Serial.available()>0){
    int var = Serial.read();
    if(var == 0){
      digitalWrite(LED_BUILTIN, HIGH);
    }else{
      digitalWrite(LED_BUILTIN, LOW);
    }
  }                 
}

記事一覧

「WSL2にUbuntu 22.04 LTSを導入する」シリーズの記事一覧はこちら