- 概要
- 久々にGo言語のgobotフレームワークのWebページを見たらdigisparkやらmicrobitをコントロールする例があった。
- Raspberry Pi上のGo言語からdigisparkを介してLチカ実験をやってみたら,かなり手間取ったので備忘を残す。
- 実験の前提
Go言語インストール→ Raspberry PiでGo言語を動かす
RasPi+Go+arduinoでLチカ→ Raspberry Pi + Arduino UNO + Go言語でLチカする - 先行事例
GOBOT — Digispark
Controlling a Digispark board
-
digispark にlittlewireを書き込む
-
littlewireはdigisparkをUSB接続の入出力インターフェースとして動作させるためのファームウェア。
-
先行事例のgortを使用した方法ではうまくインストールできなかったので,Digistump提供のlittlewireファームと書き込みツールを使用した。
-
Arduino IDEにこの方法でdigispark-cloneをインストールすると,littilewireファーム(littilewire_v13.hex)と書き込みツール(micronucleus)が既にダウンロードされている。
~/.arduino15/packages/digispark/hardware/avr/1.0.0/bootloaders/littlewire_v13.hex
~/.arduino15/packages/digispark/tools/micronucleus/2.0a4/micronucleus - ファームと書き込みツールを個別にダウンロードする場合
- ファーム
https://github.com/kimio-kosaka/digispark-clone/archive/1.0.0.zip
フォームウェア(.hexファイル)はbootloadersフォルダの中にある。 - 書き込みツール
https://github.com/kimio-kosaka/digispark-clone/releases/download/1.0.0/micronucleus-2.0a4-linux-arm.tar.gz
- ファーム
-
次のように操作してdigisparkにlittilewire_v13.hexを書き込む。
$ ./micronucleus littilewire_v13.hex
micronucleusのメッセージに従ってdigisparkの再接続またはリセットする。 - 正しく書き込まれると新たなUSBデバイスが出現する。
$ lsusb
Bus 001 Device 110: ID 1781:0c9f Multiple Vendors USBtiny
-
- digisparkプラットフォームのインストール(make)
Controlling a Digispark board を参照して作業。ただし,Permission denied が多発してインストールできない。$ go install gobot.io/x/gobot/platforms/digispark # gobot.io/x/gobot/platforms/digispark gcc: error: $WORK/gobot.io/x/gobot/platforms/digispark/_obj/_cgo_main.o: Permission denied gcc: error: $WORK/gobot.io/x/gobot/platforms/digispark/_obj/_cgo_export.o: Permission denied gcc: error: $WORK/gobot.io/x/gobot/platforms/digispark/_obj/littleWire.cgo2.o: Permission denied gcc: error: $WORK/gobot.io/x/gobot/platforms/digispark/_obj/littleWire.o: Permission denied gcc: error: $WORK/gobot.io/x/gobot/platforms/digispark/_obj/littleWire_servo.o: Permission denied gcc: error: $WORK/gobot.io/x/gobot/platforms/digispark/_obj/littleWire_util.o: Permission denied gcc: error: $WORK/gobot.io/x/gobot/platforms/digispark/_obj/opendevice.o: Permission denied 上記をsudoで実行した sudo で実行するとgobotファイル群を/root/に探しに行っている。 /root/ にはgobotのファイルが無いのでエラーになる。 $ sudo go install gobot.io/x/gobot/platforms/digispark can't load package: package gobot.io/x/gobot/platforms/digispark: cannot find package "gobot.io/x/gobot/platforms/digispark" in any of: /usr/local/go/src/gobot.io/x/gobot/platforms/digispark (from $GOROOT) /root/go/src/gobot.io/x/gobot/platforms/digispark (from $GOPATH) /root/に~/goフォルダのシンボリックリンクを置いた。 $ sudo ln -s /home/pi/go /root/go sudo でインストールすると,今度はエラーは出ずインストール終了。 $ sudo go install gobot.io/x/gobot/platforms/digispark $
- Lチカのソースコード digispark_blink.go
package main import ( "time" "gobot.io/x/gobot" "gobot.io/x/gobot/drivers/gpio" "gobot.io/x/gobot/platforms/digispark" ) func main() { digispark := digispark.NewAdaptor() led := gpio.NewLedDriver(digispark, "1") work := func() { gobot.Every(500*time.Millisecond, func() { led.Toggle() }) } robot := gobot.NewRobot("blinkBot", []gobot.Connection{digispark}, []gobot.Device{led}, work, ) robot.Start() }
- 実行 / ビルド
$ go run digispark_blink.go # command-line-arguments /usr/local/go/pkg/tool/linux_arm/link: running gcc failed: exit status 1 gcc: error: /tmp/go-link-041728947/go.o: Permission denied gcc: error: /tmp/go-link-041728947/000000.o: Permission denied gcc: error: /tmp/go-link-041728947/000001.o: Permission denied またもやPermission deniedが出たのでsudoで実行。 $ sudo go run digispark_blink.go ビルドもsudoで実行。 $ sudo go build digispark_blink.go ビルドで生成された実行ファイルはsudo不要で動く。 $ ./digispark_blink
- 参考
- Go言語チュートリアル(日本語)
- GOBOTフレームワーク(英語)
- GOBOT-Digispark(英語)
- KosakaLab-BlogのGo言語関連記事