【PySerial】Python×Arduinoで制御してみる1【Lチカ】
はじめに
こんにちは、がんがんです。
本日はPythonによるシリアル通信であるPySerialを実験したのでその備忘録です。
PySerialとは
PySerialはPythonでシリアル通信を可能にするものです。
ドキュメントはこちらです。
Welcome to pySerial’s documentation — pySerial 3.0 documentation
追記【2019.01.15】
ありがたいことに
鹿児島大学生 Advent Calendar 2018の13日目に参加させて頂きました。
コメント、ミスなどあれば指摘のほどよろしくお願いします。
環境、注意点
PySerialの使い方はこちらを参考にしました。
shizenkarasuzon.hatenablog.com
環境としては
を使用しています。OSの環境が変わるとポートの入力方法が変わるので注意。
また、PySerialのバージョンにも注意。
昔のバージョンでは、ポートの入力がint型でしたが、現在はCOM*というstr型になっているので注意しないといけない。
この違いに気づかずに躓いた記事も以下に置いておきます。
【Python/Arduino】シリアル通信でLED点滅(1文字) | アルゴリズム雑記
実験
まずはこちらの記事を参考にしてLEDを光らせていきます。今回は参考記事にベースを合わせています。
"1"が送信されたらLED点灯、"0"が送信されたらLED消灯です。
コードは以下のようになっています。
なお、送信するものはバイト型である必要があるためbを忘れずに気をつけねばです。
# python_led.py import serial, time def main(): # COMポートを開く print("Open Port") ser =serial.Serial("COM3", 9600) while True: # LED点灯 ser.write(b"1") time.sleep(1) # LED消灯 ser.write(b"0") time.sleep(1) print("Close Port") ser.close()
/* PythonでLEDを制御 led.ino */ void setup() { Serial.begin(9600); pinMode(13, OUTPUT); digitalWrite(13, LOW); // 初期化 } void loop() { byte var; var = Serial.read(); switch(var){ case '0': digitalWrite(13, LOW); break; case '1': digitalWrite(13, HIGH); break; default: break; } }
しっかりとLEDが点滅してくれました。無限ループなので止め方も考えておくべきでした。