【Raspberry Pi】Raspberry PiとArduinoをシリアル通信で接続する【Arduino】

はじめに

こんにちは、がんがんです。
今回はRaspberry PiArduinoをシリアル通信でつないでみたので
そのときの備忘録です。

目的

実験

Raspberry PiからArduinoへPySerialでシリアル通信を行います。
今回はArduinoからブレッドボード上のLEDを点滅させてみます。

使用機器

シリアルケーブル、配線の購入はオンラインが便利です。
はんだ付け不要の圧接コネクタもボードの拡張や構成変更に役立ちます。詳しくはRaspberry Pi正規代理店のアールエスコンポーネンツからどうぞ。

配線の様子

配線した様子はこんな感じです。
せっかくだったので、2つのLED(オレンジ)を用意しました。
f:id:gangannikki:20190628223230j:plain

Raspberry Pi

ラズパイ側ではpyserialモジュールを用いてArduinoへシリアル通信を行います。

#------------------------------------------------------------
#
#   Python×Arduino×Raspberry Pi
#     Raspberry PiとArduinoをシリアル通信
#
#------------------------------------------------------------
import serial, time

def main():
	#  COMポートを開く
	print("Open Port")
	ser =serial.Serial("/dev/ttyACM0", 9600)

	for i in range(10):
		#  LED点灯
		ser.write("1")
                print("ON")
		time.sleep(1)
		#  LED消灯
		ser.write("0")
                print("OFF")
		time.sleep(1)

	print("Close Port")
	ser.close()

if __name__ == '__main__':
	main()

Arduino

#define LED_PIN1 8
#define LED_PIN2 9
byte val = 0;

void setup() {
  pinMode(LED_PIN1, OUTPUT);
  pinMode(LED_PIN2, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if ( Serial.available() > 0 ) {
    val = Serial.read();
  }
  //  条件分岐
  if ( val == '1') {
    digitalWrite(LED_PIN1, HIGH);
    digitalWrite(LED_PIN2, LOW);
  }
  else if( val == '0'){
    digitalWrite(LED_PIN1, LOW);
    digitalWrite(LED_PIN2, HIGH);
  }
}

注意点

Pyserialのポート設定

PCから使用する場合はCOM*ですが、Raspberry Piで接続するとそうはいかないようです。
こちらを参考にしてシリアルポートの確認・設定を行います。

まずは以下のコマンドでUSBポートに何が刺さっているかを確認します。
Arduinoが接続されていると「Arduino」と書いている部分があるのでわかります。

lsusb

次に、以下のコマンドでシリアルデバイスとしてなにが接続されているのか確認する。
Arduinoを接続前後で増えているものがArduinoです。

ls /dev/ttyA*

まとめ

今回はRaspberry PiArduinoをシリアル通信で接続しました。
これを使っていろいろと遊んでみようと思います。