参考
[RaspberryPiとArduinoを連携する【USBシリアル編】 (uepon日々の備忘録)] (http://uepon.hatenadiary.com/entry/2017/01/01/141220)
環境
- Raspberry Pi 3 Model B+
- Raspbian 9.4 (Stretch)
- platformio
- [Arduino 互換機] (https://www.amazon.co.jp/dp/B06Y5TBNQX)
スケッチする
Raspberry Pi 上で書いたスケッチを platformio を使って書き込みます。
Raspberry Pi と platformio については以前に記事にしているので興味のある方はそちらをどうぞ。
[CUI で Raspberry Pi から Arduino のスケッチを書き込む(platformio)] (https://qiita.com/ancolin/items/d4291b994c422a01b6b3)
プロジェクトを作る
まずはプロジェクトを作ります。
$ 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
#define LED_PIN 13 /**< LEDを接続したデジタルピン */
void setup()
{
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
}
void loop()
{
// シリアル通信で1行(改行コードまで)読み込む
String inString = Serial.readStringUntil('\n');
if (inString.startsWith("ON")) {
Serial.println("<--HI-->");
digitalWrite(LED_PIN, HIGH);
}
else if (inString.startsWith("OFF")) {
Serial.println("<--LOW-->");
digitalWrite(LED_PIN, LOW);
}
}
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 $
ちかちかしていただけましたでしょうか。
謝辞
@KeitetsuWorksさんよりシンプルなスケッチを頂戴しましたので、そちらに差し替えさせていただきました。
ありがとうございます。