ではここからPythonでのシリアル通信について記述します。
Pythonでのシリアル通信
まず、Pythonでシリアル通信するためにはpyserialというライブラリをインストールします。
おなじみ、pipコマンドでインストールします。
以下コマンドを実行してください。
pip install pyserial
では、実際のプログラムです。
送信側と受信側の2つのプログラムを用意します。
送信プログラム
import serial
def main_func():
ser = serial.Serial('COM1',115200,timeout=1)
ser.write(str.encode('hello\n'))
ser.close()
if __name__ == '__main__':
main_func()
受信プログラム
import serial
def main_func():
ser = serial.Serial('COM2',115200,timeout=0.1)
while True:
try:
data = ser.readline()
if len(data) != 0:
print(data)
except KeyboardInterrupt:
break
ser.close()
if __name__ == '__main__':
main_func()
はい。ここからは簡単にですが、pyserialの使い方を説明します。
pyserialの使い方
pyserialの使い方は以下の流れで行います。
①シリアルポートのオープン
②データの送受信
③ポートのクローズ
まずはじめのポートのオープンは以下で行っています。
ポートオープン処理
これは、第1引数で、COMポート指定。 第2引数でボーレートを設定、第3引数でタイムアウト時間を指定しています。
※第3引数のタイムアウトは、 pyserial の送受信関数は、同期関数となりますので何かしらアクションがないと関数から抜けれなくなるので、設定しています。
ser = serial.Serial('COM2',115200,timeout=0.1)
データの送受信処理
データの送受信は以下の関数で行います。
ser.write(str.encode('hello\n')) #送信 data = ser.readline() #1行受信
受信については、read()関数でデータのサイズ指定で読み出しすることもできます。
一点注意点ですが、こちらの送受信関数は同期関数となります。ですので相手からの何かしらのアクションがないとこの関数から戻ってこなくなり処理が止まってしまします。
※コマンドプロンプトからのプログラム中断も受け付けてくれなくなります。
ですので、このAPIは前回の記事で記載したマルチスレッドと併用で使用するのがよいと思います。
マルチスレッドについて知りたい方は↓を見てみてください。
この中で、マルチスレッドのやり方を記載しています。
ポートクローズ処理
最後はポートのクローズです。
開きっぱなしで、アプリを落としたりするとポートを掴みっぱなしになり、次回オープンできなくなったりする可能性もあるので、おまじないとして必ず行ってください。
ser.close()
まとめ
これで、シリアル通信ができるようになりました。
シリアル通信は、処理の流れとしては簡単ですが、きちんとプログラミングしないと処理が返ってこなくなったり、いろいろとトラブルがあるので、みなさん気を付けてください。
Pythonについて勉強したい人は以下がおすすめです。私も持っていてたまに眺めて勉強していますものですのでぜひ購入して学習してみてください。
コメント