1. Arduinoの調子が悪くなった
- Arduino ProMini(3.3V/8MHz)へのプログラムアップロードができなくなった。
- 小さいことが特徴のProMiniにはUSBが付いていないので、PC上のArduino IDEとの接続にUSB-FTDI変換ケーブルを利用する。
- このUSB-FTDI変換ケーブルにちょっと難があり、プログラムアップロードができなくなってしまった。
- RESETしてもLED(D13)が高速点滅するのみでアップロード前のプログラムも動作していない。たぶん、書込が失敗してflashがどうにかなったと思われる。
1.1 ロジックレベル3.3VのRaspberry Piが役に立つかも
- しばらく使っていないRaspberry Pi(私のは model B2)も3.3Vなので何か手があるのではと調べてみると、AVRDUDE(AVR Downloader/UploaDEr)
のマニュアルに嬉しい記述を発見し、これを実行することにした。
If you happen to have a Linux system with at least 4 hardware GPIOs available (like almost all embedded Linux boards) you can do without any additional hardware - just connect them to the MOSI, MISO, RESET and SCK pins on the AVR and use the linuxgpio programmer type.
- なお、以下の説明では、次の3者が登場し、1.と2.はネットワーク接続された状態(sshを利用)、2.と3.はGPIO pin等をワイヤーで接続した状態で動作する。
- PC(Ubuntu) -- Mac, Windowsでも同じはず
- Raspberry Pi(Jessie)
- Arduino ProMini(3.3V/8MHz)
2. Raspberry Piにavrdudeを準備
- 基本的に、参照ページを参照してその通りに実行したのだが、つまづいた点や異なる点などを共有したい。
- なお、参照ページがいつかなくなるかもしれないので、コマンドのみメモしておく。
pi@raspberrypi:~ $ sudo apt-get install bison flex libusb-dev
pi@raspberrypi:~ $ mkdir /avr
pi@raspberrypi:~ $ cd /avr
pi@raspberrypi:/avr $ wget http://download.savannah.gnu.org/releases/avrdude/avrdude-6.1.tar.gz
pi@raspberrypi:/avr $ tar xf avrdude-6.1.tar.gz
pi@raspberrypi:/avr $ cd avrdude-6.1
pi@raspberrypi:/avr/avrdude-6.1 $ ./configure --prefix=/opt/avrdude61 --enable-linuxgpio
pi@raspberrypi:/avr/avrdude-6.1 $ make
pi@raspberrypi:/avr/avrdude-6.1 $ sudo make install
2.1 ビルド必須、最新版はエラー
-
Jessieで
apt-cache search avrdude
するとavrdudeはあったので、ビルドしないでそのまま使えることを期待してsudo apt-get install avrdude
したが、これは、linuxgpioが利用できなかった。- ちなみに、利用可能なprogrammer typeを調べるには、avrdudeの
-c?
オプションを利用する。
- ちなみに、利用可能なprogrammer typeを調べるには、avrdudeの
-
参照ページでは、avrdude version 6.1を利用しているが、現在の最新版は6.3なので、
6.3を利用したが、実行時に、Can't export GPIO *, already exported/busy?: Invalid argument
のエラーが出てしまい、うまくいかなかった。/sys/class/gpio/
には、既にexportされている様子は見当たらない。
(この項目、取り下げさせてください。書いたことは嘘ではないのですが、版の違いとは別の問題のようです。すみません。) -
6.3は諦めて、6.1(参照ページのまま)を取得しなおして解決。
2.2 Raspberry Pi model B2とArduino ProMiniの場合の接続例
この接続の時のavrdudeのconfiguration fileは、次の通りでした。ただし、()内は説明のために追加しました。
pi@raspberrypi:/opt/avrdude61/etc $ sudo vi ./avrdude.conf
(linuxgpioのところのコメントを外して、GPIO番号を入力する)
#
programmer
id = "linuxgpio";
desc = "Use the Linux sysfs interface to bitbang GPIO lines";
type = "linuxgpio";
reset = 2;
sck = 3; (→ arduinoのsck(D13)に接続)
mosi = 17; (→ arduinoのmosi(D11)に接続)
miso = 4; (→ arduinoのmiso(D12)に接続)
;
3. アップロードする.hexファイルを準備
- PC上のArduino IDEで、ArduinoのサンプルのBlinkを開き、(自分のプログラムとわかるようにちょっと変更し、)好きなフォルダで一度コンパイルする。
- メニューから、「スケッチ -> コンパイルしたバイナリを出力」を選択する。
- Blink.inoと同じフォルダに、2つの.hexファイルが生成され、ファイル名でbootloader付きと無しがわかる。
- Blink.ino.eightanaloginputs.hex
- Blink.ino.with_bootloader.eightanaloginputs.hex
- bootloader付きの方を、Raspberry Piに転送する。
$ scp Blink.ino.with_bootloader.eightanaloginputs.hex pi@XXX.XXX.XXX.XXX:arduino/BlinkwB.hex
4. Raspberry PiからArduinoにプログラムをアップロード
pi@raspberrypi:~/arduino $ sudo /opt/avrdude61/bin/avrdude -c linuxgpio -p m328p -e -U flash:w:BlinkwB.hex -v
以上です。Blinkが動いてこんなに感動するとは思いませんでした。