🕋

ラズパイとArduino CLIを使ってWi-Fi経由で書き込めるようにした!

2022/05/07に公開

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 をインストールする

  1. ssh pi@arduino-tester.local で sshログインをする。
  2. curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh を実行する(インストール)。
  3. cp ./bin/arduino-cli /bin/arduino-cli を実行する。
  4. arduino-cli を実行してパスが通っていることを確認する。

最後の手順は、ssh経由でarduino-cliを実行するために必要です。(もっといい方法があるかも)

Arduino と ラズパイをUSBで接続する

大事です。

Mac側の準備

Arduino CLI をインストールする

  1. brew install arduino-cliを実行する。
  2. 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ちかしています!

LチカするArduino

締め

Arduino CLI には夢を感じさせます。これをもう少し整理して色々と面白いことができそうです。これ使ってArduinoの開発環境の整備がもっと進めていきたいですね〜。

記事に間違いとか、分からないところとか、そういったことがあれば教えてください。では!

Discussion