Python3でシリアル通信してArduino UnoのLチカ

スポンサーリンク
Arduino
スポンサーリンク

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

特に問題なく動作すると思います。

コメント