ここまでのあらすじ
- USBキーボードやマウスの仲間のHIDクラスという仕様のデバイスが作れるようになった
- Mac側のドライバ/ソフトウエアはRubyで書けることがわかった
bootloader
mega328Pにして容量に余裕ができたのでブートローダを入れておくことにした。http://rayshobby.net/?p=7363 の中に入っていたbootloaderの元ネタの https://github.com/baerwolf/USBaspLoader
mega328Pの設定&ハードに合わせて調整。
https://github.com/takeru/USBaspLoader/commit/ef1ae4d1ad4cd44cba23328d18cc02d54c1fe74b
D6をプルダウンしたままリセットすると"USBasp"として振る舞うブートローダが起動する。この状態で本体部分への書き込みができる。書き込みはArduinoIDEから"USBasp"を選べばスケッチを書き込めるし、
avrdude -C /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/etc/avrdude.conf -c usbasp -p m328p -U flash:w:hidled.hex
とすればコマンドラインからavrdudeでも書き込める。
書き込んだらプルアップを外してリセットし直すと、書き込んたソフトウエアが動く。
これでちょこちょことfirmwareを改善していくのが楽になる。書き込み機(Arduinoを使っていた)がいらないので机がスッキリする。
ハードウエア
面倒なのでブレッドボードに組み込んで完成!
- mega328p
- 20MHz 22pF*2
- 100Ω2,1KΩ1
- 抵抗入りLED*5
- トグルスイッチ*2
- 圧電ブザー
- 0.1uF
- 配線
使いながらバージョンアップしていこう。
ソフトウエア
% ruby hidled_host.rb
usage:
ruby hidled_host.rb -r
ruby hidled_host.rb -s 1,0,1,0,0,0,0,0
コマンドラインから8byteを読み書きしてLEDのON/OFFを切り替えます。
まとめ
- 自作USBデバイスをつくるのは思っているより簡単だ
- ブレッドボードのやり直しが出来る安心感はすばらしい
- Arduinoやその他の何かの再発明なきもするが気にしない
- 全部入りの完成品をゴールだとすれば面白いのではないか
- Arduino手に入れてもそこまで行けない人はいっぱいいる
TODO
- ピンもメモリも余裕ありまくりなので全部入りのやつをつくる
- 温度センサ
- 明るさセンサー
- 赤外線LED
- 赤外線受信モジュール
- コンデンサマイク
- Windows / Linux