VL53L0Xについて,複数接続のための調査
はじめに
以前の記事で紹介しました.STmicroelectronics制の距離センサ,VL53L0X
についてです.
このセンサはI2C通信という規格で接続します.
SCL,SDAという名前の2本の信号線に対してバス接続をすることで複数のデバイスを接続することが可能です.
I2C – Wikipedia
GitHubにもVl53L0Xと通信するサンプルプログラムが増えてきました.
しかしながら,どれもVL53L0Xを1つしか接続しているものしかありません.(※探した当時,見つけたら教えてください)
ですので,どうにかしてVL53L0XをI2Cに複数接続できないかと思い,軽く調査したことをまとめます.
結果
先に結論から言うと,VL53L0Xを複数接続して通信することは可能でした.
(複数接続してる評価ボードが売ってるんだからそれはそう)
実際にstm32とI2Cで2つ接続して動作テストをしたのが以下になります.
アプリケーションノートに欲しい情報が書いてありました.
http://www.st.com/content/ccc/resource/technical/document/application_note/group0/0e/0a/96/1b/82/19/4f/c2/DM00280486/files/DM00280486.pdf/jcr:content/translations/en.DM00280486.pdf
によると,XSHUTピンと割り込み(GPIO1)ピンを駆使することで複数接続が可能なようです.
以下にVL53L0Xの標準的な接続図をアプリケーションノートより示します.
アプリケーションノートのこの図には非常に驚きました.
ん?? つまり
「I2Cだけで複数のVL53L0Xを接続したかったらI2C-GPIOエキスパンダを一緒に繋いでそこからGPIOを制御しろ」
ってこと?
納得ですが結構な筋肉技でのゴリ押し感も漂いますね…
自分が2つ接続して動作確認を取った時は,XSHUTを直接GPIOに接続して制御していました.
(この時はGPIO1ピンは使用してない)
アプリケーションノートを読んでいると直接GPIOで制御しても良さそうですが,デバイス1つにつき,GPIOのピンを2つ必要とすると書いてあるので,確かに接続する数が増えるとI2C-GPIOエキスパンダを使用したほうが最終的にはスッキリ配線をまとめることができそうです.
また,VL53L0XのAPIのファイル「vl53L0x_platform.h」内部にて「VL53L0x_SINGLE_DEVICE_DRIVER」というマクロを0にすれば自動的に複数接続用のコンテキストが適用されると書いてありますが,
「VL53L0x_SINGLE_DEVICE_DRIVER」の値を参照してプログラムを変更している箇所はこのAPIの中には見当たりませんでした…
まぁこのAPIおよびアプリケーションノートがリリースされたばかりなので,しっかりしたドキュメントがまだ揃いきっていないのかもしれません.
(ところどころコメント内部がVL6180xと書いてある箇所があった)
まとめ
VL53L0xの複数接続について調べ,アプリケーションノートの存在及び現状を確認した.
何か情報がありましたがぜひ教えていただきたいです!
ディスカッション
コメント一覧
VL53L0X複数接続の情報記事ありがとうございます!
結構前の記事なので今更質問されてもとは思いますが、2つ接続して動かしたとのことなので、もしご存知でしたらご教授頂ければと思いコメントしました。
私も今複数接続をしようとして、各ドキュメントを見てもやり方が分からず困っています。
具体的には、初期化時に接続した個数分のvl530lxに違うアドレスを振る方法は見つけたのですが(https://learn.adafruit.com/adafruit-vl53l0x-micro-lidar-distance-sensor-breakout/wiring-and-test)測距する際に個別のI2Cアドレスを指定する方法が分からず現在奮闘中です・・・
(Adafruitの出しているArduino用サンプルコード(同URLのもの)を読み解いてもI2Cアドレスを指定する記述が見つからず困っています。)