安価なUSB直挿しマイコンDigisparkのススメ

皆さんは電子工作でどんなマイコンを使っていますか？Raspberry PI, Arduino, ESP-WROOM-02(ESP8266), ATmega328Pなど色々ありますが、今日はDigiSparkを紹介します。

## Digisparkとは

DigisparkはUSBに直接挿せるマイコンボードで、USB1.1デバイス(low-speed)になることができます。

![IMG_0536.JPG](https://qiita-image-store.s3.amazonaws.com/0/3134/84362583-6cad-8278-7b58-492bbfc28f96.jpeg)

このボードにはATTiny85と三端子レギュレータと抵抗などの細かい部品しか乗ってません。片面実装なので裏に何かUSBチップがのってるというわけでもありません。ATTiny85自体にはUSBを直接扱うハードウェア的な仕組みはありませんが、USBプロトコルスタックはソフトウェアスタック([V-USB - A Firmware-Only USB Driver for Atmel AVR Microcontrollers](https://www.obdev.at/products/vusb/index.html))が使われています。

元々は[Digispark - The tiny, Arduino enabled, usb dev board! by Erik Kettenburg — Kickstarter](https://www.kickstarter.com/projects/digistump/digispark-the-tiny-arduino-enabled-usb-dev-board/description)というKickstarter案件だったようですね。[Digistump](http://digistump.com/)を見に行くと今はさらなる派生系も含めたDigisparkシリーズを販売しています。

### rev3

ところが、eBayで[検索](http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0.TRC0.H0.Xdigispark.TRS0&_nkw=digispark&_sacat=0)すると、本家より遙かに安い200円未満(かつ送料無料)っていう気が狂ったかのような値段のやつが幾つも出品されていますがクローン品ですね。本家自体はrev3なんてものは出していません。Digisparkは回路図も公開されているため、クローンが簡単に作れてしまうというのがあるんでしょうが、せめて名称くらいは変えてあげれば良かったのにと思わなくもないです。あと、シルク印刷が雑でほぼ読み取れなかったりします。

まぁ安いので大量に買って遊んでみるのもいいかもしれません。中国から発送されて届くまでにはそれなりの日数がかかるのでのんびり待ちましょう。

### 技術情報

Digisparkで開発をする上で見るべき情報は[digispark:tutorials:basics [Digistump Wiki]](http://digistump.com/wiki/digispark/tutorials/basics)と、[digispark:quickref [Digistump Wiki]](http://digistump.com/wiki/digispark/quickref)でしょうか。気が向いたらWikiの他の記事も見るといいですが、基本はこの二つ、というかQuick Referenceで大体必要な情報は事足ります。

* GPIOの出力は20mAまで (VINに7V-12Vの電源を入れれば、500mAまで取れるっぽいがヒートシンクいるかも)。
* 6つあるGPIOのピンのうちP3, P4はUSB入出力で使われます。
* P0かP1のどちらかがLEDと繋がってますが、rev2, rev3はP1と繋がっています。
* [回路図](https://s3.amazonaws.com/digispark/DigisparkSchematicFinal.pdf)を見ておくといいでしょう。腕の立つ人は自作してみても面白いかもしれません。

GPIOピン|ATTiny85|アナログ|その他
--------|--------|--------|-------
P0      |5 (PB0) |PWM          |I2C SDA
P1      |6 (PB1) |PWM          |
P2      |7 (PB2) |A/D(A1)      |I2C SCL
P3      |2 (PB3) |PWM, A/D(A3) |USB D-
P4      |3 (PB4) |PWM, A/D(A2) |USB D+
P5      |1 (PB5) |A/D(A0)      |

表にしてみましたが詳しくはATTiny85の資料を見てください。

ただでさえ少ないピン数ですがUSBデバイスとして使う場合はP3とP4が使用されてしまうので、残りの4ピンでやりくりするしかありません。また容量的にもそんなに激しいものはたぶん乗らないと思うので、向き・不向きの強いマイコンボードです。

## platformioで開発する

```
$ platformio platforms install atmelavr
$ mkdir test-digispark
$ cd test-digispark
$ platformio init --board digispark-tiny
$ cat > src/test.ino
// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(0, OUTPUT); //LED on Model B
  pinMode(1, OUTPUT); //LED on Model A   
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(0, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(1, HIGH);
  delay(1000);               // wait for a second
  digitalWrite(0, LOW);    // turn the LED off by making the voltage LOW
  digitalWrite(1, LOW); 
  delay(1000);               // wait for a second
}
$ platformio run -t upload
〜〜〜〜
Please unplug/plug device ...
"/PATH.../micronucleus" -c digispark --timeout 60 .pioenvs/digispark-tiny/firmware.hex
```

注意点なんですが`platformio run -t upload`を実行して、Please unplug/plug device ... と言われたら、挿すか、抜き差しをしなければなりません(要はハードウェアリセット)。これをしないとアップロードに失敗をしてしまいます。ちなみに容量が小さい為か、フラッシュの書き込みは割と早く完了します。

### 使えるライブラリ

PlatformIOを使う場合、必要なら自前でライブラリを展開しないといけません。

* https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json に書かれてるURLから直接アーカイブを落としてくる
  - 現時点だと https://github.com/digistump/DigistumpArduino/releases/download/1.6.5a/digistump-avr.zip を指しています。
  - DigisparkKeyboard, DigisparkMouse, DigisparkJoystick, DigisparkUSB, TinyWireM あたりがよく使われるところじゃないでしょうか。example を動かしてみるといいかもしれません。
* I2Cスレーブをやる場合、TinyWireS が必要になります。

### DigiUSBにホスト側からアクセスする方法

DigiUSBはUSB HIDを利用してホストと通信をする為のものですが、ホスト側には[digiusb | RubyGems.org | your community gem host](https://rubygems.org/gems/digiusb/versions/1.0.5)が必要になります。

## まとめ

USBに直接挿して、USB HIDなどになれるマイコンボード、Digisparkで遊ぶと楽しいです。[V-USB - Example Projects](https://www.obdev.at/products/vusb/projects.html)を見ると、Digisparkに限らないものの、V-USBを使ったソフトウェアUSBによる様々な作品があるので参考になるかもしれません。やはり、キーボード・マウス・ジョイスティックの自作が鉄板のようです。他にもUSB HIDを使ったおもしろガジェットを作れるかもしれませんので是非是非遊んでみてください。それではごきげんよう。