<ptyhon>pythonでarduinoをいじくる
ここ二日間唐突にpython熱が上がってきています
今回はpythonを使ってデスクトップアプリケーションを実装してarduinoをシリアル通信を用いて操作するとこまでやりました。
arduino,pythonどちらもコードを書いたのですが、arduinoに関しては特になんの変哲も無いしシリアル通信をするだけのコードなので省略します
pythonでデスクトップアプリケーションを実装するためには色々ライブラリがあるみたいなのですが、今回はデフォルトで利用可能なtkinterを使用しました
理由としては今回の作成でのメインになるのはそっちではなくarduinoとの通信だからっていうのが大きいです。
ということで、作成したコードの流れは以下の通りです
import tkinter import sys sys.path.append('/Library/Python/2.7/site-packages') import serial #シリアル設定 ser=serial.Serial("/dev/cu.usbmodem1421",9600) #ウィンドウ生成 top=tkinter.Tk() top.title("serial sample") top.geometry("400x300") #アプリケーションクラスの作成 class Application(tkinter.Frame): def __init__(self,master=None): super().__init__(master) self.pack() self.create_widgets() #ボタンの作成 def create_widgets(self): #LED点灯用ボタン self.hi_there=tkinter.Button(self) self.hi_there["text"]="LED ON" self.hi_there["command"]=self.tx_on self.hi_there.pack(side="top") #LED消灯用ボタン self.hi_there=tkinter.Button(self) self.hi_there["text"]="LED OFF" self.hi_there["command"]=self.tx_off self.hi_there.pack(side="top") #シリアル通信終了用ボタン self.hi_there=tkinter.Button(self) self.hi_there["text"]="close connection" self.hi_there["command"]=self.close self.hi_there.pack(side="top") #アプリケーション終了ボタン self.quit=tkinter.Button(self,text="Exit",command=self.master.destroy) self.quit.pack(side="bottom") #点灯用ボタンの動作の定義 def tx_on(self): ser.write(bytes("n",'utf-8')) #消灯用ボタンの動作の定義 def tx_off(self): ser.write(bytes("f",'utf-8')) #シリアル通信終了用ボタンの動作の定義 def close(self): ser.close() app=Application(master=top) #ウィンドウの生成 app.mainloop()
大体はコメントに書いたので特に追記することはないかなと思っています
#今回ははてな記法使えた
強いていいえば、シリアル通信するときに文字をバイト文字列に変形するためにbytesを使っています(on,offの頭文字を使うとどっちもoなのでnとfで信号を変えています)
実際に実行するとこんな画面になります
pythonコードに加えてarduinoのスケッチを以下のリンクを参考にして作成しました
そうするとarduinoにつないだLEDの制御ができました
参考資料
qiita.com