PCからArduinoの制御やArduinoで取得したデータをPCに送信したりするため、PCとArduino間でシリアル通信をしてみたいと思います。今回はPCからArduinoの制御をやってみます。
要件
- PCとarduinoでシリアル通信を行う
- シリアル通信を介し、PCからArduinoのLEDの点滅を制御する
- ‘0’で消灯、’1’で点灯
- ボーレートは9600bps
- LEDの点滅は1s周期とする
- PC側のプログラムはPython3で作成する
ハードウェア
- Arduino uno
- USB-シリアル変換基板(AE-UM232R)
- ブレッドボード
- ジャンパワイヤ(適量)
- USBケーブル×2(ArduinoへのプログラムDL&電源供給用とシリアル通信用)
Fritzingで作成した図を後日追加します。(2017/9/9 追加しました)
arduino側のプログラム
void setup() { Serial.begin(9600); // シリアル通信を使える様にする pinMode(13, OUTPUT); digitalWrite(13, LOW); // 初期状態でLED消灯 } void loop() { byte var; var = Serial.read(); switch(var){ case '0': digitalWrite(13, LOW); // LED点灯 break; case '1': digitalWrite(13, HIGH); // LED消灯 break; default: break; }
PC側のプログラム
あらかじめPython3のserialモジュールをインストールしておく必要があります。
$ sudo pip3 install PySerial
import serial,time ser = serial.Serial('/dev/ttyUSB0',9600) # '/dev/ttyUSB0'の部分は自分の環境に合わせて変更する while True: ser.write(b"1") # LED点灯 time.sleep(1) ser.write(b"0") # LED消灯 time.sleep(1) ser.close() # 無限ループだから到達しないけど一応・・・
注意点としては、ser.write(b”1″)の’b’を忘れないことですかね。
http://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial.Serial.write
Write the bytes data to the port. This should be of type bytes (or compatible such as bytearray or memoryview). Unicode strings must be encoded (e.g. ‘hello’.encode(‘utf-8’).
<google翻訳結果>
バイトデータをポートに書き込みます。これは、バイト型(またはbytearrayやmemoryviewなどの互換性)でなければなりません。Unicode文字列をエンコードする必要があります(例: ‘hello’.encode(’ utf-8 ‘))。
動かす
python3 serial_blink.py
特に問題なく動作すると思います。
コメント