ESP32 の I2C の罠

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) を使っているようなものでは、同じように問題に出遭うかもしれません。あるいはバージョンが上がったら、この問題も解消されるかもしれません。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする