以前、vl53l0xで距離測定を行いました。
elsammit-beginnerblg.hatenablog.com
どうせなら、go言語でも実施してみたいな!!と思い調べてみました!!
せっかく調べたのでまとめておこうと思います!!
■使用環境
用いたデバイスは下記です。
・ラズパイ4
・測距センサ
測距センサですが、こちらを利用。
VL53L0Xレーザー測距センサーToF測距飛行時間測距センサーモジュール 新品価格 |
VL53L0Xを用いた構成は下記となります。
■ラズパイへのI2C設定
ラズパイへのI2C設定は以前こちらにまとめましたので必要に応じて確認ください。
elsammit-beginnerblg.hatenablog.com
■Go言語でのvl53l0x事前準備
Go言語でvl53l0xを用いるにあたり、すでにライブラリが用意されております!!
ライブラリをインストールするにあたり、こちらのコマンドを実行。
go get -u github.com/d2r2/go-vl53l0x
エラーメッセージが表示されなければインストールは完了です!!
設定は以上になります!!すでにライブラリが用意されているのでセッティングが楽ですね!!
■Go言語でvl53l0xを用いた距離測定
ではセッティングが完了しましたので、さっそく距離測定を行うコードを書いていきたいと思います!!
と言ってもすでに本ライブラリを作成した方がサンプルを展開されておりますので、そちらを流用!!
package vl53l0x import ( "fyne.io/fyne/widget" i2c "github.com/d2r2/go-i2c" vl53l0x "github.com/d2r2/go-vl53l0x" "log" "strconv" "time" ) func main() { i2c, err := i2c.NewI2C(0x29, 1) if err != nil { log.Fatal(err) } defer i2c.Close() sensor := vl53l0x.NewVl53l0x() err = sensor.Reset(i2c) if err != nil { log.Fatal(err) } err = sensor.Init(i2c) if err != nil { log.Fatal(err) } for { rng, err := sensor.ReadRangeSingleMillimeters(i2c) if err != nil { log.Fatal(err) } log.Printf("Measured range = %v mm", rng) time.Sleep(time.Second) } }
こちらのコードですが、
i2c, err := i2c.NewI2C(0x29, 1)
でI2Cのデバイス番号(0x29)とI2Cのデバイスドライバ番号(1)を設定します。
それぞれ、
デバイス番号
i2cdetect -y 1
デバイスドライバ番号
ls /dev/i2c*
で確認できます。
そしてこちらのコードでセンサを定義するのと同時にI2Cの初期化を行います。
sensor := vl53l0x.NewVl53l0x() err = sensor.Reset(i2c) err = sensor.Init(i2c)
最後に、
for { rng, err := sensor.ReadRangeSingleMillimeters(i2c) if err != nil { log.Fatal(err) } log.Printf("Measured range = %v mm", rng) time.Sleep(time.Second) }
で1秒ごとに距離の測定を行います。
距離はミリメートルで取得できます。
■困っていること
デバッグログがかなり出力されてしまうので他のログが醜くなっているのが厄介だな、と感じております。
無効方法が分かっていないのでもう少し調べてみようと思います!!