SSブログ

ESP32 & 3.5" G_LCD一体型ユニットの製作

 現在私の「ミリ波レーダー」プロジェクトで使っている受信機はRaspberry piと3.5"LCD (480x320)の一体化したものですが、これをESP32と3.5"LCDで出来ないか検討しようと思い写真1のようなユニットを製作して基本機能の確認を行いました。

写真1
ESP32&3.5G-LCD.jpg

 ESP32と2.8"G-LCDの組み合わせユニットではLCDのドライバーICはILI9341を使ったSPI通信でしたが、今回は少しでも表示を早くできた方が良いと思いインターフェースがSPIではなくパラレルのLCD(ドライバーICはILI9488)を使ってみました。
その結果いろいろ問題が見つかり(後述)、調べ事や検討が多く結構大変で時間もかかりましたが何とか使えるようになりました。

 このユニットは機能的にはLCD表示、タッチスクリーン、マイクロSDカード、MONO TWELITE無線通信、LEDアラーム点灯、アラーム音(メロディIC)出力、リアルタイムクロック(RTC)接続ができ、このほかにESP32の持つWiFi接続、メール送信機能が使えます。


== 回路 ==
 回路は図1a、図1bに示すように収納上3つの基板に分けてあり、主要デバイスを搭載するのはB基板になります。
A基板は電源とB基板からの信号をLCDにスルーする中継機能を持ち、C基板はLEDを搭載しています。
LCDは‎Amazonで購入したSEAFRONT社製(約2,500円)と‎ZJchao社製(約2,800円)のものを使い、回路図はこれらに合った接続仕様になっています。

図1a
3.5LCD_ESP32回路1.jpg
(2023.03.21追記) 注意:NJU7223DL1-33 500mA は容量不足でしたので他のタイプをご検討ください。

図1b
3.5LCD_ESP32回路2.jpg

この回路ではLCDのパラレルインターフェースの他、SDカード用のHSPI、TWELITE通信とESP32プログラミング用のUART、拡張GPIO(PCF8574N)とRTC用のI2Cの各通信インターフェースを持っています。

抵抗式タッチパネル対応のLCDの場合 XP, XM, YP, YM信号ピン(デジタルピンと時分割で共用)があるのですが、どのピンがそれなのか分かりませんでした。これらのピンアサインについては決まりがないのか、パネルのメーカーによってまちまちのようです。
調べたところArduinio Unoに接続すればこれらのピンを教えてくれるプログラムあるようで、幸いにもUnoを持っていたので使って調べました。
==> こちら参照 
スケッチはシンプルで検出原理もわかりやすいのでESP32用に書き替えることもできると思います。

ESP32の場合YPとXM端子はそれぞれaYP(IO39), aXM(IO35)のADCに接続する必要があります。(IO39, IO35はTouchScreenライブラリのデフォルト設定。)

IO4ラインに入る100Ωはタッチスクリーンの全域でタッチ検出をできるようにするためのもので、これが無いとESP32ではADC(aYP)の変換データが頭打ちとなってPortrate画面で左側1/4~1/3ぐらいの範囲で検出できません。
==> こちら参照
元々LCDの商品説明にはArduino UNO, MEGA2560, STM32というマイコン名は出てきますがESP32はないので、ESP32との接続は考慮されていないのかもしれません。

LCD用に使うIOが増えたので従来ESP32で直接制御していたLEDとアラーム音(サウンドIC)制御はI2Cを使った拡張GPIOを介して行うようにしました。

オーディオアンプは電源電圧が3.5Vまでなので5Vからダイオード3個のVFで落として使っています。(3.3V電源に繋ぐと3.3Vラインがノイジーになるかと思い止めました。)

ESP32のプログラムは「ESP32書き込みツールの製作」で作ったツールを、TWELITEは書き込みツール(TWELITE R等)を夫々のプログラム端子に接続して行います。(夫々スライドスイッチの切り替えが必要)
TWELITEからの信号を受信しながらデバッグをする場合にはJW1接続してESP32の出力がシリアルモニター側にも送信されるようにします。

(2023.03.21追記)
ESP32は電源の容量が500mA以上(モデルによって異なるかもしれません)必要なようですので、LCD等の電流を考えると800mA程度の容量があった方が良いです。(NJU7223DL1-33の代わりにNJM2845DL1-33等を検討してみてください。)


== 製作 ==
 製作資料は下記を参照してください。
基板製作方法
ユニット製作方法


== ソフトウェア ==
 今回検討用に作ったプログラムは「ESP32 & 2.8" G_LCD一体型ユニットの製作(2)」でリリースしたソフトを当ユニット用に書き替えたもので、以下よりダウンロードできます。ただし検証は十分できていないので多少問題が起きるかもしれません。
==>ダウンロード (V0.2 タッチスクリーン感度改善版)
スケッチ書き込み前にパッケージ内の「プログラム・起動手順」を読んでください。
親機の使用方法などは「ESP32 & 2.8" G_LCD一体型ユニットの製作(2)」のものと類似していますのでそちらの資料を参考にしてください。

 使用するライブラリに関しては、タッチスクリーンのないLCDパネルの場合やタッチスクリーンを使わない場合はグラフィックライブラリにMCUFRIEND_kbvとTFT_eSPI(「ESP32 & 2.8" G_LCD一体型ユニットの製作」で使用したライブラリ)のいずれも使用可能ですが、共にライブラリに変更を加える必要があります。
==> ライブラリの変更
表示確認はそれぞれのライブラリ内のスケッチ例を使ってできます。

 タッチスクリーンを使う場合には現時点ではグラフィックライブラリに MCUFRIEND_kbvを選ぶ必要があります。
またタッチスクリーン用ライブラリは TouchScreen.h に次に示す内容が含まれているバージョンのものを使ってください。
==> TSライブラリ確認

ボタンを使うためにタッチ座標のキャリブレーションデータの取得が必要で、スクリーン上のタップした点に対応するx, y値が取り得る範囲を取得しスケッチ内に反映します。
==> キャリブレーションデータ取得方法

 このプログラムはTWELITEとI2Cデバイスが無くても画面表示やタッチボタンの動作確認ができるようにしてありますが、I2Cに関しては次の変更をしてください。
==> I2C無接続時の処置

ソフトウェアを作成する上での当機の問題点を書き出してみました。
==> こちらを参照。 (2023.03.20更新)


== 後記 ==
 LCDを基板に取り付けたり外したりしているうちにタッチスクリーンが反応しなくなってしまい(多分静電気で壊れた)、もう1台買う羽目になってしまいました。良い方への違いを期待して1台目とは別メーカーの物にしたのですが、タッチスクリーン検出範囲や感度の問題がある事は結局同じでした。
ミリ波レーダーからは100mS毎にデータが送られて来てその度に表示処理をするのでタッチスクリーンの検出が難しと思われ、場合によったらメニューに入るタイミングだけはスイッチを使う必要があるかもしれません。
ともあれある程度性能が見えてきたので、このままレーダー画面の描画を試みようと思います。
(2023.03.20追記)
ポータブルミリ波レーダーの製作(2)」で当ユニットを使いましたが画像処理を含む60mS以下のループでもタッチスクリーン検出は問題ありませんでした。


>> ブログ記事一覧へ
nice!(0) 
共通テーマ:趣味・カルチャー