[Raspberry Pi 3]ArduinoのスケッチをCUIで書き込む方法
実験の都合上、Arduinoに自動でスケッチを書き込む方法が必要になったので調べた。
PlatformIOというのを使うとCUIで書き込めるようになるらしい。
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ pyenv global 2.7.13 # 2.x系のPythonが使えるようにする $ pip install platformio $ platformio platforms install atmelavr # 任意のディレクトリに移る $ cd [任意のディレクトリ] $ platformio init --board=uno # 必要ならボードを調べる $ platformio boards | grep mega2560 srcディレクトリに.inoファイルを作っておいて、以下で書き込み完了。 $ sudo nano src/example.ino $ platformio run |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ; PlatformIO Project Configuration File ; ; Build options: build flags, source filter ; Upload options: custom upload port, speed and extra flags ; Library options: dependencies, extra library storages ; Advanced options: extra scripting ; ; Please visit documentation for the other options and examples ; http://docs.platformio.org/page/projectconf.html [env:uno] platform = atmelavr board = uno framework = arduino upload_port = /dev/ttyS0 targets = upload |
けど、書き込むのにはUARTを使わないといけない。
今回の環境ではUART用のGPIOがRPiと接続されていたから、USBシリアルを使って書き込むことができない。だから接続ついでにGPIO経由で書き込めれば良いなと思ってたけど、それだとどうもうまく書き込めない。リセット信号がうまく送られない感じ?
今回の環境では使えないかもしれないね。とほほ
追記(2017/08/07):
GPIO経由で書き込めるようだと判明。
前回はArduinoにリセット信号がうまく届かなかったせいで書き込みが終わらなかったんだけど、RESET信号ラインにもう一つArduinoを挟んで、うまく立ち下がりパルスを送れるようにすれば書き込みが可能になる。
上のような配線をして、追加したArduinoには以下のようなプログラムを書き込んでおく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #define INPUT_PIN 4 #define OUTPUT_PIN 7 void setup() { Serial.begin(9600); pinMode(INPUT_PIN, INPUT_PULLUP); pinMode(OUTPUT_PIN, OUTPUT); digitalWrite(OUTPUT_PIN, HIGH); pinMode(LED_BUILTIN, OUTPUT); } void loop() { //リセットピンの立ち下がりを検知 if(digitalRead(INPUT_PIN)==LOW){ //Arduinoに立ち下がり信号を送る digitalWrite(OUTPUT_PIN, LOW); digitalWrite(LED_BUILTIN, LOW); delay(100); digitalWrite(OUTPUT_PIN, HIGH); digitalWrite(LED_BUILTIN, HIGH); //RPiの信号がHIGHに戻るまで待機 while(digitalRead(INPUT_PIN)==LOW){ ; } } } |
そんでRPiでは、以下のコマンドを実行してから書き込みを開始する。
1 2 | # 以下のようにして、リセット信号を外に出せるようにする $ gpio -g mode 17 ALT5 |
書き込み終わったら、別のプログラムでも使えるようにピンのモードを戻しておく。
1 | $ gpio -g mode 17 IN |
この記事へのコメントはこちら