ArduinoやESP32でI2Cが複数ある場合の接続
2023.11.16


マイコン初心者の私に突然訪れた問題。
I2C接続の部品が複数ある場合はどうしたらいいん?
ArduinoもESP32もSLA、SDAのピンは1つずつしかありませんからね、困りますね。
こういったことは表示系の接続とセンサー系の接続が混在したときによく起きます。
私はSSD1306(OLEDディスプレイ)とMLX90614の接続で起きました。

この問題の基本はSDAとSCLの配線を並列につなげればいいという話。
I2Cの部品にはアドレス番号が割り振られているので、
それぞれ個別にアクセスできるので心配はないようだ。
マスターがArduino、スレーブがMLX90614とOLEDディスプレイという感じ。
マスター、スレーブというと、IDEのHDDを思い出す(;'∀')

MLX90614のアドレスは0x5AでSSD1306のアドレスは0x3Cとなっていて、
SDAはシリアルデータ転送線、SCLはクロック線という役割がある。



配線イメージは↑こんな感じ。
VCCはArduinoやESP32から直接渡すのは全ての部品でOKなわけでなく、
スペックシートで検証した上で配線する必要あるが、
MLX90614程度なら問題はなさそう。

https://www.createmakers.com/becoming-makers/arduino-with-mlx90614-and-oled-display/

詳しい説明は↑でされています。
本来ならばI2Cを使う場合、ライブラリを活用したとしても、アドレスを指定するのが一般的ですが、
AdafruitのMLX90614ライブラリはその指定すらなく簡単に動かすことが可能です。



ソースは↑だけ。とても少ないコードで動きます。
一応、ダウンロードできるようにしておきます。
https://randol-news.net/download/MLX90614.zip

もっとセンサーが増えてきたときは何かトラブルが起きるかもしれないけど、
2つ程度なら動かすのは苦労はなさそうだ。

- CafeNote -