ArduinoボードでArduinoを書き込む
1.はじめに
パソコンなし環境で、Arduinoで別のArduinoのスケッチを焼くのってどうすれば良いか実験してみました。Arduinoのブートローダには種類が多数あるので、全部対応するのはとても大変そうですが、手持ちのボードに書き込むぐらいなら難しくなかった、という内容です。
2.準備するもの
焼き込みされるボード、焼き込みするボードそれぞれ一枚。今回はAstar-328PB(3.3V 8MHz)というボードを使ってみました。あとはchatgpt5.1です。
2枚のボードを以下の様に配線しました。左がターゲットで、右が書き込み機です。今回はパソコンから右のボードにFTDI変換をつないでいます。プルアップ抵抗は必須のようです。
3. 変換ソフトウェア
まずは他のプロジェクトのHEXファイルを持ってくる必要があります。
そのhexファイルを今回chatgptに作ってもらったhex2h.pyというソフトで変換します。
今回はサンプルとして、blink 1000mS点滅と500mS点滅のバイナリーを.hに変換したファイルを準備しました。
4. 書き込みソフトウェア
chatgptにarduinoでarduinoを焼き込みたいと聞いて、出てきた結果をarduinoIDEにコピペしました。使ってるボードの名称が分かるとoptibootのbuad-rateが決まるのと、bufferサイズについては試行錯誤が必要でした。プロジェクト名はFlashArduinoとしました。
変換したバイナリはfirmware.hとしてFlashArduinoのプロジェクトに配置します。
5. 使い方
使い方は簡単です。
電源を入れて、D2のボタンを押すと、ライター側の基板上のLEDが点灯し、書き込みが終わると消灯します。
その時にArduino IDEのシリアルモニターをつないでおくと、以下の様なlogが見えます。
==== PROGRAM START ====Firmware size: 1148[RST] Resetting target...[RST] Bootloader wait...[SYNC][OK] Synced with target[SIG] 1E 95 16==== FLASHING ====[WRITE] Chunk 1/9 (11%)[WRITE] Chunk 2/9 (22%)[WRITE] Chunk 3/9 (33%)[WRITE] Chunk 4/9 (44%)[WRITE] Chunk 5/9 (55%)[WRITE] Chunk 6/9 (66%)[WRITE] Chunk 7/9 (77%)[WRITE] Chunk 8/9 (88%)[WRITE] Chunk 9/9 (100%)==== VERIFY ====[VERIFY] READ_PAGE not supported by bootloader. Skipping verify.[WARN] LEAVE_PROG failed (ignored)==== DONE (WRITE + VERIFY OK) ====[RESULT] SUCCESS (WRITE+VERIFY)
ここで、ターゲットボードをリセットするとLEDの点滅が始まりました。書き込みを確認するために、500mSと1000mSを交互に書き込んでみるとよく分かります。
6.まとめ
手持ちのArduinoボードを使って、別のArduinoボードをパソコンのない環境で書き込みすることができました。感想ですが、chatgptにエラー内容を見せながら進めると結構簡単に作ることができました。
今回の実験は以上です。
これらのファイルをまとめたものを以下のgithubに置きます。


