Pythonでシリアル通信してArduinoをLチカさせる
とある測定器をRS232Cでリモートコントロールしたくて、Pythonのシリアル通信の仕方を学ぶ。まずは簡単なところからということで、Pythonから送られてきた数字(トリガー)をArduino側で識別してそれぞれに対してLチカの挙動を変える、というプログラムを作ってみた。
結果
0 : 消灯、1 : 点灯、2 : 5回点滅、その他 : 10回点滅、という条件分岐がちゃんとできている。
以下のPythonプログラムは"2"の動作のみ。
プログラム
Arduino側
void setup(){ Serial.begin(115200); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, LOW); } void loop(){ void flicker(int, int); int input = Serial.read(); if(input != -1){ Serial.println(input); switch(input){ case '0': digitalWrite(LED_BUILTIN, LOW); break; case '1': digitalWrite(LED_BUILTIN, HIGH); break; case '2': flicker(5, 500); break; default: flicker(10, 100); } while(Serial.available())Serial.read(); } } void flicker(int n, int intval){ for(int i=0; i<n; i++){ digitalWrite(LED_BUILTIN, HIGH); delay(intval); digitalWrite(LED_BUILTIN, LOW); delay(intval); } }
Python側
#SimpleSerial_001.py import serial from time import sleep ser = serial.Serial('COM3', 115200, timeout=0.1) sleep(2) ser.write(bytes('2', encoding='ascii')) ser.close()