第一印象は、この一言に尽きます。「え〜、こんなにちっちゃいの!?」
とってもちっちゃいNekoboard2 |
念のため追記しておきますが、Nekoboard2にはモータドライバもArduinoとしてのI/O端子もありません。オリジナルのMIT PicoBoardと同じ機能。いまはSparkFun版が公式のようですね。よって、自作スケッチもセンサの値をシリアルで送る以外にこれといって実用的な用途はなさそうです。
SparkFun版もそうですが、ATmega328Pを使いながら、使うI/Oはたったの8個という豪華仕様。未使用ピンがたっぷりありますが32TQFPパッケージで周囲も他の部品が密集して取り囲んでいるのでリードを引っ張りだすのはほぼ無理。クロックも16MHzで、速度的にも余裕たっぷりです。
Nekoboard2は、MITがワニ口クリップのついたケーブルをイヤフォンジャック4個でつなぐ形にこだわるのを捨てて、とにかく小さく、安くする方針というのが特徴になると思います。日本では両ワニ口ケーブルが簡単に入手できるので、イヤフォンジャックつき専用ケーブルはちょっと過剰な仕様ではないかと僕も思います。
というわけで、Scratchセンサボード本来の使い方として、MITのScratch 2.0サイトにアクセスして、ブラウザに機能拡張を入れて動くことを確認したのち、Arduinoスケッチを書き込んだらどうなるのか、試してみました。
目的は、ドリトルのArduino対応用スケッチで、ドリトルのセンサボードとして使う、という方向です。結論からいうと、とても簡単でした。実際、普通に使えてしまいます。
以下、作業手順を記録しておきます。
まず、出荷状態のファームウェアのバックアップをとります。Nekoboad2は特にコードがロックされていないので、avrdudeで簡単にFlashの読み書きができます。ただ、Scratch 2.0対応とするためにFT231XS USB-シリアル変換チップのDTRがATmega328Pのリセットにつながっていないので、optibootをbootloaderにしていると、単にUSBでPCと接続しただけではavrdudeからリセットがかけられません。
よって、タクトスイッチの手前、FTDIチップの右にあるISP端子を使います。つまり、ISP装置必須です。といっても、arduinoISPが使えるので、Arduinoで生のAVRにArduinoのbootloaderを書き込むのと同じ準備でいいと思います。適当に検索していただく感じで。手元にはAVR ISPmkIIがあるので、それを使いました。
ISPの位置 |
何度も書き換えを行う場合はISP端子にピンヘッダを立てておくのがよいと思いますが、今回は借り物なので、はんだづけしないで「指の力で押さえる」方式をとりました。
ピンヘッダを取り付けたISPコネクタを基板に押し付ける |
それで、avrdudeを使いますが、Arduino IDEがインストールされていればそのharware/avr/tools/以下にツールチェインが揃っているので、それを使うのが簡単。bin以下にバイナリがあり、etcの下にavrdude.confがあります。よって、
$ cd /Applications/Arduino.app/Contents/Java/hardware/avr/bin
$ ./avrdude -C../etc/avrdude.conf -p m328p -cavrisp2 -v -v -U flash:r:/tmp/flash.bin:r
これで、/tmp/flash.binにバックアップがとれます。Windowsな方は適当にアレンジしてください。
こんなログがとれました。
今度は適当なArduinoのスケッチを書き込むわけですが、これはArduino IDEでできます。
avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "../etc/avrdude.conf"
User configuration file is "/Users/abcde/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : avrisp2
avrdude: usbdev_open(): Found AVRISP mkII, serno: 000200006105
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : STK500V2
Description : Atmel AVR ISP mkII
Programmer Model: AVRISP mkII
Hardware Version: 1
Firmware Version Master : 1.10
Vtarget : 5.1 V
SCK period : 8.00 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: reading flash memory:
Reading | ################################################## | 100% 9.61s
avrdude: writing output file "/tmp/flash.bin"
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: safemode: Fuses OK (H:05, E:D6, L:FF)
avrdude done. Thank you.
ボードの設定を「Arduino Pro or Pro Mini」に、プロセッサを「ATmega328 (5V; 16MHz)」に選択します。
ボードとプロセッサの選択を間違えないように |
メニューから書き込みを実行 |
これで、書き込んだスケッチが動作しているはず。といってもNekoboard2上の赤い明るいLEDは単なる電源ランプなので、Lチカできません。残念でした。
今回はドリトル同梱のスケッチを使いましたが、センサの値をシリアルで送信するようなスケッチとして、[ファイル]→[スケッチの例]→[3. Analog]→[AnalogInoutSerial]あたりはどうでしょうか。といっても、A0はセンサでなく外付けセンサA端子なので、コメント直下の最初の行にある「
const int analogInPin = A0;
」を、A4(明るさ)、A5(音量)、A7(スライドボリューム)のどれかに変えてからコンパイルするのがよいと思います。それで、シリアルモニタを開くと、値が数値で表示されるはずです。それから、Nekoboard2はタクトスイッチがD2につながっているので、デジタル入力のサンプルで値が変化するのをみてもよいと思います(Scratch向けには1のとき1023を返すようにしているようです)。というわけで、簡単にArduinoとして使えることがわかってしまいました。USB-シリアル変換チップもFTDIを使っているのでとても安定していて、いい感じです。
さて、返却前にファームウェアをもとに戻しておかなくてはいけませんので、再びavrdudeを使います。ISPをつなぎましょう。
こんなログがとれました。$ ./avrdude -C../etc/avrdude.conf -p m328p -cavrisp2 -v -v -U flash:w:/tmp/flash.bin
avrdude: Version 6.0.1, compiled on Apr 14 2015 at 16:30:25
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "../etc/avrdude.conf"
User configuration file is "/Users/abcde/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : usb
Using Programmer : avrisp2
avrdude: usbdev_open(): Found AVRISP mkII, serno: 000200006105
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : STK500V2
Description : Atmel AVR ISP mkII
Programmer Model: AVRISP mkII
Hardware Version: 1
Firmware Version Master : 1.10
Vtarget : 5.1 V
SCK period : 8.00 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.01s
avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "/tmp/flash.bin"
avrdude: input file /tmp/flash.bin auto detected as raw binary
avrdude: writing flash (32768 bytes):
Writing | ################################################## | 100% 9.52s
avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against /tmp/flash.bin:
avrdude: load data flash data from input file /tmp/flash.bin:
avrdude: input file /tmp/flash.bin auto detected as raw binary
avrdude: input file /tmp/flash.bin contains 32768 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 9.63s
avrdude: verifying ...
avrdude: 32768 bytes of flash verified
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D6
avrdude: safemode: efuse reads as 5
avrdude: safemode: Fuses OK (H:05, E:D6, L:FF)
avrdude done. Thank you.