
いつかは壁に当たると思っていましたが早かったです。TinyGoからmicro:bitのADCを使おうとするとエラーになります。ところが同じコードをmicro:bitでもv2をターゲットにすると通ります。TinyGoのmachineのソースをちらちら眺めてみると、どうもnRF51系のADCは未サポートっす。残念。
※「GoにいればGoに従え」Go関連記事の総Index
BBC micro:bitのサポート状況、勝手まとめ
以下の BBC micro:bitのdeveloper community様の
のページを参照すると分かりますが、「似たような顔」をしているBBC micro:bitには4種のバージョンが存在することがわかります。
-
- V2.2X
- V2.0
- V1.5
- V1.3X
因みに「似たような顔」ですが、ボードをよくみると見分けることができます。手元に持っているのは、V2.0機とV1.5機です。そしてこのところTinyGoで実験してきたのは、古い方のV1.5機でした。まあ、TinyGoがmicro:bitを完璧にサポートしてはいないということは分かっていたので、そろりそろりと使ってきたわけです。今回ADC(アナログデジタル変換器)を使ってみようとしてとうとうV1.5がサポートされていないところを踏んづけてしまいました。
まとめるとこんな感じっす。
-
- TinyGoの以下の machine パッケージのドキュメント上はADC関係の関数などがサポートされている。
Documentation / Reference / Microcontrollers / Machine package / microbit
ただし上記のページには micro:bitのバージョンの違いなどに対して言及はない。なお、TinyGoのtargetとして独立にサポートされている microbit と microbit-v2 に対して上記のページしかみあたらない。
-
- TinyGoのmachineパッケージのソースをちらちら眺めるに nRF528xx系デバイス用のファイルにはADCを制御する関数類が定義されている
- TinyGoのmachineパッケージのソースをちらちら眺めるに nRF51系デバイスに対してはADCを制御する関数類が見当たらない
そしてボードのバージョンとMCUの関係は以下のようです。
| micro:bit version | MCU |
|---|---|
| v1.x | Nordic nRF51822 |
| v2.x | Nordic nRF52833 |
つまり、nRF52833搭載している micro:bit v2であればADC関係の関数がmachineパッケージ内に「見える」(ドキュメント通りに)けれども、micro:bit v1.xであればADC関係はmachineパッケージ内に不在、となる筈。
今回実験のコード
今回実験のコードは書きかけ途中のもので、実機に動かすものではありませぬ。ビルドしてエラーになるか否かを確かめただけのもの。
package main
import (
"fmt"
"machine"
"time"
)
var drivepin1 = machine.P8
var drivepin2 = machine.P2
var drivepin3 = machine.P16
func initRingSensor() {
drivepin1.Configure(machine.PinConfig{Mode: machine.PinOutput})
drivepin1.High()
drivepin2.Configure(machine.PinConfig{Mode: machine.PinOutput})
drivepin2.High()
drivepin3.Configure(machine.PinConfig{Mode: machine.PinOutput})
drivepin3.High()
}
func main() {
machine.InitADC()
sensepin := machine.ADC{Pin: machine.P0}
sensepin.Configure(machine.ADCConfig{})
initRingSensor()
for {
val := sensepin.Get()
fmt.Printf("%d\r\n", val)
time.Sleep(time.Second * 5)
}
}
まずは、以下のように v2 をターゲットにビルドかけてみます。
$ tinygo build -target microbit-v2
ビルド成功、ちゃんと .elfファイルが生成されておりますぞ。
さて、以下のようにターゲットを microbit (v1.x系向け)に切り替えてみます。
$ tinygo build -target microbit
エラーを受領。
どうするかな~ もう少しv1.5機で「頑張り」たかったんだけれど。v2機に乗り換える?それともv1.5機で「危ない」方へ向かう?読むもの読んでなかったんで、少し考えます。

