いつかは壁に当たると思っていましたが早かったです。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機で「危ない」方へ向かう?読むもの読んでなかったんで、少し考えます。