
PythonとArduino間でシリアル通信を行い,PythonでArduinoの制御を行おうとしています。
今はPythonからLチカを行うプログラムを作成しています。
調べながら進めているのですが、つまずいた箇所があるので質問させていただきます。
まず、実行できたコードを以下に示します。
受け側Arduino
Arduino
1#define LED_PIN 13 2 3void setup() { 4 pinMode(LED_PIN, OUTPUT); //13番ピンを出力に設定 5 Serial.begin(9600);//シリアル通信のレートを9600に設定 6 digitalWrite(13, LOW); 7} 8 9void loop() { 10 if (Serial.available() > 0) { 11 int cmd = Serial.read(); 12 13 switch (cmd) { 14 case '0' : digitalWrite(13, HIGH); break; 15 case '1' : digitalWrite(13, LOW); break; 16 } 17 } 18}
送信側Python
Python
1#coding:utf-8 2 3import serial 4from time import sleep 5 6def main(): 7 with serial.Serial("/dev/tty.usbmodem1421",9600,timeout=1) as ser: 8 sleep(5) 9 flag=bytes('0','utf-8') 10 11 print(type(flag)) 12 13 ser.write(flag) 14 15if __name__ == "__main__": 16 main()
次に、失敗したコードを書きます。
Arduino側は同じ。
送信側Python
Python
1#coding:utf-8 2 3import serial 4from time import sleep 5 6def main(): 7 with serial.Serial("/dev/tty.usbmodem1421",9600,timeout=1) as ser: 8 sleep(5) 9 flag = bytes(0) 10 print(type(flag)) 11 12 ser.write(flag) 13 14if __name__ == "__main__": 15 main()
成功時、失敗時ともにflagをbytes型に変換したつもりです。
type(flag)の結果はどちらもbytes型でした。
成功時はstr→bytes型へ、失敗時はint→bytes型への型変換なのですが、なぜ後者ではLチカできなかったのでしょうか。
--追記 2017/10/24 --
回答を参考にint.to_bytesを用いてPython側のプログラムを書き直しました。
Python
1#coding:utf-8 2 3import serial 4from time import sleep 5 6def main(): 7 with serial.Serial("/dev/tty.usbmodem1421",9600,timeout=1) as ser: 8 sleep(5) 9 flag = 1 10 flag_byte = flag.to_bytes(1,'big') 11 print(flag_byte) 12 ser.write(flag_byte) 13 14if __name__ == "__main__": 15 main()
またこれに応じてArduinoのcase文を書き直しました。
Arduino
1#define LED_PIN 13 2 3void setup() { 4 pinMode(LED_PIN, OUTPUT); //13番ピンを出力に設定 5 Serial.begin(9600);//シリアル通信のレートを9600に設定 6 digitalWrite(13, LOW); 7} 8 9void loop() { 10 if (Serial.available() > 0) { 11 int cmd = Serial.read(); 12 13 switch (cmd) { 14 case 0 : digitalWrite(13, HIGH); break; 15 case 1 : digitalWrite(13, LOW); break; 16 } 17 } 18}
このソースで正しく動作しました。感謝します。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/10/17 16:02