8pino を Digispark 互換にして USB キーボードとして扱えるようにする
8pino という attiny85 をベースに作成されたボードが存在する。
これは Adafruit 社の Trinket(3.3V)の互換機として売られているため、USB キーボードとして扱えることを前提に仕上がっていない。
USB キーボードは 5V を必要とする。そのため、使用する attiny85 は 16mhz 以上で稼働しなければならない。
そこで、Digispark 互換として扱えるようにすることで上記の問題を解決する。
準備
※ 筆者は責任を負いません。自己責任でお願いします!
環境は Mac OSX Elcapitan 10.11.6
前提として次のボードマネージャの URL が Arduino IDE に追加されており、ボードマネージャからボード情報をインストールしていることとする。
まず用意するものとして、Arduino を Attiny85 の ISP としたもの(Attiny85 へ Arduino 経由でプログラムを書き込める状態)を用意する。
もし手元に無い場合は以下の URL を参考にしながら作成する。
micronucleus を 8pino に焼く
次に micronucleus を 8pino へ書き込む必要がある。そのため https://github.com/micronucleus/micronucleus/tree/master/firmware/releases へアクセスして、t85_default.hex
をダウンロードする。ダウンロードした t85_default.hex
を以下のようなコマンドを実行して 8pino へ流し込む。
ちなみに「micronucleusを焼く」にもある通り、一度 reset pin を無効にした状態で micronucleus を書き込んでしまうと、元に戻せなくなるので注意。(High Voltage ISP を作成して元に戻そうと試みたが無理だった)
- 5 Data I/O Pins (reset Pin 有効) [推奨]
avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -Pシリアルポート -b19200 -U "flash:w:t85_default.hex:i" -U "lfuse:w:0xe1:m" -U "hfuse:w:0xdd:m" -U "efuse:w:0xfe:m" -F -D
- 6 Data I/O Pins (reset Pin 無効)
avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -Pシリアルポート -b19200 -U "flash:w:t85_default.hex:i" -U "lfuse:w:0xe1:m" -U "hfuse:w:0x5d:m" -U "efuse:w:0xfe:m" -F -D
書き込んだ後、Arduino ISP 経由で書き込みができなくなる。
この方法に関しては次の記事を参考にした。
littlewire を 8pino に書き込む
Arduino IDE に http://digistump.com/package_digistump_index.json をボードマネージャの URL へ追加する。これは Digispark を開発していく際に必要になる。またボードマネージャから Digispark 専用のボード情報をインストールすると、micronucleus
コマンドが使えるようになる。
次に http://littlewire.github.io/downloads.html へアクセスして最新版の littlewire の firmware をダウンロードする。
これを次のようなコマンド実行して書き込むのだが、コマンドを実行するときはまだ 8pino を PC に接続しない。
~/Library/Arduino15/packages/digistump/tools/micronucleus/2.0a4/micronucleus --run littlewire_v13.hex
コマンドを実行した後に > Please plug in the device ...
と表示されるため、このタイミングで 8pino を接続する。
書き込みが始まって >> Micronucleus done. Thank you!
と表示あれれば完了である。
動かしてみる
コマンドラインからではなく、Arduino IDE でプログラムを書き込む場合も上記と同じタイミングで 8pino を抜き差しする必要がある。
#include <DigiKeyboard.h> void setup() { // don't need to set anything up to use DigiKeyboard } void loop() { // this is generally not necessary but with some older systems it seems to // prevent missing the first character after a delay: DigiKeyboard.sendKeyStroke(0); // Type out this string letter by letter on the computer (assumes US-style // keyboard) DigiKeyboard.println("Hello Digispark!"); // It's better to use DigiKeyboard.delay() over the regular Arduino delay() // if doing keyboard stuff because it keeps talking to the computer to make // sure the computer knows the keyboard is alive and connected DigiKeyboard.delay(5000); }
これを書き込む際に Arduino IDE で ツール > ボード: Digispark(Default - 16.5 mhz) を選択する。
アップロードが成功すると Hello Digispark!
という文字列が 5 秒おきに書き込まれるはず!!