【Arduino】GUIのボタンからArduinoのLチカ制御【PySerial】【Tkinter】
はじめに
こんにちは、がんがんです。
Arduino×PySerialをよく調べていますが、これをGUIから操作できないかなと思いました。
そこで調べてみると、一応同じような人の記事を見つけることができました!
今回はそちらを試してみたときの備忘録です。
やりたいこと
今回やること
PySerialを用いてArduinoと通信し、書き込まれた値によってLチカ
コード
Python側
#------------------------------------------------------------ # # Python×Arduino×Tkinter # LチカさせながらGUIも制御 # python_tkinter.py # #------------------------------------------------------------ import serial from tkinter import * """ GUIクラス """ class App: def __init__(self, master): frame = Frame(master) frame.pack() # アプリを終了 self.quit = Button(frame, text="QUIT", fg="red", command=frame.quit) self.quit.pack(side=RIGHT) self.init = Button(frame, text="INIT", command=self.init) self.init.pack(side=LEFT) # LED ON self.on = Button(frame, text="ON", command=Ser.on) self.on.pack(side=LEFT) # LED OFF self.off = Button(frame, text="OFF", command=Ser.off) self.off.pack(side=LEFT) def init(self): print("initialize printer") """ PySerialクラス """ class Ser: def on(): ArduinoSerial.write(b"1") def off(): ArduinoSerial.write(b"0") def init(): ArduinoSerial.write(b"2") """ メイン """ root = Tk() root.title("Arduino Push Buttons") # 通信開始 ArduinoSerial = serial.Serial("COM4", 9600) # 画面の大きさを指定 root.geometry("400x300") app = App(root) root.mainloop() # 通信終了 ArduinoSerial.close()
Arduino側
/* * python_tkinter.ino */ #define LED 13 void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); digitalWrite(LED, LOW); } void loop() { byte data; if(Serial.available() > 0){ data = Serial.read(); switch(data){ case '1': digitalWrite(LED, HIGH); // Serial.println(digitalRead(LED)); data = '2'; break; case '0': digitalWrite(LED, LOW); // Serial.println(digitalRead(LED)); data = '2'; break; } } }
実行結果
GUIの画面はこんな感じです。