質問: 初質問失礼いたします。 現在秋月のVL53L0XをRaspberryPi 1台に対して2つ使用接続して使用したいと考えております。このToF距離センサーはI2Cアドレス"29"を持ち、ハードでの変更はできません。 ここで、2台をそれぞれ1台ずつ接続して、値の読み出しとXSHUT端子での電源オンオフの動作は確認できました。 しかし、2台並列に接続すると、XSHUTのオンオフに関わらず以下のようなありえないアドレスが認識されます。また、認識されるアドレスは試行するたびに変わります。 ``` pi@raspberrypi4:~ $ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: 03 04 -- 06 -- -- 09 -- 0b 0c -- 0e 0f 10: 10 11 -- 13 14 15 -- 17 18 -- -- -- 1c 1d -- -- 20: 20 -- -- 23 24 25 -- -- -- 29 2a 2b 2c -- -- 2f 30: -- -- 32 33 -- 35 -- -- 38 39 3a -- -- 3d -- -- 40: -- -- -- 43 44 45 -- -- -- -- -- -- -- -- -- 4f 50: -- -- -- -- -- 55 -- 57 58 -- 5a 5b -- 5d 5e -- 60: -- -- -- -- -- -- -- 67 68 -- -- 6b -- 6d 6e -- 70: 70 -- 72 73 74 75 76 77 pi@raspberrypi4:~ $ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: 03 04 -- 06 07 08 09 -- 0b -- -- -- -- 10: 10 11 12 13 14 15 16 17 -- 19 1a 1b -- -- -- 1f 20: -- -- 22 -- 24 -- -- -- 28 29 2a 2b -- -- 2e -- 30: 30 -- 32 33 -- -- -- -- 38 39 -- 3b 3c 3d 3e -- 40: -- 41 42 43 -- 45 -- -- -- -- -- 4b 4c 4d 4e -- 50: -- 51 52 53 -- 55 -- 57 58 59 5a -- 5c -- -- -- 60: -- -- -- 63 64 65 66 67 -- 69 -- 6b -- 6d -- 6f 70: 70 -- 72 73 -- -- -- -- ``` この状況の解決方法をご教授ください。 環境: Raspberry Pi 4(4GB) OKdo版(RSコンポーネンツにて購入) ``` No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster pi@raspberrypi4:~ $ uname -a Linux raspberrypi4 5.4.72-v7l+ #1 SMP Mon Oct 26 10:56:14 JST 2020 armv7l GNU/Linux ```
回答: 1)片方のセンサー("センサーA"と呼びます)の電源を切っておいて、もう一方のセンサー("センサーB"と呼びます)のI2Cアドレスを変更する。 2)センサーAに電源を入れて、センサーAのI2Cアドレスを変更する という操作をラズパイの電源を切らないで行うには、センサーAの電源をラズパイでOn/Offできるように細工する必要があります。 例えば、NJM2865、のような制御端子を持つ電源レギュレータIC を使って、GPIOの信号(GPIO-XX)でAE-VL53LOX(センサーA)の電源のON/OFFができるようにする(下図(I2Cの信号は省略してます)) !画像の説明をここに入力 そうすれば、ラズパイで 1. GPIO-XX(OUTPUT, プルアップ)をLowにする。(センサーAの電源が切れる) 2. センサーBのI2Cアドレスを29以外に変更する。(XSHUTに接続されているGPIO-YYを利用) 3. GPIO-YYをHighにする(センサーAに電源が入る) これで2つのセンサーに異なるI2Cアドレスが設定されるので、ラズパイから自由に両方のセンサーを制御できるようになる。 電源レギュレータは、制御端子があって、出力電圧が3.3Vの低損失型(5Vの入力で3.3Vの出力ができる)ものなら何でも良いです。 たまたま部品箱に入っていたので、例にしましたが表面実装のICは扱いにくいのでリードが出ているものをお勧めします。