アルパカ三銃士

〜アルパカに酔いしれる獣たちへ捧げる〜

8pino を Digispark 互換にして USB キーボードとして扱えるようにする

8pino という attiny85 をベースに作成されたボードが存在する。

www.switch-science.com

これは Adafruit 社の Trinket(3.3V)の互換機として売られているため、USB キーボードとして扱えることを前提に仕上がっていない。

USB キーボードは 5V を必要とする。そのため、使用する attiny85 は 16mhz 以上で稼働しなければならない。

そこで、Digispark 互換として扱えるようにすることで上記の問題を解決する。

準備

※ 筆者は責任を負いません。自己責任でお願いします!

環境は Mac OSX Elcapitan 10.11.6
前提として次のボードマネージャの URL が Arduino IDE に追加されており、ボードマネージャからボード情報をインストールしていることとする。

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

まず用意するものとして、Arduino を Attiny85 の ISP としたもの(Attiny85 へ Arduino 経由でプログラムを書き込める状態)を用意する。
もし手元に無い場合は以下の URL を参考にしながら作成する。

highlowtech.org

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 経由で書き込みができなくなる。

この方法に関しては次の記事を参考にした。

dumbpcs.blogspot.jp

littlewire を 8pino に書き込む

Arduino IDEhttp://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 秒おきに書き込まれるはず!!