読者です 読者をやめる 読者になる 読者になる

Raspberry PiとArduino間でUSB経由のシリアル通信

電波 Raspberry Pi Arduino Processing

f:id:karaage:20150531171749j:plain:w640

Raspberry PiとArduinoのシリアル通信

 いろんな事情でRaspberry PiとArduinoをUSB経由で通信させる必要が出てしまったので、ちょっと試してみました。ネットで検索すると腐るほど情報出てきますが、これまた自分へのメモに残しておきます。

 今回は、プログラム(通称宇宙語)ばかりなので、必要な人だけ続きを読むをクリックください。

Arduino側準備

 Arduino側は以下のプログラムを書き込むだけ。Arduinoのシリアルモニタで、「A」を送信するとDIGITAL PIN3がHighになって、「B」を送信するとDIGITAL PIN3がLOWになることを確認しましょう。10k程度の抵抗とLEDをArduinoのDIGITAL PIN3とGND間に繋いでLED点灯させるとわかりやすいです(主に他の人が)。

#define LED_PIN (3)
byte val;

void setup(){
  // Serial Setting
  Serial.begin(9600);

  // Port Setting
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
}

void loop(){
  if(Serial.available() > 0){
    
    val = Serial.read();
    Serial.write(val);
    if(val == 'A'){
      digitalWrite(LED_PIN, HIGH);
    }

    if(val == 'B'){
      digitalWrite(LED_PIN, LOW);
    }
  }
}

Raspberry Pi側準備

 Raspberry Pi側は、pythonを使って通信します。

pyserialインストール

 pythonでシリアル通信するために、pyserialというライブラリをインストールします。
pyserialをインストールするには、pipというやつが必要なので、まずはそれをインストール。ややこしいですね。Raspberry Piにログインして、以下のコマンドうつだけです。

$ sudo apt-get install python-pip

 pip使ってpyserialインストール。以下のコマンドうつだけ

$ pip install pyserial
Raspberry Pi側通信プログラム

 通信テストのプログラム(test.py)を作成します。

$ vi test.py

 中身は以下。一応python3対応。

# -*- coding: utf-8 -*-
import serial
import time

ser = serial.Serial('/dev/ttyACM0', 9600)
time.sleep(2)
ser.write(b'A')
ser.close()

通信実行

 Raspberry PiとArduinoをUSBで接続。dmesgコマンドで USBを認識したことを確認しましょう。
基本/dev/ttyACM0として認識されていると思います。もし違う名前で認識されていたら、Raspberry Pi側のプログラムの/dev/ttyACM0の箇所を合わせて修正してやりましょう。複数のUSBデバイスを接続したい場合はudevを使ってやるとよいです。udevに関して詳しく知りたい方はudevで検索して色々調べてみるとよいです。


 あとは、Raspberry Pi側でプログラムを実行しましょう。

$ python test.py

 LEDが点灯すれば(ArduinoのDigital Pin3がHiになれば)OK。

まとめ

 Raspberry PiとArduinoの通信例です。簡単な例ですが、応用すれば色々なことができそうですね。USB以外にもI2C・SPI・GPIOを使って通信することもできます。興味ある方は調べてみるとよいかと思います。

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno

Raspberry Piまとめページ

 私が今まで書いたRaspberry Piに関する記事、以下にまとめています。ちょっとした設定から、自作デジカメやロボット製作といった電子工作まで色々な情報をのせているので、興味ある方はセットアップの後参考にしてみて下さい。


関連記事