前回使用したTinyGo Driversというドライバセットは超便利っす。非常に簡単な手順で、定番物の周辺デバイス約100種に対するドライバをTinyGoのコードから使えるようになります。Arduinoなどで人気のデバイスは網羅している感じです。今回はLIS3DH、MEMS加速度センサとの接続を実験。
※「GoにいればGoに従え」Go関連記事の総Index
TinyGo Drivers
TinyGo Drivers のURLが以下に。
前回やったとおり、普通にTinyGoでソースを書くときに、以下の2手順追加するだけで、各種ドライバが使えるようになります。
-
- プロジェクト・ディレクトリの中で 「go get tinygo.org/x/drivers」する
- ソースコードの中で「import “tinygo.org/x/drivers/使うデバイスのお名前”」する
また、上記のURLからたどれるexampleディレクトリ中には、実際にドライバを使ったサンプルプログラムがそろってます。いくつか使った感じでは、マイコンに合わせてピン名を変える程度で動いてしまいます。お楽。とてもお楽。
LIS3DH
LIS3DHは、ST Microelectronics社製のポピュラーな3軸加速度センサです。今回のターゲット機 micro:bit v2は、オンボードで加速度と磁気コンパスの6軸センサを搭載しているので、わざわざLIS3DHを使う必要はないのです。しかしオンボード用とは別にある外付けデバイス用のI2Cバスを使ってみるために殊更に接続してみました。
ST Microelectronics社の製品ページが以下に。
LIS3DH 3-axis MEMS accelerometer
なお、接続したのはArduino用のGroveコネクタ接続のモジュールです。LIS3DHは3.3V電源でOKなデバイスなのですが、Arduino用ということでモジュールは5V電源想定したものです。マズイかな、と気が咎めたのですが、接続したら動いてるみたいなので、結果オーライということで。
サンプルプログラム
テスト用のサンプルプログラムは、TinyGo Driversの中のサンプルプログラムをそのまま使用させていただきました。
以前書いたとおり、micro:bit v2はv1.xとは異なり、オンボード上の周辺機器用I2Cバスとエッジコネクタに出ているI2Cバスは異なります。以下の「1」の方がエッジコネクタにでているI2Cです。
machine.I2C1
また、通常エッジコネクタのP19とP20をI2Cに使うと思いますが、そのときの設定は以下のようです。
サンプルプログラムは、まったく何も変更せずに micro:bit v2をターゲットにビルドし、実行OKでした。
ただし、ゆっくり結果を眺めるために後で一か所「改悪」して速度を落としてます。以下の黄色のマーカ部分です(オリジナルは100となっており100ms毎に計測して結果が出力されます。目が回るので0を1個加えて1000ms毎にしただけ。)
実行結果
USBシリアルに加速度測定結果(整数)が出力されてきます。それを観察したものが以下に。
センサをほぼ水平にすると、XとYは100以下くらいの値になり、Zに16000くらいの値が入ってきます。天地ひっくり返すとZには-16000くらいの値が。まあ、加速度センサは動いている感じ。TinyGo Driversは便利。