Python
Arduino
RaspberryPi

Raspberry Pi と Arduino をシリアル通信する

参考にさせて頂いたものがそのままではコンパイルエラーになってしまったので。。。
Mac でコンパイルしたときは問題なかったので、platformio のライブラリが不足しているのかな。

参考

RaspberryPiとArduinoを連携する【USBシリアル編】 (uepon日々の備忘録)

環境

スケッチする

Raspberry Pi 上で書いたスケッチを platformio を使って書き込みます。
Raspberry Pi と platformio については以前に記事にしているので興味のある方はそちらをどうぞ。
CUI で Raspberry Pi から Arduino のスケッチを書き込む(platformio)

プロジェクトを作る

まずはプロジェクトを作ります。
$ mkdir -p Arduino/Lchika && cd Arduino/Lchika

プロジェクトを構築する

platformio で初期化します。
$ platformio init --board=uno

Arduino の場所を platformio に教えてあげます。
$ echo 'upload_port = /dev/ttyACM0' >> platformio.ini

スケッチする

スケッチを作成します。
$ vi src/Lchika.ino

内容は以下のとおりです。
参考先ほぼそのままですが、String.h の include でコケてしまいましたのでその部分をコメントアウトしています。

//#include <String.h>
#define maxLength 64
String inString = String(maxLength);

void setup() {
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);
  inString = "";
}

void loop() {
  if (Serial.available() > 0) {
    char inChar = Serial.read();
    if (inString.length() < maxLength) {
      inString.concat(String(inChar));
      if (inChar == '\n') {
        if (inString.startsWith("ON")) {
          Serial.println("<--HI-->");
          digitalWrite(13, HIGH);
        } else if (inString.startsWith("OFF")) {
          Serial.println("<--LOW-->");
          digitalWrite(13, LOW);
        }
        inString = "";
      }
      Serial.println(inString);
    }
    else {
      Serial.println("Maximum number of characters.");
    }
  }
}

Python でシリアル通信して L チカする

python コマンドで動作確認しましょう。
$ python

次のようなプロンプトが表示されると思います。

pi@raspberrypi:~/Arduino/Lchika $ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09) 
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

以下のプログラムを順番に渡してチカチカしちゃいます。

import serial
s = serial.Serial('/dev/ttyACM0', 9600)
s.write("OFF\n")
s.write("ON\n")

順に実行すると以下のような感じになるかと思います。

pi@raspberrypi:~/Arduino/Lchika $ python
Python 2.7.13 (default, Nov 24 2017, 17:33:09) 
[GCC 6.3.0 20170516] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>> 
>>> s = serial.Serial('/dev/ttyACM0', 9600)
>>> 
>>> s.write("OFF\n")
4
>>> 
>>> s.write("ON\n")
3
>>> 

思う存分チカチカしたら終わりましょう。
s.close() して quit() します。

>>> s.close()
>>> quit()
pi@raspberrypi:~/Arduino/Lchika $ 

ちかちかしていただけましたでしょうか。