つい先日、Arduino UNO R3を購入しました。正確にはArduino UNO R3互換機の「ELEGOO UNO R3」です。
過去に触ったArduinoは、大人の科学マガジンの付録のArduino互換機「Japanino」だったので、かれこれ9年ぶりにマイコンに触ります。Arduinoを使うのはWindowsユーザーが多いのか、macOSから扱う情報が少ないように思いました。
本記事では、macOSからArduino UNO R3にプログラムを書き込む方法について紹介します。Homebrewがすでにインストールされている前提です。
ELEGOO UNO R3 初心者スターターキットについて
それはそれは大昔廃棄するブレッドボードなどを大量にもらいましたが、前の前の前の引越しの際に使うことなくすべて処分してしまいました。
電子工作に必要なものは、ゲームボーイの改造用に購入したはんだごてくらいです。なにも持っていない状態なので、スターターセットをひとつ買えば色々ついてくるのは助かりますね。個別に買えばもっと安く済むんだろうけど、これで1,800円くらいなので買い集めることを考えるとよかったかなと。
avr-gccのインストール
brew tap osx-cross/avr brew install avr-gcc
とても時間がかかりました。MacBook Pro (15-inch, 2018)で10分以上でした。
dfu-programmer のインストール
Arduino UNO R3には、チップがふたつ搭載されています。Arduino IDEを使ってスケッチを書き込むためのATmega328Pと、USBの通信のためのATmega16U2です。今回はATmega16U2の方にプログラムを書き込むためdfu-programmer
が必要になりました。
brew install dfu-programmer
マイコンにプログラムを書き込む
- ELEGOO UNO R3 (Arduino UNO R3互換機)
- ジャンパー(オス-メス)
- ブレッドボード
前述した「ELEGOO UNO R3基本部品 初心者スターター 互換キット チュートリアル Arduino用」に必要なものがすべて揃っています。2,000円以下でブレッドボード含めいろんなものが含まれているのでとても満足しています。
センサー類は含まれていないので、Lチカ以上のことをする場合には別途購入する必要があります。
DFUモードに入る
DFUモードに入るためにはRST
とGND
をショートさせる必要があります。Arduino UNO R3でのRST
とGND
は下図の場所にあります。ELEGOO UNO R3も純正に準じますが、ほかの互換機によっては場所が異なるようですので各自で回路図を確認した方が良いでしょう。
後述している「RST端子とGND端子をショートさせた状態」は下図の通りです。
手順としては下記の通りです。
- Arduino UNO R3に挿しているUSBケーブルを抜く
- RST端子とGND端子をショートさせる
- ショートさせた状態でMacに接続する
- LEDが光ったらジャンパーをはずす
$ dfu-programmer atmega16u2 get
レスポンスがあればMacがマイコンを認識できています。
Bootloader Version: 0x20 (32)
プログラムを書き込む
Arduino UNO R3を認識できれば、あとはプログラムを書き込むだけです。
$ dfu-programmer atmega16u2 erase $ dfu-programmer atmega16u2 flash {FILE_NAME}.hex $ dfu-programmer atmega16u2 reset
順番に実行していきます。
$dfu-programmer atmega16u2 erase Checking memory from 0x0 to 0x2FFF... Not blank at 0x1. Erasing flash... Success
$ dfu-programmer atmega16u2 flash {FILE_NAME}.hex Checking memory from 0x0 to 0xEFF... Empty. 0% 100% Programming 0xF00 bytes... [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success 0% 100% Reading 0x3000 bytes... [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success Validating... Success 0xF00 bytes written into 0x3000 bytes memory (31.25%).
dfu-programmer atmega16u2 reset
以上で完了です。