GoにいればGoに従え(25) TinyGo Drivers便利。なんでも簡単接続。

Joseph Halfmoon

前回使用したTinyGo Driversというドライバセットは超便利っす。非常に簡単な手順で、定番物の周辺デバイス約100種に対するドライバをTinyGoのコードから使えるようになります。Arduinoなどで人気のデバイスは網羅している感じです。今回はLIS3DH、MEMS加速度センサとの接続を実験。

※「GoにいればGoに従え」Go関連記事の総Index

TinyGo Drivers

TinyGo Drivers のURLが以下に。

TinyGo Drivers v0.25.0

前回やったとおり、普通に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の中のサンプルプログラムをそのまま使用させていただきました。

examples/lis3dh/main.go

以前書いたとおり、micro:bit v2はv1.xとは異なり、オンボード上の周辺機器用I2Cバスとエッジコネクタに出ているI2Cバスは異なります。以下の「1」の方がエッジコネクタにでているI2Cです。

machine.I2C1

また、通常エッジコネクタのP19とP20をI2Cに使うと思いますが、そのときの設定は以下のようです。

SCL: machine.SCL1_PIN
SDA: machine.SDA1_PIN

サンプルプログラムは、まったく何も変更せずに micro:bit v2をターゲットにビルドし、実行OKでした。

ただし、ゆっくり結果を眺めるために後で一か所「改悪」して速度を落としてます。以下の黄色のマーカ部分です(オリジナルは100となっており100ms毎に計測して結果が出力されます。目が回るので0を1個加えて1000ms毎にしただけ。)

exampleModified

実行結果

USBシリアルに加速度測定結果(整数)が出力されてきます。それを観察したものが以下に。Results

センサをほぼ水平にすると、XとYは100以下くらいの値になり、Zに16000くらいの値が入ってきます。天地ひっくり返すとZには-16000くらいの値が。まあ、加速度センサは動いている感じ。TinyGo Driversは便利。

GoにいればGoに従え(24) TinyGo Driversを使ってNeoPixel接続 へ戻る

GoにいればGoに従え(26) Goの標準ライブラリも46%くらい?はTinyGoで使える へ進む