はじめに
ShigezoneでDigisparkを購入したのPlatformIOで動かしてみる。
書き込みの時にコツがいるのでメモっておく。
プロジェクトの作成
作業用ディレクトリを次のように作成する。
$ mkdir -p ~/pio/digispark $ cd ~/pio/digispark
このボードのCPUはATTINY85
なのでボードをdigispark-tiny
に設定する。
$ pio init -b digispark-tiny
プログラムの作成
platformio.iniはデフォルトのままで良い。
src/main.cpp
を次の内容で作成する。
#include <Arduino.h> #define LED (1) void setup() { pinMode(LED, OUTPUT); } void loop() { digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW); delay(500); }
ビルドと書き込み
次のコマンドでビルド。
$ pio run
書き込みでエラー
書き込みで使用しているmicronucleus
がエラーにになる。
$ pio run -t upload (...省略 ...) micronucleus: library/micronucleus_lib.c:66: micronucleus_connect: Assertion `res >= 4' failed. Aborted (core dumped) *** [upload] Error 134
有名なエラーのようでトラブルシューティングは見つかる。
ここによると、udevルールを作成すると良いとある。
/etc/udev/rules.d/49-micronucleus.rules
# UDEV Rules for Micronucleus boards including the Digispark. # This file must be placed at: # # /etc/udev/rules.d/49-micronucleus.rules (preferred location) # or # /lib/udev/rules.d/49-micronucleus.rules (req'd on some broken systems) # # After this file is copied, physically unplug and reconnect the board. # SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666" KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1" # # If you share your linux system with other users, or just don't like the # idea of write permission for everybody, you can replace MODE:="0666" with # OWNER:="yourusername" to create the device owned by you, or with # GROUP:="somegroupname" and mange access using standard unix groups.
次のコマンドで設定を反映する。
$ sudo udevadm control --reload-rules
それでも発生するエラー
デバイスへのアクセス権限の問題だと言われていたが、それを解決したはずなのにまだこのエラーが出る。
micronucleus: library/micronucleus_lib.c:66: micronucleus_connect: Assertion `res >= 4' failed.
試行錯誤を繰り返し辿り着いた解決方法。
ボードとPCをUSBケーブルで接続しているが、書き込む前に一度接続を外すとうまく行くことがわかった。
手順としては次のようになる。
- USBケーブルを抜去
- 書き込みコマンドを実行
- USBケーブルを挿入
- 書き込み成功
まず、USBケーブルを抜いて接続されていない状態にする。
$ pio run -t upload (...省略...) AVAILABLE: micronucleus CURRENT: upload_protocol = micronucleus Uploading .pio/build/digispark-tiny/firmware.hex
この表示が出たところで、ケーブルを接続する。
> Please plug in the device ... > Press CTRL+C to terminate the program. > Device is found! connecting: 40% complete > Device has firmware version 1.6 > Available space for user applications: 6012 bytes > Suggested sleep time between sending pages: 8ms > Whole page count: 94 page size: 64 > Erase function sleep duration: 752ms parsing: 60% complete > Erasing the memory ... erasing: 80% complete > Starting to upload ... writing: 100% complete >> Micronucleus done. Thank you! =================================== [SUCCESS] Took 46.83 seconds ===================================
このようにメッセージが表示されれば書き込み成功。
まとめ
micronucleus
での書き込みには若干のコツが必要となり手間取った。
Google先生によって、エラーメッセージとudevルールまでは簡単にたどり着くが、USBでの接続を一度切るというところまではなかなか見つけられなかった。
無事、LEDがチカチカしたのでOK。