センサーを使ったアプリ開発したいのだけど、
PCとセンサをつなげるのってどうやるの?
センサーの出力は、SPI通信とかシリアル通信の場合が多いので、
今回は、Windows PCにて、Pythonでシリアル通信する方法を紹介します。
今回は、Windows PCにて、Pythonでシリアル通信する方法を紹介します。
Pythonでは、シリアル通信ライブラリが用意されていますので、これを使うことで、簡単にシリアル通信を制御できます。
構成
センサーの代わりとして、M5 ATOMを使いました。
M5ATOMとPCは、もともとArduino IDEのシリアルモニターを使えば、
シリアル通信をモニターすることができますが、
また、TeraTermというターミナルソフトを使う手もあります。
私は、センサーから取得したデータをWindows PC側で、様々な処理をしたかったので、
Pythonでのシリアル通信データを送受信するプログラムを用意しました。
Windows PCに、Python3をインストールする
まずは、WindowsでPythonを動かす環境の準備が必要です。
Windowsで、Python3をインストールするには、
・Anacondaをインストールする
・Pythonパッケージをインストールする
等のやり方がありますが、
今回は、Pythonパッケージをインストールする方法を紹介します。
Python3のパッケージをダウンロードします。
以下のサイトから、ご自分のPCにあったものをダウンロードしてください。
「ダウンロード」をクリックして、自分のWindowsにあったものをダウンロードしてください
Windows PCに、Python3をインストールする
やり方は、以下のHPを参照してください。
pySerialのインストール
Pythonで、シリアル通信を扱うためのパッケージをインストールします。
コンソールを開いて、以下のコマンドを入力すると、インストールが始まります。
$ pip3 install pyserial
サンプルコード
次に、pythonコードを書いていきます。
以下のコードを作成します。
このコードでは、シリアル通信の受信処理と送信処理を別々のスレッドで実行することで、送受信処理を同時に実行できます。
サンプルコード内のCOM3は、ご使用するPC環境により異なります。
シリアル通信ケーブルを差したり、抜いたりして、該当するCOM番号を見つけてください。
import serial
import time
import concurrent.futures
ser = serial.Serial('COM3',9600,timeout=None)
def func1():
while True:
line = ser.readline()
print(line)
def func2():
while True:
flag=bytes(input(),'utf-8')
#シリアル通信で文字を送信する際は, byte文字列に変換する
#input()する際の文字列はutf-8
ser.write(flag)
#シリアル通信:送信
if(flag==bytes('a','utf-8')):
break;
time.sleep(1)
ser.close()
if __name__ == "__main__":
executor = concurrent.futures.ThreadPoolExecutor(max_workers=2)
executor.submit(func1)
executor.submit(func2)
func1関数は、受信したシリアルデータをそのままコンソールに表示します。
func2関数は、入力した文字列をシリアル通信で相手へ送信します。
また、”a”を入力すると、処理を停止します。
動かし方
動かし方は、いつものように、
python3 app.pu
まとめ
今回は、Windows PCで、シリアル通信を扱う方法を紹介しました。
コメント