8000 GitHub - akionu/pico-vl53l5cx: A Tiny Library for ST's VL53L5CX using Raspberry Pi Pico C/C++ SDK
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

akionu/pico-vl53l5cx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pico-vl53l5cx

Raspberry Pi Pico(や他のRP2040ボード)でSTのToFセンサ「VL53L5CX」を使うためのライブラリとその使用例です。Raspberry Pi Pico C/C++ SDKで書かれています。が、コードはすべてCです。

このセンサは、RAMにファームウェアを保持するため、起動時にファームウェアを書き込まないと使えません。しかし、書き込むファームウェア自体は、バイナリファイルの形でしか提供されていません。また、レジスタの情報なども非公開です。 なので、このライブラリはSTの Ultra Lite Driver (ULD) for VL53L5CX multi-zone sensor が内容のほとんどです。

使用例で遊ぶ

  1. git clone https://github.com/Yudetamago-AM/pico-vl53l5cx.gitあるいはCode>Download Zipでダウンロードし解凍
  2. exampleフォルダ内の各ファイルにI2Cのピン番号、割り込みピンのピン番号(detection_threshold)、I2Cのバスなどを記入する
  3. ビルドする(環境によりやり方が異なると思います)
  4. build/examples/内に各使用例のフォルダ(と実行ファイル)が生成される
  5. 書き込む(ボードによりやり方が異なると思います)
  6. シリアルモニタを確認する。なお、例によっては接続する前に終わってしまうものもあると思うので、シリアルモニタ開いたまま一旦接続断して書き込む・ループの回数を変更するなどして対応してください。

自分のコードで使う

  1. 自分のプロジェクトにこのライブラリのapiフォルダをコピペする
  2. プロジェクトの(一番上の階層の)CMakeLists.txtにadd_subdirectory("api")と追記
  3. ビルドするソースコードの階層のCMakeLists.txtにtarget_link_libraries(「targetの名前」 pico_stdlib hardware_i2c vl53l5cx)と追記
  4. これでビルド・書き込み・実行がうまくいくと思います。

なお、上と違うディレクトリ構造にした時は、適宜パスを変更してください。

リファレンス

ULDの機能

apiフォルダ内の各ヘッダーファイルに関数の説明があります。

このライブラリとしての機能

使用例を見てもらった方がわかりやすいかもしれません。

i2c_inst_t vl53l5cx_i2c = {i2c0_hw, false};
あるいは
i2c_inst_t vl53l5cx_i2c = {i2c1_hw, false};

のようにしてI2Cバスを指定してあげる必要があります。 また、VL53L5CX_Configurationという構造体型のメンバにi2cがあるので、それに宣言したI2Cバスのアドレスを指定してあげる必要があります。

VL53L5CX_Configuration 	Dev;

Dev.platform.address = (uint8_t)((VL53L5CX_DEFAULT_I2C_ADDRESS >> 1) & 0xFF);
Dev.platform.i2c     = &vl53l5cx_i2c; // set i2c bus

なお、RP2040では7bitのI2Cアドレスを用いるので、1バイト右シフトしています。VL53L5CXは標準で8bitアドレスが0x52(書き込み)・0x53(書き込み)なので、7bitだと0x29となります。

リンク

実装上の注意

ハマったところをメモ代わりに書いておきます。(ちょっと理解が足りてない感じもあります) platform.cのWrMulti関数をそのまま実装したり、ある一定のチャンクに区切って実装したりしても、vl53l5cx_api.cのvl53l5cx_init関数中で_vl53l5cx_poll_for_answer関数を呼ぶ部分でエラーとなります。これは、ファームウェアを正常に書き込めていないためです。というのも、Raspbery Pi Pico SDKのI2Cの実装では、「メッセージ」ごとにStop Conditionの代わりにRepeated Start Conditionを送りますが、これにVL53L5CXが対応していないためです。複数バイトを書き込む際には、VL53L5CXのデータシート のp.12、Figure.14にあるように、 メッセージごとのStop ConditionもRepeated Start Conditionも送らず、一気にアドレス・レジスタ・データの順で送る必要があります(もちろん「転送」の最後にはStop Conditionが必要です)。なお、ST Communityでも VL53L5CX driver vl53l5cx_init() fails として同様の問題が議論されています。

ライセンス

BSD3条項ライセンス。詳しくはLISENCEを見てください。なお、使用したSTのULDならびに改変して使用したRaspberry Pi Pico SDKのコードの一部もBSD3条項ライセンスの下で配布されています。これらについては、コード中に明記してあります。

About

A Tiny Library for ST's VL53L5CX using Raspberry Pi Pico C/C++ SDK

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0