ESP-WROOM-32 を、 Arduino Core for the ESP32 で使用していたのですが、 I2C 関連で通信正常にできない問題に出遭いました。使用しているバージョンは 1.0.0 となっていました。
I2C については、こちらで語られているように問題があるようだったのですが、現時点のバージョンでは解消されているのかと考えています。
- 参考:https://www.mgo-tec.com/blog-entry-problem-i2c-0628-arduino-esp32.html
遭遇した問題点
RTC のモジュールとして、 RX8900 を使おうとしたときに出遭いました。最初はラインをプルアップするのを忘れたので、そのせいで通信が正常に出来ないのだと考えていました。しかし、プルアップしてみても問題は解消せず、という状況でした。
問題といっているのは「デバイスからの値の取得が出来ない」といった状況が発生していました。しかし、 RTC の各レジスタに値はかけているようで、 RX8900 のデバイスは稼働しているようでした。この点から読み込みだけが失敗している状況と考えました。
このとき使用していたスケッチは、 RX8900 は秋月電子で購入した際に紹介されていた ino スケッチです。
解決方法
スケッチの中で、 Wire.endTransmission(false) としている点が、 ESP-WROOM-32 でまずいような感じでした。
後続にもコマンドがあるので I2C バスを解放せずという点はわかるのですが、これが駄目なようでした。この部分を endTransmission(true) でバス解放してあげることで、ひとまずはレジスタからの読み込みも成功するようになりました。
endTransmission(false) を使っているようなものでは、同じように問題に出遭うかもしれません。あるいはバージョンが上がったら、この問題も解消されるかもしれません。