ラズパイとArduino CLIを使ってWi-Fi経由で書き込めるようにした!
Raspberry Pi 4 を使って、Wi-Fi経由で Arduino に書き込めるスクリプトを作成しました。
既存のやつではArduinoOTA というものがありますが、これにはいくつか欠点があります。
- ESP32以外のArduinoには書き込めない
- ArduinoOTA のプログラムを組み込まなきゃいけない
これらの欠点を解消するために、Arduino CLI というものを使って、ラズパイにバイナリデータを送信し、ラズパイに繋がれてる Arduino に書き込むシェルスクリプトを作成しました。
これで、ESP32以外のArduinoに書き込めるし、ArduinoOTAのプログラムを組まなくていい。
まだまだ改善の余地は沢山あります。
Arduino CLI とは?
わからない方のために一応説明すると、Arduino IDE 上でやっている様々な操作をCLIで行えるようにしたものです。
詳しくはこちらを見てください。インストール方法は後述します。
ドキュメント: https://arduino.github.io/arduino-cli/0.21/
リポジトリ: https://github.com/arduino/arduino-cli
環境
今回、私が試した環境はこんな感じです。
- M1 Mac mini
- Raspberry Pi 4
- ESP32DevKitC
パソコンはLinuxでも大丈夫だと思います(WSLでもいけるはず)。
ラズパイもLinuxが動くボードコンピュータならいけると思います。
ESP32も任意のArduinoで大丈夫なはずです。
私と違う環境で試した結果をコメントやツイッターなどで報告してくれると嬉しいです!
ラズパイ側の準備
OSを焼く
まずはRaspberry Pi用のOSを焼いてください。
今回は、Raspberry Pi OS lite (64-bit)を使用しました。
またユーザー名はpi
、ホスト名はarduino-tester
です。
以降使われるホスト名は自分のに書き換えてください。
Arduino CLI をインストールする
-
ssh pi@arduino-tester.local
で sshログインをする。 -
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
を実行する(インストール)。 -
cp ./bin/arduino-cli /bin/arduino-cli
を実行する。 -
arduino-cli
を実行してパスが通っていることを確認する。
最後の手順は、ssh経由でarduino-cliを実行するために必要です。(もっといい方法があるかも)
Arduino と ラズパイをUSBで接続する
大事です。
Mac側の準備
Arduino CLI をインストールする
-
brew install arduino-cli
を実行する。 -
arduino-cli
を実行してパスが通っていることを確認する。
Linuxを使ってる人は、curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
を実行してインストールしてください。
詳しくは、https://arduino.github.io/arduino-cli/0.21/installation/#use-the-install-script
以上です。
スクリプトを書く
今回はl_chika.ino
を書き込んでみようと思います。
コードはこれ!
// l_chika.ino
void setup() {
pinMode(21, OUTPUT);
}
void loop() {
digitalWrite(21, HIGH);
delay(100);
digitalWrite(21, LOW);
delay(100);
}
同じディレクトリにsetup.sh
を作ります。
#!/bin/bash
# setup.sh
arduino-cli compile --quiet --build-path ./build -b esp32:esp32:esp32 ./l_chika.ino
HOST=$1
scp ./build/*.bin $HOST:/tmp/
ssh $HOST "arduino-cli config init --overwrite &&
arduino-cli config add board_manager.additional_urls https://dl.espressif.com/dl/package_esp32_index.json &&
arduino-cli core update-index &&
arduino-cli core install esp32:esp32 &&
arduino-cli upload --input-file /tmp/l_chika.ino.bin -p /dev/ttyUSB0 -b esp32:esp32:esp32"
if [ $? -eq 0 ]; then
echo "成功したよ"
fi
このスクリプトは環境によって次の部分を変更してください。
l_chika.ino
はアップロードするArduinoファイルに変更する。
esp32:esp32:esp32
はアップロードするArduinoに合わせる。
arduino-cli board listall
で対応しているFQBNを探せます。
arduino-cli board listall uno
とかで絞り込みも可能です。
/dev/ttyUSB0
は、ラズパイ上でarduino-cli board list
を実行して出てきたデバイスに変えてください。
現時点でのファイル構成はこうなっています。
$ tree
.
├── l_chika.ino
└── upload.sh
0 directories, 2 files
Lチカを書き込む
bash upload.sh pi@arduino-tester.local
を実行する。成功したよ、と表示されたら成功です!!!
私は成功したので、ちゃんとLちかしています!
締め
Arduino CLI には夢を感じさせます。これをもう少し整理して色々と面白いことができそうです。これ使ってArduinoの開発環境の整備がもっと進めていきたいですね〜。
記事に間違いとか、分からないところとか、そういったことがあれば教えてください。では!
Discussion