前回、VS Code+PlatformIOでESP32 DevKitCを動かしてみました。デバッグプローブが手元に無いので、とりあえずUSBシリアル経由でprintfデバッグは出来ることを確認。しかし、何か足らない感じ。最近、M5Stack系のLCD持つデバイスに慣れていたので、自前のLCDの便利さに慣れてしまった?そこでLCDパネルをESP32に接続してみました。
※「鳥なき里のマイコン屋」投稿順Indexはこちら
接続してみたのは、以前にSTのNucleoボードに接続していた秋月電子のAQM1602XAです。Arm Mbedのクラウド環境でソフト書いて使っていました。I2C接続なので電源、グランド、SCL、SDAを接続すればおしまい。
ESP32 DevKitCを刺してあるブレッドボード上でSCL, SDAを引き出せばよいのですが、前回、申し上げたとおり、DevKitCの基板の幅が広いので外側から信号を引き出しずらいです。わずかに残った外側の接点は後で信号を取り出すため確保しておきたい。そこで、上のアイキャッチ画像をご覧いただければ分かるとおりで、DevKitCの基板下側のスペースから必要な信号を取り出すことにいたしました。その為にはブレッドボードにしっかり差し込まれているDevKitCを一端取り外して配線し、再度取り付けないとなりません。(実は、SCL, SDAを引き出してDevKitCを差し込んでしまってから、電源3V3の配線に気が付き、再度抜き差ししました)今回、一番面倒だったのは、ここかも。38端子あるボードなので、かなりガッチリはまっているので。結局、写真左上から
-
- GND
- IO23番
- IO22番
- TX
- RX
- IO21番
という連続して並んでいる6本を利用しています。GNDはブレッドボードのGNDレーンに接続し、LEDやLCDのGNDに接続。IO23番は前回のLチカで使用したので「ユーザーLED」ということでそのまま利用。IO22番はデフォルトSCL(ESP32の場合端子設定の自由度あり)としてそのまま利用。TX, RXは、DevKitCの中で配線されてUSBシリアルに接続している(printfデバッグ用)。最後のIO21番がデフォルトSDA。
3.3V電源、3V3のみが反対側(写真では左下端)にあるので、これを引き出してLCD電源に与えました。AQM1602XAは、5Vでも3.3Vでも動作可能ですが、今回は3.3V動作です。なお、I2C信号のプルアップ抵抗は、LCDパネル接続基板上のハンダジャンパにハンダをもって、内蔵の10kΩを有効化してあります。
ソフトウエアの方はとても楽。今回、PlatformIOのプロジェクト設定で開発環境をArduinoとしてあるためです。秋月電子からAQM1602XAを買うと付いてくる説明書に書かれているArduino用のサンプルソフトそのままでOK。(前回、同じLCDをNucleoにMbedで接続した際には、物理的にはサンプルソフトとまったく同じシーケンスにも関わらず、ArduinoとMbedのI2Cインタフェース関数の引数定義が異なり「読み替え」間違いをしてトラブリました。)何も考えないで済むのは楽、とても楽。プログラムの頭の方はこんな感じ。
この後に、サンプルソフト相当のデータ、コマンドの書き込み関数、LCD初期化関数を置き、本体プログラムはこんな感じ。
これでLCD画面に出力ができるようになりました。勿論、前回同様にLチカも動き、USBシリアル経由でprintfデバッグもできると。これでM5Stackみたいに便利に使える?