以下の内容はhttps://retrospective.hatenadiary.com/entry/20250518/1747499103より取得しました。


#rubykaigi 2025でいただいたI2C接続小型LCDモジュール(8×2行)をATOM Matrixで動かすべくpicoruby-i2cのESP32 portingにチャレンジして表示にこぎつけた

前回

retrospective.hatenadiary.com

ここからアドバイスをいただいたリファレンスを読んで、実装していきました。

docs.espressif.com

実装した範囲

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を呼び出すコードだねということで書いていきました。

現在地点はこちら。

gist.github.com

いまわかってる残課題の大きなものはタイムアウトの数字。 関数としてはマイクロ秒をとるんですが、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できてるのかの実績を積んだら、プルリクをしたてたいと思います。




以上の内容はhttps://retrospective.hatenadiary.com/entry/20250518/1747499103より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14