前回
ここからアドバイスをいただいたリファレンスを読んで、実装していきました。
ESP-IDFはバージョンによって仕様が大きく変わるので、このあたりを見ると確実です👍️ https://t.co/qyxAgQS6mb
— yuuu@技術書典18(え15) (@Y_uuu) 2025年5月11日
実装した範囲
picoruby/mrbgems/picoruby-i2c/ports/rp2040/i2c.c at master · picoruby/picoruby · GitHub のESP32版、つまりpicoruby/mrbgems/picoruby-i2c/include/i2c.h at master · picoruby/picoruby · GitHub の実装として、Inter-Integrated Circuit (I2C) - ESP32 - — ESP-IDF Programming Guide v5.4.1 documentationを呼び出すコードだねということで書いていきました。
現在地点はこちら。
いまわかってる残課題の大きなものはタイムアウトの数字。 関数としてはマイクロ秒をとるんですが、ESP-IDFで求められているのはミリ秒。単にミリ秒換算にして端数でたら切り上げつまり1msにすればいいじゃないかとすると、ここでI2C接続小型LCDモジュール(8×2行)AE-AQM0802に繋いでコマンド送る時にタイムアウトが頻発。
こまったのでエイヤの固定値で5msって入れてみてます。
timeout_ms = 5;
動かしてみた
まずはi2c#scan
i2c = I2C.new( unit: "ESP32_I2C0", frequency: 100_000, sda_pin: 25, scl_pin: 21, ) sleep_ms 100 puts "ESP32 I2C Scanner0" puts "==================" puts "検出されたI2Cデバイス:" i2c.scan

- 0x3eがI2C接続小型LCDモジュール(8×2行)AE-AQM0802
- 0x68は内蔵のIMU(MPU6886)
I2C接続小型LCDモジュール(8×2行)AE-AQM0802の表示

PicoRuby epsode 4 - HASUMI Hitoshi - Rabbit Slide ShowのPage 17は3.3vの接続ですが、今回は5v接続なのでコントラストを落としています。そのままでは黒い四角の表示(俗には黒豆腐というらしいです)がされました。
そこで、https://akizukidenshi.com/goodsaffix/AQM0802.pdf データシートの初期設定例のPower/ICON/Contrast controlの下位2ビットがざっくりのコントラストということで、初期0b10から0b00にして、0x56ではなく0x54を送ったところこのようになりました。

この先
タイムアウトちゃんとしたり、本当にread,writeできてるのかの実績を積んだら、プルリクをしたてたいと思います。