macsbug

WiFi Console

leave a comment »

レトロ な ワイヤレス コントローラーを作ります。        2022.10.03

ワイヤレスでゲーム:WiFi Console と ESP32-2432S028

構成:FC Console, Swicth, Battery Charger, M5Stamp C3U, Battery
.


.
仕様:
1. WiFi :M5Stamp C3U:3.5 x 2.0 x 5 mm:中に入るサイズ。
2. 電源;USB 又は 内蔵 Battery 。
3. 接続方法;UDP 通信 。
4. USB Power;5V 80mA 。
5. FC Console ; ボタンと送信データー 8bit (1, 2, 4, 8, 16, 32, 64, 128)。
_ 複数ボタンの同時押しは 合計値になります。例:左 UP(16) + 右上(2) = 18

.
開発環境:
Arduino IDE 1.8.19
Board Manager : arduino-esp32 2.0.3-RC1
Library :joshmarinacci / nespad-arduino : Josh Marinacci 氏に感謝。
.


.
Down Load:DL後 pdf(_.pdf)を削除しzipを解凍します。
🟢 Doun Load: wifi_console.zip
🟢 Down Load:SpaceShooter_WiFi_2432S028.zip

🟢 Down Load:Tetris_wifi_2432S028.zip


.
ESP32_2432S028 タッチパネル バージョン
🟢 Down Load : Tetris_ESP32_2432S028.zip
.


.
部品リスト:費用:1490円 (購入時の価格)

No. Nomen Purchase Price
1 FC Game console
.
TECTINTER Official
. $3.39
. 輸送期間 : 11日
404円
2 M5Stamp C3U
.
M5Stack Official Store
. $31.7
. 5pcs販売 3417円,1個 685円,
 685円
3 Battery Charger
.
Lithium Battery Charger Module
. Type-C protect , 10pcs 590円
. 輸送期間=16日
59円
4 Battery:FUJIFILM
. NP-40 , 3.6V 750mAh
. 40x35x6mm , 厚み<6mm
.
秋葉原・中古屋 100円
4 Battery:ロワジャパン
. ( キャノン )
. NB-4L , 3.7V 760mAh
. 40x35x6mm
ロワジャパン
5 スライドスイッチ
.
秋月電子通商  20円
6 ピンヘッダ(低オス) 8.5mm 秋月電子通商  40円
7 ピンソケット(低オス) 3.6mm 秋月電子通商  60円
8 ユニバーサル基板 0.3mm厚
.
秋月電子通商 120円
9 Spacer:位置調整
10 Wire :

バッテリーの厚みは 6mm 以下が必要です。
🔵 1900円 ESP32 + 2.8″ Display ESP32-2432S028 の販売店は Sunton Store です。
🔵 2.8″ Display の解説は ESP32-2432S028 を参照ください。
.


.
製作:
FC Console の 配線図と信号:
1. スイッチが押されるとDATAはGNDになります。
2. 10個のスイッチから 押された場所の信号(DATA)が出力され 受信されます。
- 複数のスイッチが押された場合は 合計値(足し算)のDATAになります。
3. 受信側は STROBE,CLOCK,DATA信号からスイッチの場所を検出。

3V3,GND 2本と STROBE(21), CLOCK(20), DATA(9) 3本を配線。 (C3U GPIO)

.

🔴 USB Charger(4.2V)から C3U 5Vへ供給。
🟠 Batteryから Switchを介して C3U 5Vへ供給。
🟠 Switch ON で Charger (4.2V)  から Battery を充電。
組み込み時 M5Stamp C3UのUSBは 使用しない。

.
配置:

Front Cover and Front Switch Battery  charge
USB connectorの穴を開ける

.

Stamp C3U , Conductive switch PCB , Battery Switch, Spacer

.

Battery:NP-40, NB-4L
40x35x6mm
厚み 6mm 以下
Rear cover : cut a part
中央の押さえは切り取る。
左右の押さえは残しておきます

.

ESP32-2432S028 WiFi 接続

.


.

//=============================================================
// WiFi Console : 2022.08.30 : macsbug
// https://macsbug.wordpress.com/2022/10/03/wifi-console/
//=============================================================
// HARD : fc console
// HARD : M5Stamp C3U
// Dev environment   : Arduino IDE 1.8.19
//  Board Manager    : arduino-esp32 2.0.3-RC1
//  Board            : "ESP32C3 Dev Module"
//  Upload Speed     : "921600"
//  USB CDC On Boot  : "Enabled"
//  CPU Frequency    : "160MHz (WiFi)"
//  Flash Frequency  : "80MHz"
//  Flash Mode       : "QIO" or "DIO"
//  Flash Size       : "4MB(32Mb)"
//  Partation Scheme : "Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)"
//  Core Debug Level : "None"
//  Port             : "dev/cu.usbmodem142401 (ESP32S3 Dev Module)"
// Library           : joshmarinacci / nespad-arduino
//              https://github.com/joshmarinacci/nespad-arduino
// ------------------------------------------------------------
// Wiring            : FC  : STROBE, CLOCK, DATA
//                   : C3U : 21    , 20   , 9
// FC Console Data   : none=0, select=4, start=8
//                   : L : L=64, R=128, U=16, D=32
//                   : R : L=2 , R=1  , U=2 , D= 1
//=============================================================
/* this example from the NESpad Arduino library
   displays the buttons on the joystick as bits
   on the serial port - rahji@rahji.com   
   Version: 1.3 (11/12/2010) - got rid of shortcut constructor 
                             - seems to be broken*/
//=============================================================

#pragma GCC optimize ("Ofast")
#include <WiFi.h>
#include <WiFiUDP.h>
#include <WiFiClient.h>
#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel pixels(1, 2, NEO_GRB + NEO_KHZ800);
const char *ssid = "fc";             // SSID
const char *pass = "12345678";       // Password
const int   Port = 9000;             // Port
static WiFiUDP UDP;                  // UDP Object
IPAddress HostIP (192, 168, 4, 1);   // Host IP
IPAddress myIP   (192, 168, 4, 2);   // my   IP
#include <NESpad.h>                  // NESPad Arduino Library
NESpad nintendo = NESpad(21,20,9);   // GPIO:strobe,clock,data

//=============================================================
void setup() {
  Serial.begin(115200);
  pixels.begin();
  WiFi.mode(WIFI_STA);
  UDP.begin  (myIP, Port);
  WiFi.begin (ssid, pass);
  WiFi.config(myIP, WiFi.gatewayIP(), WiFi.subnetMask()); 
}

//=============================================================
void loop() {
  int dt = nintendo.buttons();  
  String tx = String(dt);
  if ( dt>0 && dt<255 && UDP.beginPacket(HostIP, Port) ) {
    //Serial.println(dt);
    UDP.println(tx);
    UDP.endPacket();
    pixels.setPixelColor(0,pixels.Color(255,0,0)); // ON RGB
    pixels.show();
    if (dt == 4){delay(2000); ESP.restart();}    // re_start
  }
//delay(5);
  pixels.setPixelColor(0,pixels.Color(0,0,0)); // OFF
  pixels.show();
}
//=============================================================

.


.
感想:
コントローラーは いろいろありますが レトロなデザインを選択。
デザイン:中に全て入る事。
_ 小型の M5Stamp C3U が唯一入ります。
_ バッテリーは 6mm以下でないと入りません。
_ FC Console の工作は なるべく少なくする。
何に使用するのか:
_ とりあえず ESP32-2432S028。
_ 次回の テーマに使用します。
.
プログラム:ワイヤレスとは何か?
_ ワイヤー接続は 連続で信号を送り 消費電力は少ないです。
_ WiFi接続の場合は 連続送信する事で バッテリーの消費が課題になります。
_ Tetris Game は 25msec 間隔でブロックが落下します。
_ スイッチの情報は その25msec より速く送る必要があります。
_ 省電力の為に いろいろ思考しましたが 変化のある時だけ送信するという
_ のは 意味が少ないです。よって 単純な連続送信としました。
.
バッテリー:
_ 中に収める為に 厚み 6mm 以下が必要です。
_ NP-40 FUJIFILM 40x35x6mm
_ NB-4L CANNON 40x35x6mm, 互換 ロワジャパン
_ 通常 価格は 高いので安い所を探しましょう。
_ 秋葉原・中古屋で安く購入しましたが 常にあるかは別です。
.
.
.
.


.
Famicon , Controller , Console , M5Stamp C3U , WiFi , UDP , Battery ,
ESP32-2432S028 ,

Written by macsbug

10月 3, 2022 at 9:03 am

カテゴリー: ESP32

ESP32-3248S035

leave a comment »

ESP32-3248S035R/C motherboard        ORG. 2022.09.16
.                         rev 1. 2022.09.19
.                         rev 2. 2022.09.22
3.5″ 320×480 SPI ST7796 with Resistive Touch Panel XPT2046
価格:🟢 2314円 送料込 ($16.13)。輸送期間:14日。

3.5″ 320×480 SPI ST7796 with Capacitive Touch Panel GT911
価格:🟢 2733円 送料込 ($19.04)。輸送期間:未到着。

低価格で ESP32, LCD Display等が1つの基板でできています。
販売店:Sunton Store
輸送期間;14日で Aliexpressの中では早い方でした。
サイズ:Displayは 75x50mmでカードサイズ。全体は 101.5×54.9mm。


無印のメイクパレット・S (990円) に入ります。

.


.
構成:
1. ESP32 with TELEC(211-161007) : 内部 4MB(32Bit) Flash
2. 外部 4MB(32Mbit) Flash memory, winbond 25Q32JVSlQ
3. LCD ( ST7789 ) with Touch ( XPT2046 抵抗膜方式)
4. Expanded IO x 2
_  P3 ( GND, GPIO_35, GPIO_22, GPIO_21)
_  CN1 ( GND, NC, GPIO_21, 3.3V)
5. SD SLOT ( Micro SD ) : CS=GPIO_5
6. RGB LED ( MHP5050RGBDT )
_  RED=GPIO_4, GREEN=GPIO_17, BLUE=GPIO_16
7. CDS ( GT36516 ) : CS=GPIO_34
8. EXT Power Conn : P1 ( VIN, TX, RX, GND )
9. Audio OUT(Audio amp SC8002B) : GPIO_26
_  P4 SPEAK(1=VO1, 2=VO2)
10.  P1 Power Supply Bace Connector(VIN, TX, RX, GND)
11.  付属:Touch pen, 4pin External connector cable, USB Cable。
資料:
購売店に ESP32-3248S035Rのdownload linkがあります。重要です。
– Display Libraryは LovyanGFX (ST7789, XPT2046, SPI2_HOST)で動作。
– 3.5inchは 大きく 操作性良く  とても見やすい大きさです。
– ボタンやキーボード等を自由に配置でき 物理スイッチは不要です。
.


.
開発環境 :
HARD : ESP32_3248S035R ( R = Resistor Touch の意味 )
– Display : 3.5″ 320×480 SPI ST7796 LCD Touch XPT2046
Dev environment : Arduino IDE 1.8.19
– Board Manager : arduino-esp32 2.0.3-RC1
– Board : “ESP32 Dev Module”
– Upload Speed : “460800” (Mac), “921600” (Win)
– CPU Frequency : “240MHz (WiFi/BT)”
– Flash Frequency : “80MHz”
– Flash Mode : “QIO” or “DIO”
– Flash Size : “4MB (32Mb)”
– Partition Scheme : No OTA (2MB APP/2MB SPISSF)”
– Core Degug Level : “None”
– PSRAM : “Disabled”
– Arduino Runs On : “Core 1”
– Events Run On : “Core 1”
– Pord : “dev/cu.wchusbserial14240”
_ memo :
_ CH340C の為 Upload Speed は Mac と Win では 異なります。
_ LovyanGFX Touch cfg.pin_int = 36; Touchが動作しない場合は -1 にします。
Library : LovyanGFX
.


.
🔴 追記:SPI接続 設計ミス:2022.09.22
ESP32-2432S028 , ESP32-3248S035 の U4 外部 4MB Flash memoryについて。
U2 ESP32-WROOM-32 は 内蔵 4MB Flash です。そして外部Memoryとして
U4 4MB Flash Memory 8Pin W25Q32JV があります。
Flashは SPI接続で VCC以外のPinは全て(CS,DI, DO, WP,CLK, HOLD,GND)共通。CSもです。
マルチサブモードやマルチスレーブにはなっていません。
よって U4のCS並列接続は設計ミスと判断しています。
不具合事例:Arduino IDEでUP LOAD(書き込み)時にエラーが発生し書き込み不可。
_    Flashの破損。他、不可解な現象が発生します。
現象:UP LOAD不可。🔴 Flashが壊れます。
原因:U2内部FlashとU4外部FlashのCS,DI,DO共通によりFlashが重複。
対策:🟢 U4 Flash を取り除きます。
詳細:以降の解説 19 を参照ください。
.


.
🟠 記事修正:2022.09.19
UP LOAD に関し 設計ミスが判明し修理致しました。
.


.
Down Load:DL後 pdf(_.pdf)を削除しzipを解凍します。
🟢 Down Load : Life_Game_ESP32_3248S035.zip
🟢 Down Load : LVGL802_demo_ESP32_3248S035.zip
🟢 Down Load : Maze_generator_ESP32_3248S035.zip
🟢 Down Load : MovingCircles_ESP32_3248S035.zip : obj_count 100 =11 FPS,
🟢 Down Load : Raytrace_ESP32_3248S035.zip
🟢 Down Load : Test_PDQ_ESP32_3248S035.zip
🟢 Down Load : uncannyEyes_ESP32_3248S035.zip
🟢 Down Load : Tetris_ESP32_3248S035.zip:revision:Bug修正。2022.09.19
.
🟢 Down Load : WebRadio_ESP32_3248S035_SP.zip:revision:2022.09.19
- Web Radio ESP32-3248S035 Speaker版:
- P4 SPEAK 端子にSpeakerを接続し音を再生出来ます。
- 8Ω 2W 40x5mm Speaker と間に100Ωを接続します。過電流防止です。
- ダイソー330円スピーカは 直接接続でき 充分聞ける音質です。
- デジタル Web Radio ESP32-2432S028-I2S方式との比較はノイズが僅か入ります。
- 局の廃止や受信不良が発生する場合があります。

.


.
部品レイアウト:配置、信号、ピンは色分けしてあります。

以下のPDF図面は 拡大表示が可能と文字検索が可能です。
配線や設計、改造時に便利です。
🟢 ESP32-3248S035R_PCB_Layout
.
GPIO Pin Assign:部品とGPIO表です。
1. GPIO39 は 未配線。
2. LCDとTouchの SCLK(14), MOSI(13), MISO(12) は 共有。(薄緑)
3. Touch Resistive CS と Touch Capacitive SDA は 共有。(薄紫)
4. P3 IO21 と CN1 IO21 と Capacitive Touch INT は 共有。(薄橙)
.

Cds R21
GPIO 34
Audio AMP U5
GPIO 26
LED1 RED GREEN BLUE
GPIO 4 16 17
U4 Flash HOLD WP CLK DI DO CS
GPIO SD2 SD3 CLK SD1 SD0 CMD
GPIO 9 10 6 8 7 11
LCD SPI LED RST DC(RS) SCLK MOSI MISO CS
GPIO 27 EN(-1) 2 14 13 12 15
Touch SPI Resistive INT(IRQ) SCLK MOSI MISO CS
GPIO 36 14 13 12 33
Touch I2C Capasitive INT(IRQ) SCL SDA RST
GPIO 21 32 33 25
SD DATA2 VSS VDD CLK
(CLX)
MOSI
(CMD)
MISO
(DAT0)
CS(CD)
GPIO 3V3 GND 3V3 18 23 19 5

.
Connector:

P3 GND IO35 IO22 IO21
CN1 GND NC IO21 3V3
P1 VIN TX RX GND
P4 VO1 VO2

.
Touch Panel:
1. Touch Calibration:
_ 電源ONでタッチキャリブレーションが始まり四隅の入力が終了で
_ Calibration の値を取得できます。Arduino IDEのSerial Monitorに
_  uint16_t calData[5] = { 200, 3559, 194, 3741, 3 };
_  tft.setTouch(calData);
_ とか表示され calData として使用できます。
_ Library TF-eSPI で setup に記載して使用できます。

2. LGFXで 以下の値でも結構まともにセンスします。
_ cfg.x_min = 360; , cfg.x_max = 4200;
_ cfg.y_min = 180; , cfg.y_max = 3900;

Touch x_min x_max y_min y_max
LGFX 360 4200 180 3900

.
3. タッチパネル使用可能条件:
_ Arduino IDE : CPU Frequency : “240MHz” と LGFX cfg.pin_int = -1;
_ Arduino IDE : CPU Frequency : “160MHz” と LGFX cfg.pin_int = 36;
_ スケッチ;Loop中に長いdelayを入れない事。参考:Tetris


.
解説:
- ESP32やESP32ボード共通の情報も含まれます。

1. ESP32 : 内部 4MB(32Bit) Flash
- esptool.py flash_id の表示。

Detecting chip type... ESP32
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 40:22:d8:57:f1:fc
Uploading stub...
Running stub...
Stub running...
Manufacturer: ef
Device: 4016
Detected flash size: 4MB

.
2. U4 External FLASH Memory 4MB(25Q32):
- 外部 4MB(32Mbit) Flash memory, winbond 25Q32JVSlQ
- 拡張用のFLASH 4MB です。CS=GPIO_11。
- 3V 32M-BIT SERIAL FLASH MEMORY WITH DUAL, QUAD SPI
- External Flash : Start Address 0x3F40_0000 End 0x3FF8_0000
- 4MB (4194303バイト):詳細:ESP32 Technical Reference Manual
_ 参考:ESP-WROOM-32の外部フラッシュメモリにアクセスする
.
3. LCD Touch MISO:Arduino IDE の setup に必要な設定。
- このボードでは GPIO_39 Input は使用されていません。
- GPIO_39 は  WiFI使用時に Pulseが発生します。(画像:左)
- 対策:以下を記載するとPulseは無くなります。 (画像:右)
- 原因:ESP32チップのバグです。

void setup() {
WiFi.begin();
WiFi.setSleep(false);

- GOIO 36 Input
- 同様にESP32のバグで GPIO36も短いスパイクが出るという情報。
- GPIO39, GPIO36 もPulseにより接続部品が壊れる事を想像します。
- 対策:adc_power_acquire(); を setupの先頭に記述します。
- 結果:GPIO36 および GPIO39 のグリッチは除去されます。

void setup() {
adc_power_acquire();
WiFi.begin() WiFi.setSleep(false)

.
4. 配線図とボードの差異:
- 部品タイプの変更。
- 配線図:R1, R3, R12, R13, R14, R18, SMD 103 10KΩ。
- ボード:R1, R3, R12, R13, R14, R18, SMD 01C 10KΩ。

- Audio Circuit : GAIN の変更。回路図を参照してください。
-  配線図:R7 = 47KΩ。ボード:R7 = 0Ω
-  配線図:R8 = 22KΩ。ボード:R8 = 0Ω
-  部品タイプの変更:R9 SMD 68E (68KΩ)
-  ESP32-2432S028 と比較し GAIN の変更。
-  Speaker で聞く分には大差ないです。
-  回路図:ESP32-3248S035-LCM-V1.1.jpg
-  回路図:ESP32-2432S028-LCM.jpg


- JP0, JP3 端子
-  配線図:0Ω。ボード:Open
-  JP0:LDO=AMS1117, 3.3V-TFT:3.3Vdc 4mVac
-  JP3:LDO=AMS1117, 3.3V-ESP:3.3Vdc 3mVac
.

5. P1, P3, CN1, P4 Extender Connector Cable:

No. Nomen Purchase Price
1 P,P3,CN1 Extender
. Cable Connector
. HC-1.25-4PWT
EFEF Store
. JST1.25, 10cm, Single head, 4P
. 価格:20個283円
15円
2 P4 Extender
. Cable Connector
. JST_1.25_2P
EFEF Store
. JST1.25, 10cm, Single head, 2P
. 価格:10個99円。
10円

.
6. INPUT ONLY GPIO:入力専用GPIOの把握。
- GPIO_36 (RTP_IRQ), GPIO_39 , GPIO_34 (cds), GPIO_35 (P3) は
- INPUT ONLYです。使用時や回路変更時に注意してください。
.
.
7. 共有(Commn) GPIO 21:使用時の注意。
- GPIO_21 は P3 , CN1 , CTP_INT と共有です。
.
- Capacitive Touch CTP_INTは R25(0Ω)経由で基板上にパターンがあります。
- R25(0Ω)は 未装着でOpen になっています。

.
8. LCD GPIO_12 (TFT SDO ) R24 (0Ω)は 未装着。
- ESP32 GPIO_12 は 起動モード設定に使用される為
- Low にする必要があります。
.
.
.
.
9. 電源:3.3Vは 2系統の電源になっています。
- USB 5VdcからD1 Diodeを経由し LDO AMS1117で3.3Vdc。
- D1 1N5819W Diode の出力は 4.6Vdc 17mvacです。
- 3.3V は 2つのLDOにより 3.3V-ESP と 3.3V-TFT が作られます。
.
.
10. P1 Power Supply Base Connector:使用時の注意。
- USB接続時 VIN には Q1 FET から 4.6V 17mvacが出ています。
- Q1 FET Gate が GNDの為 Q1 は ON です。
- 使用時に検討ください。
- Diode D1 1N5819W pdf:Vf = 0.32V(0,1A), Vf = 0.45V(1.0A), - 5.0-0.45=4.6V
.
.
11. P4 SPEAK と Speaker:スピーカー接続方法。
- P4 コネクターへ 外部スピーカを接続できます。
- ダイソーの330円スピーカーに接続でき充分聞ける音です。
- スピーカーの径が大きいと音質が向上します。
- スピーカー単体の接続は 追加抵抗値が 100Ω程度必要です。
- 直接 4Ω や 8Ω の Speakerを接続しますと電流が流れすぎ
- 3.3V電源が低下し ESP32が停止します。
- 例;8Ω 2W 40x5mm Speaker に 100Ω を直列に接続します。(画像:左)

.
12. ESP32 EN 時定数:
- R1(10KΩ) と C4(0.1μ) で 時定数 τ(タウ) は 47μsec です。
- 47μsecは ESP32 の起動には 仕様を満たした安全な値です。
.
13. ESP32 Revision:Revision 3 です。
- Serial port /dev/cu.wchusbserial14240
- Detecting chip type… ESP32
- Chip is ESP32-D0WD-V3 (revision 3)
- Revision 1 は 不具合versionですので, 3 で良かったです。
.
14. 速度:
- 3248S035は SPI接続で Parallel 8/16bit との差が解ります。
- 同じ 320×480 の中で 最高速の中に入っています。
- 部品の選択が大きな要素です。
- LovyanGFX使用により高速表示が実現します。
- ILI9486 や M5Stamp C3 は遅いです。
.
.
.
15. R21:GT36516 Photoresistor:Cdsの動作範囲。
- 以下の特性ですので 動作範囲を把握して使用します。
- R21 Cds は GPIO_34 (Input)へ接続されています。
- テスターで対GND電圧と抵抗値測定。
- 暗くする :150mVdc , 抵抗値=25KΩ
- 明るくする;部屋の蛍光灯:20mVdc , 抵抗値=5.5KΩ。窓の光:16mVdc
- プログラム:
- analogSetAttenuation(ADC_0db); // 0dB(1.0倍) 0~800mV
- pinMode(34, ANALOG);
- 計測:Serial.printf(“%d[mV]\n”, analogReadMilliVolts(34) );
- 計測結果;部屋を暗くする:230mVdc.。明るくする;75mVdc
- 指で遮蔽した程度では 変化は少なく 明暗の差が必要です。
.
.
16. LCD Library:
- LovyanGFX を使用し 設定は以降に示します。
- LovyanGFXは 高速である事と FONTが多数用意されている事や
- 漢字が容易に使用できます。
.
17. 速度とタッチセンス
- 速いMPUやLGFXは 表示速度が速くチラツキなく見やすくなります。
- Tetris の Loop は 25msecで表示を繰り返しています。
- ブロックが落下する速度は 25msec が見やすい速度の為です。
- 遅いM5Stackでは 安易に Loop に 25msec delay を入れていました。
- 速度が速くなると delay方式は タッチセンスしない為 使用できません。
- delayを使用しない方法でのプログラムが必要になります。
.
18. PCBは カードサイズ:ケースの製作方法。
- カードサイズの為 市販のカードケースや化粧ケースが使用可能です。
- 加工は伴いますが 3Dプリンターは不要で 綺麗に仕上がります。

無印良品:メイクパレット・S
111x71x15mm ( 990円 )。
位置を決めて 穴を開けます。
USBの位置は 右か左側に決めます。
USBコネクターの位置を十分検討。
養生テープを取り付け
穴を開け アセトンを流し込むと
鏡の両面テープ(4x8mm)が取れます。
カッターやヤスリで窓を開けます。

.

ケースの高さに合う
ナイロンネジ(M3 5-8mm)を取り付けます。
P4 SPEAK Connector : JST_1.25_2P と
販売店:EFEF store:価格:10個99円。
8Ω 2W 40x5mm Speaker + 100Ω を取り付けます。
ーーーーーーーーーーーーーーーーーーーー
P1, P4, CN1 Connector:HC-1.25-4PWT
販売店:EFEF store:価格:20個283円。

.

隙間がないように仕上げます。
ステレオミニジャックを取り付けて
ダイソースピーカに接続も出来ます。
表示具合です。
右の配線は 黒テープ等で処理。
光造形3Dプリンタより綺麗です。

.


.
19. U4 SPI 接続:設計ミス。追記:rev 2. 2022.09.22
- U2 ESP32 内蔵 4MB Flash と U4 外部 Flash 4MB 8pin W25Q32JV の配線は
- VCC を除き全て(CS,DI, DO, WP,CLK, HOLD,GND)共通です。CSもです。
- マルチサブモードやマルチスレーブには なっていません。
現象:UP LOAD不可。🔴 Flashが壊れます。
原因:U2内部FlashとU4外部FlashのCS共通によりFlashが重複。
対策:🟢 U4 Flash を取り除きます。CSを外すだけでも良いでしょう。



PDF:画像が見え難い場合は PDF を参照ください。S028_S035_SPI_480s
.
🟠 2個並列に書き込んだFlashは どうなるか?
- U2内部FlashとU4外部Flashが 正しく書き込まれている場合と
- 書き込まれていない場合の4通りができます。
- U4外部Flashを外すと
- 1. U2内部Flashが正しく書き込まれていると 以前のスケッチがそのまま動きます。
- 2. U2内部Flashが正しく書き込まれていないと 動作せず表示しません。
🔵 これは この並列接続は 間違っている事を示しています。

- 正しく書き込まれていないFlashを混ざて動かすと奇妙な現象が発生します。
- Arduino IDEで書き込み回数が(50〜200回とか)多くなると顕著に発生します。
- 例として GPIO_27使用不可,タッチ操作不可,書き込み不安定,書き込不可,MD5エラー,
- U2内部Flash破損(esptoolでeraseしても不可)(最悪),等々が発生しました。
- esptool.py での erase は esptool.py erase_flash でなく以下が良いです。
- ただし この基板は これだけの問題でなく CH340C の問題があります。

実施前 以下で確認。
esptool.py chip_id
esptool.py flash_id
erase 実施。
esptool.py erase_region 0x10000 0x1000
実施後 以下で確認。
esptool.py chip_id
esptool.py flash_id


🟢 MD5エラーは 書き込み回数の多い M5Stackでも発生する現象です。
- 対策は esptool.pyで Flashをeraseすると治ります。
- S028,S035の場合 取り外し後に U2内部Flashが正しく書き込まれていないと
- 2,3回 MD5エラーで書き込みができなくなりますが その後は書き込みが
- 出来る様になります。
- Espressif SystemsのSPI Flashを読むと 私には 極めて難しい事が書かれており
- 奥義もある様で自分の判断が正しいのか疑問に包まれます。
- eraseで 治った様に見えましたが その後も 再び MD5 error が発生。
- 対策は Auto Program で無く Manualで書き込んでいます。
_  Manual program :
_  USB Re-Connect , Boot + Reset Switch, Reset Open, Boot Open です。
_ 経験的ですが CH340C はこの現象が多いです。
.
基板不具合: rev 1. 2022.09.18
タッチ操作の不完全とUP LOAD の2つの不具合に時間を要しました。
最初は時々 発生。その後 かなりの歩度で不具合発生。
投稿後にも不具合が再発し不具合部品の交換を実施。
1. 不具合:Touch IC U3 XPT2046 x,y 入力は良いが pin-11 IRQ Output 無し。
- 原因:XPT2046 IRQ Output Pin-11 の不良。
- 処置:U3 XPT2046 を交換し IRQ OUTPUT は正常になる。
- メモ:U3 Pin-9,10 は GND です。2つあることは重要で 不十分な GNDは
-    HI=3.3V が 2.5V とかになり “1” であるはずの Logicが “0” になります。
2. 不具合:USB接続切れが発生する。書き込み時にエラーメッセージ発生し書き込めない。
- 「 A fatal error occurred: Serial data stream stopped: Possible serial noise or corruption.」
- 「 A fatal error occurred: MD5 of file does not match data in flash!』も発生する。
- 原因:U2 ESP32内のFlash 4MB。
- 処置:Flash 4MBを16MBに交換し書き込みは正常になる。
- メモ:esptool で 内蔵 Flash Memory を消去し 治った様に見えましたが治らず。
_    esptool.py erase_region 0x1000 0x8000
_    memoryの不具合は タッチ操作が不安定にもなりました。
_    CPU Frequency : “240MHz (WiFi/BT)” : LGFX cfg.pin_int = -1; と
_    CPU Frequency : “160MHz (WiFi/BT)” : LGFX cfg.pin_int = 36; なら動作する
_    と言う 摩訶不思議な現象が発生しました。
2. CH340C: Arduino IDE Upload Speed は
- Mac で “460800” 。 Win で “921600” です。
- それぞれの OSで過去の速度は遅く 時と共に改善されました。
- Mac で “921600” にしますと MD5 error が多発します。
その後、モニターしていますが 再び MD5 error が発生。
対策は Auto Program で無く Manualで書き込んでいます。
_ USB Re-Connect , Boot + Reset Switch, Reset Open, Boot Open です。
.


.
LIbrary Lovyan GFX 使用により多くの事が容易にできます。

Lovyan GFX 設定:
_ Display:ST7789 SPI:SPI2_HOST , SPI3_HOST 又は HSPI_HOST
_ cfg.freq_write : Max 40000000 ( 40MHz )
_ Touch:XPT2046 SPI:SPI2_HOST , SPI3_HOST 又は HSPI_HOST
_ Touch:cfg.pin_int = 36; Touchが動作しない場合は -1 にします。

_ Arduio IDE :
_ tft.setRotation(1); // USB Right
_ tft.setRotation(3); // USB Left

//----------------------------------------------------------------------
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
class LGFX : public lgfx::LGFX_Device{
  lgfx::Panel_ST7796  _panel_instance;
  lgfx::Bus_SPI       _bus_instance;
  lgfx::Light_PWM     _light_instance;
  lgfx::Touch_XPT2046 _touch_instance;
//----------------------------------------------------------------------  
public:LGFX(void){{            // バス制御の設定を行います。
  auto cfg = _bus_instance.config();// バス設定用の構造体を取得します。
                               // SPIバスの設定
  cfg.spi_host   = SPI2_HOST;  // 使用するSPIを選択 (VSPI_HOST or HSPI_HOST)
  cfg.spi_mode   = 0;          // SPI通信モードを設定 (0 ~ 3)
  cfg.freq_write = 40000000;   // 送信時のSPIクロック(最大80MHz,80MHzを整数割値に丸め)
  cfg.freq_read  = 16000000;   // 受信時のSPIクロック
  cfg.spi_3wire  = false;      // 受信をMOSIピンで行う場合はtrueを設定
  cfg.use_lock   = true;       // トランザクションロックを使用する場合はtrueを設定
  cfg.dma_channel=  1;         // 使用DMAチャンネル設定(1or2,0=disable)(0=DMA不使用)
  cfg.pin_sclk   = 14;         // SPIのSCLKピン番号を設定 SCK
  cfg.pin_mosi   = 13;         // SPIのMOSIピン番号を設定 SDI
  cfg.pin_miso   = 12;         // SPIのMISOピン番号を設定 (-1 = disable) SDO
  cfg.pin_dc     =  2;         // SPIのD/C ピン番号を設定 (-1 = disable) RS
  // SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。
  _bus_instance.config(cfg);   // 設定値をバスに反映します。
  _panel_instance.setBus(&_bus_instance);// バスをパネルにセットします。
  }
  {                            // 表示パネル制御の設定を行います。
  auto cfg = _panel_instance.config();// 表示パネル設定用の構造体を取得します。
  cfg.pin_cs          =    15; // CS  が接続されているピン番号(-1 = disable)
  cfg.pin_rst         =    -1; // RST が接続されているピン番号(-1 = disable)
  cfg.pin_busy        =    -1; // BUSYが接続されているピン番号(-1 = disable)
  cfg.memory_width    =   320; // ドライバICがサポートしている最大の幅
  cfg.memory_height   =   480; // ドライバICがサポートしている最大の高さ
  cfg.panel_width     =   320; // 実際に表示可能な幅
  cfg.panel_height    =   480; // 実際に表示可能な高さ
  cfg.offset_x        =     0; // パネルのX方向オフセット量
  cfg.offset_y        =     0; // パネルのY方向オフセット量
  cfg.offset_rotation =     0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
  cfg.dummy_read_pixel=     8; // ピクセル読出し前のダミーリードのビット数
  cfg.dummy_read_bits =     1; // ピクセル外のデータ読出し前のダミーリードのビット数
  cfg.readable        = false; // データ読出しが可能な場合 trueに設定
  cfg.invert          = false; // パネルの明暗が反転場合 trueに設定
  cfg.rgb_order       = false; // パネルの赤と青が入れ替わる場合 trueに設定 ok
  cfg.dlen_16bit      = false; // データ長16bit単位で送信するパネル trueに設定
  cfg.bus_shared      = false; // SDカードとバスを共有 trueに設定
  _panel_instance.config(cfg);
  }
  { // バックライト制御の設定を行います。(必要なければ削除)
  auto cfg = _light_instance.config();// バックライト設定用の構造体を取得します。
  cfg.pin_bl = 27;             // バックライトが接続されているピン番号 BL
  cfg.invert = false;          // バックライトの輝度を反転させる場合 true
  cfg.freq   = 44100;          // バックライトのPWM周波数
  cfg.pwm_channel = 7;         // 使用するPWMのチャンネル番号
  _light_instance.config(cfg);
  _panel_instance.setLight(&_light_instance);//バックライトをパネルにセットします。
  }
  { // タッチスクリーン制御の設定を行います。(必要なければ削除)
  auto cfg = _touch_instance.config();
  cfg.x_min      = 360;    // タッチスクリーンから得られる最小のX値(生の値)
  cfg.x_max      = 4200;   // タッチスクリーンから得られる最大のX値(生の値)
  cfg.y_min      = 180;    // タッチスクリーンから得られる最小のY値(生の値)
  cfg.y_max      = 3900;   // タッチスクリーンから得られる最大のY値(生の値)
  cfg.pin_int    = -1;     // INTが接続されているピン番号, TP IRQ 36
  cfg.bus_shared = true;   // 画面と共通のバスを使用している場合 trueを設定
  cfg.offset_rotation = 3; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定
  // SPI接続の場合
  cfg.spi_host = SPI2_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
  cfg.freq = 1000000;      // SPIクロックを設定, Max 2.5MHz, 8bit(7bit) mode
  cfg.pin_sclk = 14;       // SCLKが接続されているピン番号, TP CLK
  cfg.pin_mosi = 13;       // MOSIが接続されているピン番号, TP DIN
  cfg.pin_miso = 12;       // MISOが接続されているピン番号, TP DOUT
  cfg.pin_cs   = 33;       // CS  が接続されているピン番号, TP CS
  _touch_instance.config(cfg);
  _panel_instance.setTouch(&_touch_instance);  // タッチスクリーンをパネルにセットします。
  }
  setPanel(&_panel_instance);// 使用するパネルをセットします。
  }
};
LGFX tft; // 準備したクラスのインスタンスを作成します。

//=====================================================================

 


.
感想:
価格:この構成で 2314円 は 超低価格です。
- 部品単価を踏まえ低価格に工夫されています。
- 個別の部品を計算すると 作るより購入した方が安いです。
- M5Stack 1台分の価格 6125円で 2台半も購入できます。
- 低価格は 気楽に電子工作ができます。

基板:インターフェースを追加すると良く出来ている事が解ります。
- GPIOやコネクター配線の変更が容易で 自由に改造できる様になっています。
- Schematicやレイアウトを見ると良く考察された基板です。
- 数ある ESP32ボードの中で 唯一 外部 Flash memory があり活用できます。

内部 Flash と 外部 Flash Memory:
- 初めて見る U4 外部 Flash Memoryが基板上で見れます。
- 購入時 U4 Flash は ESP32 Flash の外付けかと勘違いしていました。
- esptool.py flash_id では 4MB を表示。
- U4 Flash を外しても 購入時の LVGL DEMO は 動作しています。
- つまり ESP32 は 内部 Flash 4MB です。
- 確認の為に 販売店(開発者)に お聞きした所 ESP32 は 内部4MB,
- U4 は拡張用の4MBとの事。でした。

設計ミスの件:FLASH並列接続。
- 店(設計者)に 連絡したところ 「問題ない」との返事。
- 対し 私のボードはFlashが壊れ書き込めない事実。
- 仕様書や電気的にあり得ないSPI接続ですが それには答えずでした。
- FLASHは 並列接続と答え 使用方法は経験が無いとの返事。
- 尚、S045の販売数は さほどにはなっていません。

CH340C:UP- LOAD できない。CH340Cは 採用しないで下さい。
- M5Stack や TTGO は CH340Cは 採用していません。
- CP2102, CP2104, 最近では CH9102を採用しています。
- これは CH340G, CH340C の問題がある事を示しています。
- Arduino IDEで Auto Progできず、Manual ならできる。
- 原因追及していますが確実な所が不明です。
- Mac を使用していますが Mac と Win では Driver が異なります。
- 予想としては 昔からある CH340C の Hard に加え Driverの未完成です。
- CH340CをCP2102 に交換すれば 判明するでしょう。
- この件は 課題とします。

Touch:以下の場合があります。
- CPU Frequency : “240MHz (WiFi/BT)” と LGFX cfg.pin_int = -1; で動作。
- LGFX cfg.pin_int = 36; では 動作しない場合があります。

ポイント:
- 基本的な構成を備えながら 最も重要なポイントは 価格です 。
- ESP32-3248S035 や ESP32-24328S028 は 製品の中で
- コストメリットは 1番で これに対抗できるボードは 無いでしょう。
- これまで多くの基板を試してきましたが 作るよりも安いです。
- 作る時間をプログラム開発に活用できます。
- 2020年7月に販売された ESP32-24328S028R
- 2022.09.16 に 730 Ordesr を達成しています。祝!
- M5Stackより 遥かに安い。
- 販売数の要因は 1に低価格で 2に基本的な構成の基板であるからと判断しています。

- openHASP:
- 海外では 購入して直ぐ openHASP を使用している人がいます。
- 

購入トラブル:ESP32-3248S035C を注文しましたが届きません。
- 原因は 私のミスで届かない内に受領のボタンを押してしまいました。
- 店に連絡しましたが 送らないとの返事。サービスはとても悪いです。
- ESP32-3248S035C には GT911の問題点があると思い注文しましたが
- 手に入らずになりました。
- 連続して購入する気は無くなりました。
.
.
.
.
.


.
ESP32-3248S035R , ESP32-3248S035C , ESP32 , 4MB , ST7789 ,
XPT2046 , GT911

Written by macsbug

10月 2, 2022 at 3:35 am

カテゴリー: ESP32

Web Radio ESP32-2432S028-I2S

with 2 comments

ESP32-2432S028 と I2S DACで Web Radio   ORG : 2022.08.20
.                        rev 1 : 2022.09.12
.                        rev 2 : 2022.09.22

1800円のESP32-2432S028ボードと
380円 MAX98357A I2S DAC 3W D級アンプで高音質が可能です。
330円 ダイソー・スピーカーでコスパが似合います。
ヘッドホンでは 低音の響きが伝わります。

無印良品のアルミカードケースは 手に収まる心地よいサイズです。
ケースはアルミですが WiFiは 接続しています。


.
ケースは無印のメイクパレット S (111x71x15mm) 990円を使用しました。

.


.
仕様:
1. 操作:Volume ± , channel ±10 ±1step , Blightness ± , Invers
2. 表示:Play LED , Reseption LED , Wave , Station Name
3. 受信:局の廃止や受信不可の場合は 次の局を自動選択します。
4. 記憶:使用時のStatonを記憶し次回は そのStationで起動します。
_ Station no を 0(初期値) にするには 起動時に中央をタッチします。


.


.
開発環境:
基礎;ESP32-2432S028 解説。
Hard : ESP32-2432S028 : 2.8″ 320×240 SPI ILI9341 LCD with Touch
-   ブログ:ESP32-2432S028 ボードの解説。
Hard : 🟢 MAX98357A I2S 3W Class D Amplifier Board
–    or PCM5102A I2S DAC Board , UDA1334A I2S DAC Board
Dev environment : Arduino IDE 1.8.19
– Board Manager : arduino-esp32 2.0.3-RC1
– Board : “ESP32 Dev Module”
– Upload Speed : “460800” (Mac), “921600” (Win)
– CPU Frequency : “240MHz (WiFi/BT)”
– Flash Frequency : “80MHz”
– Flash Mode : “DIO”
– Flash Size : “4MB (32Mb)”
– Partition Scheme : “No OTA (2MB APP/2MB SPIFSS)”
– Core Degug Level : “None”
– PSRAM : “Disabled”
– Arduino Runs On : “Core 1”
– Events Run On : “Core 1”
– Pord : “dev/cu.wchusbserial14240”
_ memo : CH340C の為 Upload Speed は Mac と Win では 異なります。
Library : schreibfaul1 / ESP32-audioI2S 2.0.4
https://github.com/schreibfaul1/ESP32-audioI2S
Library : LovyanGFX
.


.
🔴 ボード設計ミスについて:追記:2022.09,22
ESP32-2432S028, ESP32-3248S035 ボードは 設計ミスがありますので
以下を参照ください。
現象:UP LOAD不可。🔴 Flashが壊れます。
原因:U2内部FlashとU4外部FlashのCS共通によりFlashが重複。
対策:🟢 U4 Flash を取り除きます。
ESP32-2432S028 rev 2.
ESP32-3248S035 rev 2.
.


.
Down Load:DL後 pdf(_.pdf)を削除しzipを解凍します。
お詫び:ORG版はバグがありましたので以下の修正版を使用ください。
rev 1 : 2022.09.12 : NVMバグの修正、背景色の変更機能を追加。
🟢 Down Load : Web_Radio_ESP32_2432S028R_I2S.zip
– Sketch uses 1349605 bytes です。
– Partition Scheme : ”Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)”
– ですと 102% になりエラーが出ます。
– Partition Scheme : “No OTA (2MB APP/2MB SPIFSS)”
– ですと 66% になりコンパイル可能になります。
– 画面の向き:
– USB が右側:tft.setRotation(3);
– USB が左側:tft.setRotation(1);
.


.
部品リスト:費用:2300円 ( ESP32-2432S028 と I2S Board )

No. Nomen Purchase Price
1 ESP32-2432S028 : 86x50mm
.
Sunton store
. $11.15
. 輸送期間 : 8日
1843円
2 MAX98357A
. I2S 3W D級アンプボード
.
WCMCU store 379円
3 プラスチックナット+連結スペーサー
. 7mm セット
.
秋月電子通商 50円
4 3.5mmステレオミニジャック
. MJ-074N パネル取付用
.
秋月電子通商 80円
5 アルミカードケース 96x60x14mm
.
無印良品 490円
6 メイクパレット・S 111x71x15mm
.
無印良品 990円
7 Wire : 0.26mm ジョンフロン線
8 ダイソー 330円スピーカー
.
330円

.


.
I2S PCM:
_ MAX98357A, UDA1334A , PCM5102A は同じソフトで動作します。
_ ケースに入る事とAudioコネクタの配置が容易なMAX98357Aにしました。
1. MAX98357A  : Web Radio with a built-in speaker in M5Stack, 384円
2. UDA1334A : Web_Radio_of_M5Stack_I2S_DAC, 1009円
3. PCM5102A : Web Radio of M5Stack PCM5102A I2S DAC, 644円
4. VS1053B : Web Radio of M5Stack

.


.
製作:

1. 図面を参考に 5本配線します。
_ LED端子等 細かな部品や端子があり 壊さない様に準備下さい。
_ ハンダ付け前の端子の予備ハンダは重要です。
_ MAX98357A は 絶縁処理をしながら両面テープで固定。


.
2. 取り外しを考え MAX98357A の出力はコネクターを取り付け。
3. 今回は モノラルですのでオーディオコネクタは LR共通にします。
4. 基板の高さを決める六角スペーサーネジは 高さ7mmが丁度良い高さです。
_ オーディオコネクタとスペーサーが接触しますので加工します。
_ スペーサーとケースは 両面テープで固定すると丁度良い高さになります。
5. アルミカードケースに LCDの穴を開けます。USB, AUDIO端子もです。
_ アルミは 面倒ですが 3Dプリンターより楽かもです。
_ 位置決めを しっかり計算しましょう。
_ 適切な道具が無い為に ドリル、ニッパで穴を開け ヤスリで削りました。
.

98357=GPIO : Vin=+5V, GND=GND, DIN=17, BLCK=22, LRC=27

.

ケースの高さ:スペーサー7mmが良い 基板とLCDの穴の位置

.

ケース , PCB , Audioコネクタ スペーサ ネジの出っ張りは切ります

 

左:Micro USB 右:Audio Connector

.
他の例:配線は5本。

PCM5102AをP3,CN1 コネクタと接続
P3-IO22, CN1-3V3,27,NC(GPIO17配線)

.


.
LovyanGFX 設定:
cfg.freq_write = 20000000;  20MHz
40MHzでも動作しますが 全体の速度が速くなり
タッチ操作のタイミング調整が必要になります。
Loopの1回の送度は 25msec です。この 25msecで音がスムーズに出ます。
この周期が長いとタッチのセンスができなくなります。
これは 私の初心者レベルのプログラム技量での範囲です。
さらに良い方法は あるかと思います。

//----------------------------------------------------------------------
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
class LGFX : public lgfx::LGFX_Device{
  lgfx::Panel_ILI9341 _panel_instance;
  lgfx::Bus_SPI       _bus_instance;
  lgfx::Light_PWM     _light_instance;
  lgfx::Touch_XPT2046 _touch_instance;
//----------------------------------------------------------------------  
public:LGFX(void){
  {                            // バス制御の設定を行います。
  auto cfg = _bus_instance.config();// バス設定用の構造体を取得します。
                               // SPIバスの設定
  cfg.spi_host   = SPI2_HOST;  // 使用するSPIを選択 (VSPI_HOST or HSPI_HOST)
  cfg.spi_mode   = 0;          // SPI通信モードを設定 (0 ~ 3)
  cfg.freq_write = 40000000;   // 送信時のSPIクロック(最大80MHz,80MHzを整数割値に丸め)
  cfg.freq_read  = 16000000;   // 受信時のSPIクロック
  cfg.spi_3wire  = false;      // 受信をMOSIピンで行う場合はtrueを設定
  cfg.use_lock   = true;       // トランザクションロックを使用する場合はtrueを設定
  cfg.dma_channel=  1;         // 使用DMAチャンネル設定(1or2,0=disable)(0=DMA不使用)
  cfg.pin_sclk   = 14;         // SPIのSCLKピン番号を設定 SCK
  cfg.pin_mosi   = 13;         // SPIのMOSIピン番号を設定 SDI
  cfg.pin_miso   = 12;         // SPIのMISOピン番号を設定 (-1 = disable) SDO
  cfg.pin_dc     =  2;         // SPIのD/C ピン番号を設定 (-1 = disable) RS
  // SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。
  _bus_instance.config(cfg);   // 設定値をバスに反映します。
  _panel_instance.setBus(&_bus_instance);// バスをパネルにセットします。
  }
  {                            // 表示パネル制御の設定を行います。
  auto cfg = _panel_instance.config();// 表示パネル設定用の構造体を取得します。
  cfg.pin_cs          =    15; // CS  が接続されているピン番号(-1 = disable)
  cfg.pin_rst         =    -1; // RST が接続されているピン番号(-1 = disable)
  cfg.pin_busy        =    -1; // BUSYが接続されているピン番号(-1 = disable)
  cfg.memory_width    =   240; // ドライバICがサポートしている最大の幅
  cfg.memory_height   =   320; // ドライバICがサポートしている最大の高さ
  cfg.panel_width     =   240; // 実際に表示可能な幅
  cfg.panel_height    =   320; // 実際に表示可能な高さ
  cfg.offset_x        =     0; // パネルのX方向オフセット量
  cfg.offset_y        =     0; // パネルのY方向オフセット量
  cfg.offset_rotation =     0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
  cfg.dummy_read_pixel=     8; // ピクセル読出し前のダミーリードのビット数
  cfg.dummy_read_bits =     1; // ピクセル外のデータ読出し前のダミーリードのビット数
  cfg.readable        =  true; // データ読出しが可能な場合 trueに設定
  cfg.invert          = false; // パネルの明暗が反転場合 trueに設定
  cfg.rgb_order       = false; // パネルの赤と青が入れ替わる場合 trueに設定 ok
  cfg.dlen_16bit      = false; // データ長16bit単位で送信するパネル trueに設定
  cfg.bus_shared      = false; // SDカードとバスを共有 trueに設定
  _panel_instance.config(cfg);
  }
  { // バックライト制御の設定を行います。(必要なければ削除)
  auto cfg = _light_instance.config();// バックライト設定用の構造体を取得します。
  cfg.pin_bl = 21;             // バックライトが接続されているピン番号 BL
  cfg.invert = false;          // バックライトの輝度を反転させる場合 true
  cfg.freq   = 44100;          // バックライトのPWM周波数
  cfg.pwm_channel = 7;         // 使用するPWMのチャンネル番号
  _light_instance.config(cfg);
  _panel_instance.setLight(&_light_instance);//バックライトをパネルにセットします。
  }
  { // タッチスクリーン制御の設定を行います。(必要なければ削除)
  auto cfg = _touch_instance.config();
  cfg.x_min      = 300;    // タッチスクリーンから得られる最小のX値(生の値)
  cfg.x_max      = 3900;   // タッチスクリーンから得られる最大のX値(生の値)
  cfg.y_min      = 3700;   // タッチスクリーンから得られる最小のY値(生の値)
  cfg.y_max      = 200;    // タッチスクリーンから得られる最大のY値(生の値)
  cfg.pin_int    = 36;     // INTが接続されているピン番号, TP IRQ 36
  cfg.bus_shared = false;  // 画面と共通のバスを使用している場合 trueを設定
  cfg.offset_rotation = 0; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定
  // SPI接続の場合
  cfg.spi_host = SPI3_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
  cfg.freq = 1000000;      // SPIクロックを設定, Max 2.5MHz, 8bit(7bit) mode
  cfg.pin_sclk = 25;       // SCLKが接続されているピン番号, TP CLK
  cfg.pin_mosi = 32;       // MOSIが接続されているピン番号, TP DIN
  cfg.pin_miso = 39;       // MISOが接続されているピン番号, TP DOUT
  cfg.pin_cs   = 33;       // CS  が接続されているピン番号, TP CS
  _touch_instance.config(cfg);
  _panel_instance.setTouch(&_touch_instance);  // タッチスクリーンをパネルにセットします。
  }
  setPanel(&_panel_instance);// 使用するパネルをセットします。
  }
};
LGFX tft; // 準備したクラスのインスタンスを作成します。

//=====================================================================

.


.
感想:
ESP32-audioI2S Library:
_ audio.connecttohost(URL);
_ 上記の1行で URLに配信先のURLを入れると聞けます。
_ では どの様な URL を入れれば良いのでしょうか?
_ ネットには それらしき URL を入れても聞こえない場所があります。
_ その場合は この Library では 限度があります。
_ 局によっては ID , Passward が必要だったり
_ ブラウザーで Play Button を押す必要があったりです。
_ この辺は 解りませんので 追求できていません。
_ ブラウザーで音楽が聴ける仕組みは 上記を意識せず聴けます。
_ 勉強不足でしょうがブラウザーの仕組みが不思議です。
_ VS1053では HTTP接続時に path, host を指定し接続しています。

_ Text文字による音声発生が可能です。
_ speech は ルーターの あるportが 開かれていないと出ません。

ケース;
ABSケースも良いですが アルミケースの方が 手触りがとても良いです。

P4 SPEAK:Audio Outpt
_ スピーカーを接続して Web Radio を試しましたが 音質が良くないです。
_ スピーカー端子を使用できないのは残念ですが断念しました。

消費電流;
_ USB5V 220mA です。

ステレオ:
_ 今回の製作は モノラル出力です。
_ 準備が足りない為で いつか挑戦したいものです。

メモ:とりあえずは動いていますが まだ未完成な所もあります。
- 局のURLは 何が正しいかとかが良くわかりません。
- 局の閉鎖やネットの都合で受信できない時の処理は 次の局を自動選択。
- それ以外の受信不具合もあり 判断や処理が自分のスキルでは難しいです。
- URLが適切でないと I2S Over Flow で再起動する場合もあります。
.
.
.


.
.
Web Radio , ESP32-2432S028 , MAX98357A , PCM5102A , UDA1334A , LovyanGFX ,
ESP32-audioI2S ,

Written by macsbug

8月 20, 2022 at 7:00 pm

カテゴリー: ESP32

ESP32-2432S028

with 4 comments

ESP32-2432S028 motherboard            ORG 2022.08.17
.                          rev 1. 2022.09.13
.                          rev 2. 2022.09.22

2.8″ 240×320 SPI ILI9341V with Touch Panel XPT2046
価格:🟢 1480円 送料込 ($12.41)。輸送期間:8日。
超低価格で必要な物が1つの基板でできています。
販売店:Sunton Store (購入時 116 Order 投稿時 471 Order)
輸送期間;8日で Aliexpressの中では早い方でした。
サイズ:86x50mm。カードと同じサイズです。



.
構成:
1. ESP32 with TELEC(211-161007) : 内部 4MB(32Bit) Flash
2. 外部 4MB(32Mbit) Flash memory, winbond 25Q32JVSlQ
_  rev 1. : 2022.09.13:U3 4MB, U4 4MB。Parallel SPIになっています。
3. LCD ( ILI9341V ) with Touch ( U3 : XPT2046 抵抗膜方式)
4. Expanded IO x 2
_  P3 ( GND, GPIO_35, GPIO_22, GPIO_21)
_  CN1 ( GND, NC, GPIO_27, 3V3)
5. SD SLOT ( Micro SD )
6. RGB LED ( MHP5050RGBDT )
_  BLUE : GPIO_16, RED : GPIO_4, GREEN : GPIO_17
7. CDS ( GT36516 ) : GPIO_34
8. EXT Power Conn : P1 ( VIN, TX, RX, GND )
9. Audio OUT(Audio amp SC8002B) : P4 SPEAK(2=VO2,1=VO1)
10. P1:Power Supply Base Conector
11. 付属:Touch pen, 4pin External connector cable, USB Cable。
資料:
購売店にESP32-2432S028Rのdownload linkがあります。重要です。
- 2.8inch_ESP32-2432S028R 625MB のDLは 出来ないやPasword要求を聞きます。
- これはブラウザーやパソコンのOSによって異なる様です。
- 私の環境 MacBooK Pro Catalina 10.15.17, ブラウザー
- Firefox, Google Chome では 何事もなくDL出来ています。
– LVGLのデモがインストールされています。(販売店に動画あり)
– Display Libraryは LovyanGFX (ILI9341 SPI2_HOST)で動作しています。
– M5Stack(2.0inch)と同じ240×320で 2.8inchは とても見やすい大きさです。


.
開発環境 :
_ HARD : EESP32_2432S028
_  Display : 2.8″ 240×320 SPI ILI9341V LCD Touch XPT2046
_ Dev environment : Arduino IDE 1.8.19
_  Board Manager : arduino-esp32 2.0.3-RC1
_  Board : “ESP32 Dev Module”
_  Upload Speed : “460800” (Mac), “921600” (Win)
_  CPU Frequency : “240MHz (WiFi/BT)”
_  Flash Frequency : “80MHz”
_  Flash Mode : “QIO” or “DIO”
_  Flash Size : “4MB (32Mb)”
_  Partition Scheme : “Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)”
_  Core Degug Level : “Verbose”
_  PSRAM : “Disabled”
_  Arduino Runs On : “Core 1”
_  Events Run On : “Core 1”
_  Pord : “dev/cu.wchusbserial14240”
_ Library : LovyanGFX
_ memo :
_ CH340C の為 Upload Speed は Mac と Win では 異なります。
_ LovyanGFX Touch cfg.pin_int = 36; Touchが動作しない場合は -1 にします。
.


.
🔴 追記:SPI接続 設計ミス:2022.09.22
ESP32-2432S028 , ESP32-3248S035 の U4 外部 Flash memory 4MB について。
U2 ESP32-WROOM-32 は 4MB Flash 内蔵です。そして外部Memoryとして
U4 4MB Flash Memory 8Pin W25Q32JV があります。
FLASHは SPI接続で VCC以外のPinは全て(CS,DI, DO, WP,CLK, HOLD,GND)共通。
マルチサブモードやマルチスレーブにはなっていません。
よって U4のCS並列接続は設計ミスと判断しています。
不具合事例:Arduino IDEでUP LOAD(書き込み)時にエラーが発生し書き込み不可。
_    Flashの破損。他、不可解な現象が発生します。
現象:UP LOAD不可。🔴 Flashが壊れます。
原因:U2内部FlashとU4外部FlashのCS,DI,DO共通によりFlashが重複。
対策:🟢 U4 Flash を取り除きます。 詳細は 解説の 16 をお読みください。
.


.
Down Load:DL後 pdf(_.pdf)を削除しzipを解凍します。
🟢 Down Load : Tetris_ESP32_2432S028.zip
🟢 Down Load : uncannyEyes_ESP32_2432S028.zip
🟢 Down Load : Raytrace_ESP32_2432S028.zip
🟢 Down Load : Maze_generator_ESP32_2432S028.zip
🟢 Down Load : Life_Game_ESP32_2432S028.zip
🟢 Down Load : 3D_Cube_ESP32_2432S028.zip
🟢 Down Load : Test_PDQ_ESP32_2432S028.zip
🟢 Down Load : LVGL802_demo_ESP32_2432S028.zip
🟢 Down Load : MovingCircles_ESP32_2432S028.zip
- MovingCircles : obj_count 200 =22 FPS, 100=22 FPS, 50=22 FPS
memo : Flash Mode : “DIO”
ケースは無印のメイクパレット S(111x71x15mm) 990円を使用しました。


.
部品レイアウト:配置、信号、ピンは色分けしてあります。

以下のPDF図面は 拡大表示が可能と文字検索が可能です。
配線や設計、改造時に便利です。
🟢 ESP32_2432S028_PCB


.
GPIO Pin Assign:部品とGPIOの表です。
ESP32全てのGPIOを使用し GPIO_21*は 共有になっています。
Touch x,y の値は Calibration しなくとも以下の値で使用できます。

Cds R21
GPIO 34
Audio AMP U5
GPIO 26
LED1 GREEN RED BLUE
GPIO 16 4 17
U4 Flash HOLD WP CS CLK DO DI
GPIO SD2 SD3 CMD CLK SD0 SD1
GPIO 9 10 11 6 7 8
Touch x_min x_max y_min y_max
LGFX 300 3900 200 3700
Touch SPI INT(IRQ) SCLK MOSI MISO CS
GPIO 36 25 32 39 33
LCD SPI DC(RS) SCLK MOSI MISO CS RST LED
GPIO 2 14 13 12 15 EN(-1) 21*
SD DATA2 CLK
(CLX)
MOSI
(CMD)
MISO
(DAT0)
CS(CD) VSS VDD
GPIO 3V3 18 23 19 5 GND 3V3

.
Connector:

P3 GND IO35 IO22 IO21*
CN1 GND NC IO27 3V3
P1 VIN TX RX GND
P4 VO1 VO2

 


.
解説:

1. ESP32 : 内部 4MB(32Bit) Flash
- esptool.py flash_id の表示。

Detecting chip type... ESP32
Chip is ESP32-D0WD-V3 (revision 3)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 40:22:d8:57:f1:fc
Uploading stub...
Running stub...
Stub running...
Manufacturer: ef
Device: 4016
Detected flash size: 4MB

.
2. U4 External FLASH Memory 4MB(25Q32):
- rev 1. : 2022.09.13:ESP32 U3 は 4MB, U4 は 4MB です。
- 外部 4MB(32Mbit) Flash memory, winbond 25Q32JVSlQ
- 拡張用のFLASH 4MB です。CS=GPIO_11。
- 3V 32M-BIT SERIAL FLASH MEMORY WITH DUAL, QUAD SPI
- External Flash : Start Address 0x3F40_0000 End 0x3FF8_0000
- 4MB (4194303バイト):詳細:ESP32 Technical Reference Manual
_  参考:ESP-WROOM-32の外部フラッシュメモリにアクセスする
.
3. LCD Touch MISO:Arduino IDE の setup に必要な設定。
- Touch MISO に GPIO_39 を使用しています。
- GPIO_39 は  WiFI使用時に Pulseが発生します。(画像:左)
- 対策:以下を記載するとPulseは無くなります。 (画像:右)
- 原因:ESP32チップのバグです。

void setup() {
WiFi.begin();
WiFi.setSleep(false);
WiFi.begin() WiFi.setSleep(false)

.
4. INPUT ONLY GPIO:入力専用GPIOの把握。
- GPIO_36 (TP_IRQ), GPIO_39 (TP_OUT), GPIO_34 (cds),
- GPIO_35 (P3) は INPUT ONLYです。
- 使用時や回路変更時に注意してください。

.
5. 共有(Commn) GPIO 21:使用時の注意。
- GPIO_21 は TFT_LED と P3 Extended IO21 と共有です。

.
6. 販売店 図面誤記:コネクター使用時の注意。
- P4 Connector PH_2.0_2P は誤記で 正しくは PH_1.25_2P です。

.
7. 電源:3.3Vは 2系統の電源になっています。
- USB 5VdcからD1 Diodeを経由し LDO AMS1117で3.3Vdcになります。
- D1 1N5819W Diode の出力は 4.6Vdc です。
- 3.3V は 2つのLDOにより 3.3V-ESP と 3.3V-TFT が作られます。

.
8. P1 Power Supply Base Connector:使用時の注意。
- USB接続時 VIN には Q1 FET から 4.6V 出ています。
- Q1 FET Gate が GNDの為 Q1 は ON です。
- 使用時に検討ください。
- Diode D1 1N5819W pdf:Vf = 0.32V(0,1A), Vf = 0.45V(1.0A), 5.0-0.45=4.6V

.
9. P4 SPEAK と Speaker:スピーカー接続方法。
- P4 コネクターへ 外部スピーカを接続できます。
- 接続は 外部の抵抗値が 100Ω程度必要です。
- 直接 4Ω や 8Ω 40,50mmの Speakerを接続しますと電流が流れすぎ
-  3.3V電源が低下し ESP32が停止します。
- 例;8Ω 2W 40mm Speaker に 100Ω を直列に接続します。(画像:左)
- ダイソー 330円スピーカを接続でき M5Stackより遥かに音は良いです。

.
10. PCBは カードサイズ:ケースの製作方法。
- カードサイズの為 市販のカードケースや名刺ケース、
- カードサイズの化粧ケースが使用可能です。
- 加工は伴いますが 3Dプリンターは不要で 綺麗に仕上がります。

.
11. ESP32 EN 時定数:
- R1(10KΩ) と C4(0.1μ) で 時定数 τ(タウ) は 47μsec です。
- 47μsecは ESP32 の起動には 仕様を満たした安全な値です。
- 参考:
-  ESP32 Dev Kitの あるverは 1nF+470Ω。 τ=0.22μsec で仕様外。
-  設計者は Rの値を勘違いと想像します。不具合が多発しています。
-  抵抗が低すぎます。Rは 10KΩ, Cは 10nF。τ=4.7μsec程度でしょう。
-  起動しない為 τ を計算せず 大きな C を接続する方法は間違いです。
-  M5Stackは 1nF+12KΩ, τ=0.564μsec で少なく不具合が起きやすい。

.
12. ESP32 Revision:Revision 3 です。
- Serial port /dev/cu.wchusbserial14240
- Detecting chip type… ESP32
- Chip is ESP32-D0WD-V3 (revision 3)
- Revision 1 は 不具合versionですので, 3 で良かったです。
.
13. 速度:
- 同じLCD解像度の M5Stack と比較すると1.5倍速いです。
- 高速化した M5Unified も従来のM5Stackよりも同等に速いです。
- LovyanGFXの SPI Clockは cfg.freq_write=40MHz です。
-  それ以上の50MHzとかは 40MHzに丸められます。
- 配線のレイアウトや部品配置が効いていると判断しています。
- Library LovyanGFXの効果は大きいです。
- 更なる高速化:
-  費用はかかるでしょうが LCDをParallel 16bit, MCUは ESP32 S3
-  で最短配線と電源強化すると最高速が得られるでしょう。


.
14. R21:GT36516 Photoresistor:Cdsの動作範囲。
- 以下の特性ですので 動作範囲を把握して使用します。
- R21 Cds は GPIO_34 (Input)へ接続されています。
- テスターで対GND電圧と抵抗値測定。
- 暗くする :150mVdc , 抵抗値=25KΩ
- 明るくする;部屋の蛍光灯:20mVdc , 抵抗値=5.5KΩ。窓の光:16mVdc
- プログラム:
- analogSetAttenuation(ADC_0db); // 0dB(1.0倍) 0~800mV
- pinMode(34, ANALOG);
- 計測:Serial.printf(“%d[mV]\n”, analogReadMilliVolts(34) );
- 計測結果;部屋を暗くする:230mVdc.。明るくする;75mVdc
- 指で遮蔽した程度では 変化は少なく 明暗の差が必要です。

.
15. LCD Library:
- LovyanGFX を使用し 設定は以降に示します。
- LovyanGFXは 高速である事と FONTが多数用意されている事や
- 漢字が容易に使用できます。
.
16. U4 SPI 接続:🔴 設計ミス。追記:rev 2. 2022.09.22
- U2 ESP32 内蔵 4MB Flash と U4 外部 Flash 4MB 8pin W25Q32JV の配線は
- VCC を除き全て(CS,DI, DO, WP,CLK, HOLD,GND)共通です。CSもです。
-  判断の根拠は SPIの基本を学ぶ を参照ください。
-  CS共通なら DI,DO信号は直列接続にする必要があります。
-  DI,DO信号が共通なら CS信号は 別にする必要があります。
-  回路図 及び 実際の波線は 上記の基本の様になっていません。
-  設定者が何の為に 完全な並列にしているか根拠が不明です。
-  設定者に2回 お聞きしても問題ないとの返事で 根拠は述べていませんでした。
- 不具合:USB接続切れ発生。書き込み時にエラーメッセージ発生し書き込み不可。
- 「 A fatal error occurred: Serial data stream stopped: Possible serial noise or corruption.」
- 「 A fatal error occurred: MD5 of file does not match data in flash!』も発生。
- 原因:U4 Flash CSの重複。U2 ESP32 内部4MB Flashの不良。
- 処置:🟢 U4 Flash 4MBを散り外します。図面を参照ください。
-    ハンダゴテで片側4つの端子に並列に熱を加えピンセツトで上に持ち上げます。
-    片側が外れましたらもう片側の端子に熱を加え取り除きます。
-    ハンダゴテがない場合 カッター等でピンを切り取り外します。
-    U4は 並列で何の役にも立っていませんので壊れても良いでしょう。
-    この件は 私の判断ですので 各自で責任をお持ちください。
- 処置:それでもダメな場合は ESP32内蔵 4MB Flashを交換します。
-    この場合 修理改造になりますので TELECは無くなります。
- マルチサブモードやマルチスレーブには なっていません。
- 


PDF:画像が見えにくい場合は PDFを参照ください。S028_S035_SPI
.
🟠 2個並列に書き込んだFlashは どうなるか?
- U2内部FlashとU4外部Flashが 正しく書き込まれている場合と
- 書き込まれていない場合の4通りができます。
- U4外部Flashを外すと
- 1. U2内部Flashが正しく書き込まれていると 以前のスケッチがそのまま動きます。
- 2. U2内部Flashが正しく書き込まれていないと 動作せず表示しません。
🔵 これは この並列接続は 間違っている事を示しています。

- 正しく書き込まれていないFlashを混ざて動かすと奇妙な現象が発生します。
- Arduino IDEで書き込み回数が(50〜200回とか)多くなると顕著に発生します。
- 例として GPIO_27使用不可,タッチ操作不可,書き込み不安定,書き込不可,MD5エラー,
- U2内部Flash破損(esptoolでeraseしても不可)(最悪),等々が発生しました。
- esptool.py での erase は esptool.py erase_flash でなく以下が良いです。

実施前 以下で確認。
esptool.py chip_id
esptool.py flash_id
erase 実施。
esptool.py erase_region 0xe000 0xffff
esptool.py erase_region 0x1000 0x5fff
esptool.py erase_region 0x10000 0x83fff
esptool.py erase_region 0x8000 0x8fff
実施後 以下で確認。
esptool.py chip_id
esptool.py flash_id


🟢 MD5エラーは 書き込み回数の多い M5Stackでも発生する事象です。
- 対策は esptool.pyで Flashをeraseすると治ります。
- S028,S035の場合 取り外し後に U2内部Flashが正しく書き込まれていないと
- 2,3回 MD5エラーで書き込みができなくなりますが その後は書き込みが
- 出来る様になります。焦りと安堵を体験します。
- Espressif SystemsのSPI Flashを読むと 私には 極めて難しい事が書かれており
- 奥義もある様で自分の判断が正しいのか疑問に包まれます。
.


.
LIbrary Lovyan GFX 使用により多くの事が容易にできます。

Lovyan GFX 設定:
_ Display:ILI9341 :SPI2 HOST:SPI2_HOST
_ cfg.freq_write : Max 40MHz
_ Touch:XPT2046:SPI3 HOST:VSPI_HOST
_ Touch:cfg.pin_int = 36; Touchが動作しない場合は -1 にします。

//----------------------------------------------------------------------
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
class LGFX : public lgfx::LGFX_Device{
  lgfx::Panel_ILI9341 _panel_instance;
  lgfx::Bus_SPI       _bus_instance;
  lgfx::Light_PWM     _light_instance;
  lgfx::Touch_XPT2046 _touch_instance;
//----------------------------------------------------------------------  
public:LGFX(void){
  {                            // バス制御の設定を行います。
  auto cfg = _bus_instance.config();// バス設定用の構造体を取得します。
                               // SPIバスの設定
  cfg.spi_host   = SPI2_HOST;  // 使用するSPIを選択 (VSPI_HOST or HSPI_HOST)
  cfg.spi_mode   = 0;          // SPI通信モードを設定 (0 ~ 3)
  cfg.freq_write = 40000000;   // 送信時のSPIクロック(最大80MHz,80MHzを整数割値に丸め)
  cfg.freq_read  = 16000000;   // 受信時のSPIクロック
  cfg.spi_3wire  = false;      // 受信をMOSIピンで行う場合はtrueを設定
  cfg.use_lock   = true;       // トランザクションロックを使用する場合はtrueを設定
  cfg.dma_channel=  1;         // 使用DMAチャンネル設定(1or2,0=disable)(0=DMA不使用)
  cfg.pin_sclk   = 14;         // SPIのSCLKピン番号を設定 SCK
  cfg.pin_mosi   = 13;         // SPIのMOSIピン番号を設定 SDI
  cfg.pin_miso   = 12;         // SPIのMISOピン番号を設定 (-1 = disable) SDO
  cfg.pin_dc     =  2;         // SPIのD/C ピン番号を設定 (-1 = disable) RS
  // SDカードと共通のSPIバスを使う場合、MISOは省略せず必ず設定してください。
  _bus_instance.config(cfg);   // 設定値をバスに反映します。
  _panel_instance.setBus(&_bus_instance);// バスをパネルにセットします。
  }
  {                            // 表示パネル制御の設定を行います。
  auto cfg = _panel_instance.config();// 表示パネル設定用の構造体を取得します。
  cfg.pin_cs          =    15; // CS  が接続されているピン番号(-1 = disable)
  cfg.pin_rst         =    -1; // RST が接続されているピン番号(-1 = disable)
  cfg.pin_busy        =    -1; // BUSYが接続されているピン番号(-1 = disable)
  cfg.memory_width    =   240; // ドライバICがサポートしている最大の幅
  cfg.memory_height   =   320; // ドライバICがサポートしている最大の高さ
  cfg.panel_width     =   240; // 実際に表示可能な幅
  cfg.panel_height    =   320; // 実際に表示可能な高さ
  cfg.offset_x        =     0; // パネルのX方向オフセット量
  cfg.offset_y        =     0; // パネルのY方向オフセット量
  cfg.offset_rotation =     0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
  cfg.dummy_read_pixel=     8; // ピクセル読出し前のダミーリードのビット数
  cfg.dummy_read_bits =     1; // ピクセル外のデータ読出し前のダミーリードのビット数
  cfg.readable        =  true; // データ読出しが可能な場合 trueに設定
  cfg.invert          = false; // パネルの明暗が反転場合 trueに設定
  cfg.rgb_order       = false; // パネルの赤と青が入れ替わる場合 trueに設定 ok
  cfg.dlen_16bit      = false; // データ長16bit単位で送信するパネル trueに設定
  cfg.bus_shared      = false; // SDカードとバスを共有 trueに設定
  _panel_instance.config(cfg);
  }
  { // バックライト制御の設定を行います。(必要なければ削除)
  auto cfg = _light_instance.config();// バックライト設定用の構造体を取得します。
  cfg.pin_bl = 21;             // バックライトが接続されているピン番号 BL
  cfg.invert = false;          // バックライトの輝度を反転させる場合 true
  cfg.freq   = 44100;          // バックライトのPWM周波数
  cfg.pwm_channel = 7;         // 使用するPWMのチャンネル番号
  _light_instance.config(cfg);
  _panel_instance.setLight(&_light_instance);//バックライトをパネルにセットします。
  }
  { // タッチスクリーン制御の設定を行います。(必要なければ削除)
  auto cfg = _touch_instance.config();
  cfg.x_min      = 300;    // タッチスクリーンから得られる最小のX値(生の値)
  cfg.x_max      = 3900;   // タッチスクリーンから得られる最大のX値(生の値)
  cfg.y_min      = 200;    // タッチスクリーンから得られる最小のY値(生の値)
  cfg.y_max      = 3700;   // タッチスクリーンから得られる最大のY値(生の値)
  cfg.pin_int    = -1;     // INTが接続されているピン番号, TP IRQ 36
  cfg.bus_shared = false;  // 画面と共通のバスを使用している場合 trueを設定
  cfg.offset_rotation = 6; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定
  // SPI接続の場合
  cfg.spi_host = VSPI_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
  cfg.freq = 1000000;      // SPIクロックを設定
  cfg.pin_sclk = 25;       // SCLKが接続されているピン番号, TP CLK
  cfg.pin_mosi = 32;       // MOSIが接続されているピン番号, TP DIN
  cfg.pin_miso = 39;       // MISOが接続されているピン番号, TP DOUT
  cfg.pin_cs   = 33;       // CS  が接続されているピン番号, TP CS
  _touch_instance.config(cfg);
  _panel_instance.setTouch(&_touch_instance);  // タッチスクリーンをパネルにセットします。
  }
  setPanel(&_panel_instance);// 使用するパネルをセットします。
  }
};
LGFX tft; // 準備したクラスのインスタンスを作成します。
//=====================================================================

 


.
2.8寸TFT-ESP32模块免费送,大家一起来学习
上記は fmzhangpei241氏の bbs です。
この超低価格の基板の設計者は 隣国のfmzhangpei241氏です。
謝辞:fmzhangpei241氏に感謝いたします。
氏の 学ぶ為のサイトからの意気込みは驚くばかりです。
氏は 2022年7月11日 に以下の様に述べています。
「最近2.8インチのESP32モジュールを作りました。
10セットを無料で送る予定です。一緒に議論して学びましょう。
送料はあなたの負担です。
それを必要とするエンジニアにのみ与えられます。
現在、LVGL を実行するためのルーチンと arduino でのいくつかの例があります。」

fmzhangpei241氏のbbsページは 多くの事を学べます。

無料を依頼するわけにもいかず、
私は Aliexpress Sunton Store から 6台購入しました。
これから基板用のプログラムを作る予定です。
既に I2S DAC Boardを使用した Web Radio ESP32-2432S028-I2S を作成しています。


.
感想:
価格:この構成で 1480円 は 超低価格です。
- 最初の購入は 3個で4440円。最近の購入は 3個で4695円で1個1565円です。
- 1個1500円程度です。
- 部品は 古く低価格のものが使用され価格は低価格に工夫されています。
- 個別の部品を計算すると 作るより購入した方が安いです。
- M5Stack 1台分の価格 6125円で 4台も購入できます。
- 低価格は壊れても良い面があり 気楽に電子工作ができます。

基板:インターフェースを追加すると良く出来ている事が解ります。
- GPIOやコネクター配線の変更が容易で 自由に改造できる仕組みになっています。
- 例:8Ω2W 40mm Speaker。
- 例:PCM5102A I2S DACでWEB RADIO。

- BUSの共有が無く GPIOの数が少なくなっています。
- ESP32-3248S035 では LCDとTouchのBUSは共有になっています。

不具合経験:
- 複数台購入の中で 1台 GPIO_27 の出力がでない基板がありました。
- 基板分析や応用例の試作中に起り 原因追及に時間を要しました。
- 購入時にLVGLのサンプルが動作し良品と判断できるのは良いですが
- 他のGPIOが全て良いかの判断は難しいです。
- 販売店にどう連絡したら良いか困っています。
- ESP32 を ESP32-S3 に交換したいのですが ESP32を取り外せず保留。

3.5″版の新商品:ブログ記載中に 3.5″版の新商品が出ました。
- 3.5″ 320*480 SPI ESP32 with Touch です。
- ESP32-3248S035
- 2022.08.16 現在。
- 1832円:2.8″ ESP32-2432S028R:少しずつ高くなってきています。
- 2278円:3.5″ ESP32-3248S035  :上記との差額は 1832円。

販売数予想:
- 投稿時(2022.08.17)の購入者数は 471人。1人3台とすると 1413台と計算。
- 1000台で総売上 148万円となります。
- 2020.09.13 : 717 orders 達成。
.
.
.


.
ESP32-2432S028 , ESP32 , 4MB , 16 MB , ILI9341 , XPT2046 ,

Written by macsbug

8月 17, 2022 at 2:32 pm

カテゴリー: ESP32

3.5″ 16bit LCD and S3 MiniKit

leave a comment »

3.5″ 320×480 16bit Parallel MRB3511 Display と S3 MiniKit     2022.08.03

3.5″ Display と S3 MiniKit を ケース (10x7x2m) に入れました。
16bit Parallel LCD と S3 MiniKit により最高速度を実現しています!



.
速度評価:

1. SPI, 8bit Parallel, 16bit Parallel の TFT graphics Test PDQ 比較。
_ 今回の 16bit MRB3511 LCD + S3 MiniKit (赤矢印)は 最高速度を達成
_ 8bit Parallel MRB3511 + S3 MiniKit (紫矢印)でも速度は速いです。
_ MiniKit Boardは 8bit Parallel でも性能が良いです。
_ SPI 接続との差が解ります。

2. 8bit Parallel, 16bit Parallel の比較。
_ 16bit MRB3511 + S3 MiniKit は 最高速度を達成!
_ 同じ S3の 16bit_480x320_S3_DevkitC (水色) より速いです。
_ 8bit Parallel MRB3511 + S3 MiniKit (紫矢印)でも速度は速いです。
_ 16bit Parallel の中でも差があり注目されます。
_ Display性能やESP32の種類 基板と配線の違いが読み取れます。
_ これらの結果は Library LovyanGFX により実現しています。感謝!


.
構成:
HARD : ESP32 S3 MIniKIT:参照:Make an ESP32 S3 MiniKit

HARD : MRB3511 3.5″ 320×480 8/16bit Parallel ILI9488 Display Touch GT911
_ SKU:MRB3511:3.5″ 320×480 8bit/16bit LCD MODULE with Capacitive Touch
_ Driver IC:ILI9488
_ Resolution:320*480 (Pixel)
_ Module Interface:8Bit or 16Bit parallel interface:
_ Touch IC:GT911:Data Sheet

開発環境:
Arduino IDE 1.8.19
– Board : “ESP32S3 Dev Module”
– Upload Speed : “921600”
– USB Mode : “Hardware CDC and JTAG”
– USB CDC on Boot : “Disabled”
– USB Firmware MSC On Boot: “Disabled”
– USB DFU On Boot : “Disabled”
– Upload Mode : “UART0 / Hardware CDC”
– CPU Frequency : “240MHz (Wifi)”
– Flash Mode : “QIO 120MHz”
– Flash Size : “16MB (128Mb)”
– Partition Scheme : “16M Flash (3MB APP/9MB FATFS)”
– Core Debug Level : “None”
– PSRAM : “OPI PSRAM”
– Arduino Runs On : “Core 1”
– Events Run On : “Core 1”
– Port : “/dev/cu.wchusbserial54320100871”

Board Manager : arduino-esp32 2.0.3-RC1
Library:LovyanGFX


.
Down Load:DL後 pdf(_.pdf)を削除しzipを解凍します。
🟢 Down Load:Tetris_16bitMRB3511_S3Minikit.zip
🟢 Down Load:uncannyEyes_16bit_MRB3511_S3Minikit.zip
🟢 Down Load:Raytrace_16bit_S3MiniKit.zip : 2sec
🟢 Down Load:Life_Game_BitWise_S3MiniKit.zip
🟢 Down Load:LVGL802_demo_16bit_S3MiniKit.zip
🟢 Down Load:Test_PDQ_16bitMRB3511_S3MiniKit.zip
🟢 Down Load:Maze_generator_16bit_S3MiniKit.zip
🟢 Down Load:MovingCircles_16bitMBR3511_S3MiniKit.zip
- MovingCircles : obj_count 200 =180 FPS, 100=210 FPS, 50=216 FPS


.
部品リスト:4040円 ( $31 )

No. Nomen Purchase Price
1 MRB3511 3.5″ 320×480 8/16 bit Display
.
Hong Kong feng tai co
. $20.48 , 輸送期間 20day
2535円
1 MRB3511 3.5″ 320×480 8/16 bit Display EQV Official store
. $18.93 , 輸送期間 –
2603円
1 MRB3511 3.5″ 320×480 8/16 bit Display YAEAK Officiall store
. $20.80 , 輸送期間 –
2603円
1 MRB3511 3.5″ 320×480 8/16 bit Display YTF Tecnology
. $17.82, 輸送期間 11day
2626円
2 ESP32 S3 MIniKIT
.
Make an ESP32 S3 MiniKit 1070円
3 ユニバーサル基板 55x45mm 秋月電子通商. 7x5cm 55円
3 ユニバーサル基板 PU45×54 45x54mm 千石電商 220円
4 ロープロファイルピンソケット
. 低メス 2x20P 8.5mm
.
秋月電子通商 80円
5 ダブルピンソケット 2×13
.
秋月電子通商 2個 160円
6 ロープロファイルピンヘッダ
. 低オス 2x40P 7.7mm
.
秋月電子通商 40円
7 プラスチックナット+連結スペーサー
. 10mm セット
.
秋月電子通商 100円
7 カードケース:6.6cm×2.1cm×10cm
.
ダイソー 110円

. MRB3511(ILI9488)は 少し高いですね。

.


.
製作:Display MRB3511 (ILI9488):
1. MRB3511 16bit 設定:8 or 16bit Parallel を設定します。
_ 16bit は Display裏側にある R16 を 0Ω ( Short ) にします。

2. Touch Reset:MRB3511 CRST は GT911のResetピンを制御します。
_ 確実なリセット:CRST(Reset)へ -Pulseを与えます。
_ GT911 Data Sheet Page 10-11, Timing
_ CRST 設定方法。

void setup(){
  pinMode(8,OUTPUT);digitalWrite(8,HIGH);delay(100);//
  digitalWrite(8,LOW);delay(1);digitalWrite(8,HIGH);//touch_crst_init

.
製作:配線図
1. WR信号は最短の距離で配線します。
2. 周波数が高い為 最短距離で綺麗に配線します。Wireの固定も重要です。
3. Touch CRSTのGPIO配線は必要。MiniKit RST端子接続では Resetされません。
4. 注意:使用用途に応じて区別する GPIO。
_ GPIO_0 は Boot。GPIO_19,20 は USB D-,D+ 。
_ GPIO_35,36,37 は PSRAM 。GPIO_48 は LED用です。

16bit Parallel MRB3511 and ESP32 MiniKIT Pin Assignments
ILI9488 VDD GND BL RST CS RS WR RD
MiniKIT 3V3 GND 42 EN 14 13 12 47
16bit Parallel MRB3511 and ESP32 MiniKIT Pin Assignments
ILI9488 D0 D1 D2 D3 D4 D5 D6 D7
MiniKIT 11 46 10 19 9 6 38 16
16bit Parallel MRB3511 and ESP32 MiniKIT Pin Assignments
ILI9488 D8 D9 D10 D11 D12 D13 D14 D15
MiniKIT 1 7 40 5 39 3 18 4
16bit Parallel MRB3511 and ES32 MiniKIT Pin Assignments
Touch(GT911) INT ADRS SDA SCL CRST
MiniKIT 2 0x14 15 17 8

ケースを加工します

 


.
memo:Display MRB3511 :8bit / 16 bit の切り替えに Switch を付けました。


.
LovyamGFX 設定:

//=====================================================================
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
//=====================================================================
class LGFX : public lgfx::LGFX_Device{
  lgfx::Panel_ILI9488  _panel_instance;
  lgfx::Bus_Parallel16 _bus_instance;//16bit Parallelのインスタンス(ESP32)
  lgfx::Light_PWM      _light_instance; // バックライト制御のインスタンス
  lgfx::Touch_GT911    _touch_instance; // I2C

public:LGFX(void){         // バス制御の設定を行います。
  auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。
  // 16ビットパラレルバスの設定
  cfg.freq_write =50000000;// 送信クロック(最大20MHz,80MHzを整数割の値に丸める)
  cfg.pin_wr  = 12;        // WR を接続しているピン番号
  cfg.pin_rd  = 47;        // RD を接続しているピン番号
  cfg.pin_rs  = 13;        // RS(D/C)を接続しているピン番号
  cfg.pin_d0  = 11;        // D0 を接続しているピン番号
  cfg.pin_d1  = 46;        // D1 を接続しているピン番号
  cfg.pin_d2  = 10;        // D2 を接続しているピン番号
  cfg.pin_d3  = 19;        // D3 を接続しているピン番号
  cfg.pin_d4  =  9;        // D4 を接続しているピン番号
  cfg.pin_d5  =  6;        // D5 を接続しているピン番号
  cfg.pin_d6  = 38;        // D6 を接続しているピン番号
  cfg.pin_d7  = 16;        // D7 を接続しているピン番号
  cfg.pin_d8  =  1;        // D8 を接続しているピン番号
  cfg.pin_d9  =  7;        // D9 を接続しているピン番号
  cfg.pin_d10 = 40;        // D10を接続しているピン番号
  cfg.pin_d11 =  5;        // D11を接続しているピン番号
  cfg.pin_d12 = 39;        // D12を接続しているピン番号
  cfg.pin_d13 =  3;        // D13を接続しているピン番号
  cfg.pin_d14 = 18;        // D14を接続しているピン番号
  cfg.pin_d15 =  4;        // D15を接続しているピン番号
  _bus_instance.config(cfg);// 設定値をバスに反映します。
  _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。
  {// 表示パネル制御の設定
  auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。
  cfg.pin_cs       =   14; // CSが接続されているピン番号   (-1 = disable)
  cfg.pin_rst      =   -1; // RSTが接続されているピン番号  (-1 = disable)
  cfg.pin_busy     =   -1; // BUSYが接続されているピン番号 (-1 = disable)
  cfg.memory_width =  320; // ドライバICがサポートしている最大の幅
  cfg.memory_height=  480; // ドライバICがサポートしている最大の高さ
  cfg.panel_width  =  320; // 実際に表示可能な幅
  cfg.panel_height =  480; // 実際に表示可能な高さ
  cfg.offset_x     =    0; // パネルのX方向オフセット量
  cfg.offset_y     =    0; // パネルのY方向オフセット量
  cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
  cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
  cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数
  cfg.readable    =  true; // データ読出しが可能な場合 trueに設定
  cfg.invert      = false; // パネルの明暗が反転してしまう場合 trueに設定
  cfg.rgb_order   = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定
  cfg.dlen_16bit  =  true; // データ長を16bit単位で送信するパネルの場合trueに設定
  cfg.bus_shared  = false; // SDカードとバス共有はtrueに設定
  _panel_instance.config(cfg);
  }
  { // バックライト制御の設定を行います。(必要なければ削除)
  auto cfg = _light_instance.config();//バックライト設定用の構造体を取得します。
  cfg.pin_bl = 42;         // バックライトが接続されているピン番号
  cfg.invert = false;      // バックライトの輝度を反転させる場合 true
  cfg.freq   = 44100;      // バックライトのPWM周波数
  cfg.pwm_channel = 7;     // 使用するPWMのチャンネル番号
  _light_instance.config(cfg);
  _panel_instance.setLight(&_light_instance);//バックライトをパネルにセットします。
  }
  {// タッチスクリーン制御の設定を行います。(必要なければ削除)
  auto cfg = _touch_instance.config();
  cfg.x_min      = 0;      // タッチスクリーンから得られる最小のX値(生の値)
  cfg.x_max      = 320;    // タッチスクリーンから得られる最大のX値(生の値)
  cfg.y_min      = 480;    // タッチスクリーンから得られる最小のY値(生の値)
  cfg.y_max      = 0;      // タッチスクリーンから得られる最大のY値(生の値)
  cfg.pin_int    = 2;      // INTが接続されているピン番号
  cfg.bus_shared = false;  // 画面と共通のバスを使用している場合 trueを設定
  cfg.offset_rotation = 6; // 表示とタッチの向きの調整 0~7の値で設定
  // I2C接続の場合
  cfg.i2c_port   = 1;      // 使用するI2Cを選択 (0 or 1)
  cfg.pin_sda    = 15;     // SDAが接続されているピン番号
  cfg.pin_scl    = 17;     // SCLが接続されているピン番号
  cfg.freq       = 400000; // I2Cクロックを設定
  cfg.i2c_addr   = 0x14;   // I2Cデバイスアドレス番号 or 0x5D
  _touch_instance.config(cfg);
  _panel_instance.setTouch(&_touch_instance);//タッチスクリーンをパネルにセット
  }
  setPanel(&_panel_instance); // 使用するパネルをセットします。
  }
};
LGFX tft; // 準備したクラスのインスタンスを作成します。
//=====================================================================

.


.
感想:
費用は LCDの値上がりと S3 MiniKitを作る為に 高くなりました。
WR信号は 配線が短くなる様にしています。
16bit Parallelの中での最高速は学ぶものが多く感心致しました。
最高速でも費用が高くなると どうなのかと言う面もあります。
16bit対応ができるLibraryは LovyanGFXしかなく 作成者の らびやん氏に感謝です。
GPIOが不足の時は 8Bit駆動で可能になります。

MRB3511 Touchの不思議:
Touchの.Addressを 正しく使用するには 起動時に 仕様に基づいたCRSTのResetが必要です。
Resetを実施しない場合 0x14, 0x5D のいずれかになります。
Touchの.Addressは 0x14 ですが 数ある中で 1つだけ 0x5D で無いと認識しないものがありました。
原因は 解明できていません。

MRB3511は 高い為 他の低価格displayを探して試す必要があるかと思います。
.
.


.

MRB3511 , 320×480 、16bit , Parallel , EP32 S3 MiniKIT ,

Written by macsbug

8月 3, 2022 at 10:46 am

カテゴリー: ESP32

Make an ESP32 S3 MiniKit

leave a comment »

ESP32 S3 MiniKit を作ろう。        2022.08.01

ESP32 MiniKit の基板へ ESP32 S3 を搭載し高性能化します。
S3は GPIO数が多く 16bit Parallel LCDの動作が可能になります。
費用は 1070円 です。

ESP32 MiniKit ESP32 S3

 


.
PIN ASSIGN:移植が可能です。
_ 🔴 一致が必要なピン:GND, 3V3, EN, IO0, TXD0, RXD0。赤色。
_ 🟡 異なるピン:MiniKit(GND), S3(IO45):接続しない事。黄色
_ 🟢 追加されたピン:S3 IO3, IO45:緑色。MiniKIt NC Pin 2つへ GPIO3,45を配線します。
_ ESP32 S3 GPIO48 = LED.
_ 資料:ESP32S3WROOM-1
_ 資料:MH-ET LIVE MiniKit for ESP32 : Schematic

MiniKit Left GND 3V3 EN VP VN 34 35 32 33 25 26 27 14 21
S3 Left GND 3V3 EN 4 5 6 7 15 16 17 18 8 19 20
MiniKit Right GND 23 22 TX RX 21 NC 19 18 5 17 16 4 0
S3 Right GND 1 2 TX RX 42 41 40 39 38 37 36 35 0
MiniKit Lower GND 13 SD2 SD3 CMD CLK SD0 SD1 15 2
S3 Lower 3 46 9 10 11 12 13 14 21 47 48 45



.
部品リスト:費用:1070円

No. Nomen Purchase Price
1 MH-ET LIVE D1 mini ESP32
SAMOIRE Store
. 10個:5355円
. 1個536円
536円
1 MH-ET LIVE D1 mini ESP32 SAMOIRE Store
. 1個674円
594円
2 ESP32 S3
. ESP32-WROOM-1-N16R8
. FLASH 16MB
.
秋月電子通商 530円
3 Kapton Tape
4 Wire : 0.26mm ジョンフロン線
5 スクレーバー
.

秋月の ESP32-S3ESP32-S3-DevKitC-1 は Aliexpressより低価格です。
ESP32-S3 は ESP32-S3-WROOM-1-N16R8FLASH 16MB です。
_ ROM : 384KB, SRAM : 512KB, SPIFlash 16MB, PSRAM(OctalSPI) : 8MB
_ TELEC のシールが添付されています。
秋月電子通商は 良く把握されており 助かります。
_ memo : PSRAMは Octal SPI ですので OSPI PSRAMで無く
_    Arduino IDEでは PSRAM : OPI PSRAMを選択します。

Aliexpressは ESP32-S3-WROOM-1-N8R8 があり FLASH 4MB で注意。
Aliexpressは 秋月より高く TELECシールは ありませんので購入しない事。
ESP32-S3-DevKitC-1 with TELEC の 1840円 があり低価格です。
手間は必要ですが、長い基板でなく 小型の基板が必要で製作しました。
結果 低価格でレイアウトしやすい基板が出来ました。


.
製作:
1. MiniKit ESP32 Pinのハンダをハンダタオル等で綺麗に除去します。
_ フラックス使用は効果があります。綺麗な除去は重要です。
2. ESP32を取り外します。これは とても難解です。
_ 取り外す道具があれば幸いです。道具がない為に薄いスクレーバーを使用。
_ Pinにハンダゴテを当ててPin下側のハンダを溶かしながら
_ 無理せずゆっくりとスクレーバーを端子と基板パターン間に差し込みます。
_ 注意:力づくで上げますと基板パターンが剥がれ使用できなくなります。
_ 基板パターンよりもESP32 Tipのパターンが弱くESP32側が剥がれる場合があります。
_ ESP32の中央GNDは ハンダ付けされてます。これを念頭に取り外します。
_  3.の画像では 中央GNDに ESP32側のパターンが剥がれた後があります。(銅色)
3. GNDと追加端子部にKapton Tapeを取り付け絶縁します。
4. ESP32 S3を半田付けします。
_  注意: トラブルでESP S3を外す場合は ESPのパターンが剥がれます。
5. MiniKit NC端子へ S3の GPIO_3 と GPIO_45 を配線します。
6. MiniKit LowerのGNDが S3 GPIO_45に接触していないかテスターで確認。
7. PIN間が接触していないかテスターで確認します。
8. 全てのPINの配線をテスターで確認します。

1. ESP32 Pin のハンダを除去します 2. スクレーバーを挟み外します

 

3. GNDと追加端子部にKapton Tape 4. ESP32 S3を半田付けします
必要に応じてコネクタピンを接続 5. MiniKit NC端子へ S3の 3 と 45 を配線

 


.
ESP32 S3 : Arduino IDE Board 設定;
.


.
感想;
MiniKitからのESP32チップの取り外しは難しいですが 最高の性能を引き出せます。
ESP32 S3がタイミングよく秋月電子通商から販売された事はラッキーでした。

MiniKitの GPIO数は 8bit Parallel LCD まででした。
S3によりmemory用とNC端子も使用できGPIO数が多くなり 16bitも可能。
ESP32 S3は 16bit parallel LCDを使用すると高速表示が可能です。

基板には 40M, 80MHzが流れます。
この周波数に耐えられるレイアウトや配線が必要です。
15種類の基板を試して来ましたが 長い基板でなく MiniKitの様な小さい基板で
配線を短く綺麗にすると高速に耐えられます。
設計の6割は レイアウトと聞いています。
S3 MiniKitは この事に最適です。
.
.
.


.
ESP32 MiniKit , ESP32 S3 ,

Written by macsbug

8月 1, 2022 at 1:09 pm

カテゴリー: ESP32

Weather and Kyoshin

with 2 comments

天気と強震モニタを M5Stack と 3.5″ Display で表示しました。  2022.07.16

天気は 地域の日時,時刻, 温度, 湿度, 気圧を表示します。
強震モニタは 地震発生時に音の知らせ、震源地と震度を表示します。
地震発生時に 判断や対応が出来ます。
_ 謝辞:強震モニタは RIALAB makoto氏の
_ M5Stackで強震モニタのデータをウォッチする を移植させて戴きました。
_ パソコンでは Yahooのリアルタイム震度 を使用しています。


.
仕様:
天気は OpenWeather を使用し 地域の天気を表示します。
強震モニタは 防災科研強震モニタがあります。
日時,時間は WorldTimeAPI を使用しました。
開発環境:Arduino IDE 1.8.19
_ Board Manager : arduino-esp32 2.0.3-RC1
_ M5Stack:
_  Board : ”M5Stack-Core-ESP32”
_  Partition Scheme : “No OTA (large App)” or
_  ”Minimal SPIFFS (Large APPS woth OTA)”
_ ESP32 MiniKit:
_  Board : ”MH-ET LIVE ESP32MiniKit”
_  Partition Scheme:”No OTA (Large APP)”
_ Library:LovyanGFX
_ Library:AnimatedGIF
_ Hard:M5Stack
_ Hard:3.5″ 380×480 Display Touch and ESP32 MiniKIt Box


.
🟢 Down Load:Weather_Kyoshin_M5Stack_LGFX.zip
_ DL後 pdf(_.pdf)を削除しzipを解凍します。
🟢 Down Load:Weather_Kyoshin_320x480V_MiniKit.zip
_ DL後 pdf(_.pdf)を削除しzipを解凍します。
以下の設定が必要です。

const char *ssid = "."; // Access point name for Wi-Fi connection
const char *pass = "."; // Wi-Fi connection password
const String key = "."; // OpenWeather key

OpenWeatherWeather API 参照とAPI取得方法。
Free APIkey : 60 calls/Minute, 1,000,000 calls/Month
sign up:sign up後 mailにAPI key, OpenWeather HPで見れます。


.
操作方法:
Aボタン:強震を表示。5秒後に消灯。
Bボタン:天気を表示。5秒後に消灯。
Cボタン:連続表示と消灯の切り替え。

.
上 をタッチ:5秒表示し消灯。
中央をタッチ:連続表示。
下 をタッチ:消灯。


.
3.5inch Display:以下の MiniKit版を使用します。
380×480 SPI Display with touch and ESP32 miniKit Box

LCDのバックライトコントロールを追加する為に 改修しました。
配線:ILI9488_BL(Green) – MiniKit_13(Green), and M5StampC3_9
- ILI9488のBLは 3V3接続でしたが 3V3を外し MiniKitの13pinに接続します。
- ILI9488のBLは Transistor Driveで MiniKitの13pinへの接続は可能です。


.
メモ:
01. 防災科研の強震モニタは 多彩な機能があります。
02. M5Stack用は 機能が簡略化されたものです。
_  防災科研の日本地図は 352×400で 320×240に変換され 横長になります。
03. 移植は 強震の日本地図へのScaleの追加と新たに天気を追加しました。
04. 日本地図は WEBからの入手をやめて bin.cに変換し使用しています。
_  bin.c への変換は lcd-image-converter で 16bit にて作成しました。
05. WorldTimeAPI は Text抽出が可能です。JSTや時間変換は不要になります。
_  TomeZponeを参照にTokyoとかを指定します。
06. Library Arduino JSONは不要です。(使用時 verで問題になる時がある)
07. OpenWeatherは Free APIkeyがあります。登録するとメールでkeyが届きます。
_  制限:60 calls/Minute, 1,000,000 calls/month です。
08. 表示の高速化:
_  LovyanGFXの固定幅フォント(lgfxJapanMincho_xx)を使用します。
_  背景色がDKGREENの時 tft.setTextColor(TFT_WHITE,TFT_DKGREEN);
_  と準備し tft.drawString(hms,188,38); 又は
_  tft.setCursor(188,38); tft.println(String(hms));
_  とすると 前回の文字を背景色で消す形で白文字で重ね書きします。
_  重ね書きには 数値や文字は固定幅フォント(等幅)が必要になります。
_  表示場所に 先にfillRect で前回表示を消すとチラつきが多くなります。
09. tft.drawStringよりも tft.print の方がメモリーに 優しい様です。
10. メモリー:スケッチは 1.38MB。4MB中1.3MBを超えていますので
_ Arduino IDE / Partition Scheme : “No OTA (large App)” が必要です。
11.. M5Stack USB消費電流:USB Current consumption
_ 強震モニタは LCD BackLight(BL) と Sleep, WiFi が使用されています。
_ では それぞれが どの程度の消費電流なのでしょうか?

_ ESP32(IP5306,CP2104等を含む)とLCD表示は 80mA です。
_ LCD BLは 20mA で BLを消すと ESP32 は 60mA で動作。
_ WiFiを使用すると 20mA 追加され 100mA になります。
_ (WiFiの値は Peak値を考慮した数値ではありません。)
_ sleepは 10mA です。 sleep を使用し LCD BLを消すと 50mA です。
_ LCDのBLを消すと LCDの劣化を防げます。
_ LCDのBLは 3.3V駆動で 67mA です。
12. MiniKit ILI9488 LCDの USB LCD消費電流は 50mAです。
_ ILI9488 BLは Transistor(S8050)でDriveされ ESP32のGPIOで接続可能です。
_ 大きなDisplayは消費電流が増えます。7inchの場合は 電源の考慮が必要です。
13. 消費電流を考慮すると BL制御や sleep が必要か判断できます。
14. MiniKit ILI9488は Speaker未接続の為 後日 改修する予定です。
15. 気象情報:多数の気象情報があり PC や iPad で見る事が出来ます。
_ PC や iPad で見れますので 電子工作でどうなのかと言う面もあります。
_ Windy リアルタイム天気予報
_ 世界の気象リアルタイム
_ 世界の大気汚染状況
_ 世界中の気象状況
_ 気象庁アメダス
_ 東京アメッシュ
_ 強震モニタ


.
感想:
強震モニタは 地震発生時に 震源地が分かると判断と対応ができ便利です。
防災に役立ちます。
RIALAB makoto氏の強震モニタは 実に良くできています。感謝!
経緯や目的も含め何度もこの記事を読み直す程です。
ネット上にある画像を容易に表示できると多くの事が出来る様になります。

gif取得や変換, 表示方法に興味があり スケッチを見ていますが 私には難解です。
gif変換が出来て表示していますので感心しています。

防災科研の強震モニタは ボタンや入力があり多彩な対応が可能で良く出来ています
これをタッチ操作で実現するには 双方向の通信をマスターする必要があります。
これが出来ると かなりの事が出来る様になります。

ESP32でブラウザーが動いたり Youtubeが見れるアプリが実現すると良いのですが
そう簡単にはいかないでしょうね。

課題:メモリー
漢字が可能な固定幅フォントは メモリーを使用する様です。
Arduino IDE / Partition Scheme : “Default” でコンパイル不可になりました。
最初は 使用する漢字の部分を bin.c で使用していましたが 試作中での
対応は臨機応変ではなくなりました。
その為に LovyanGFXの固定幅フォントに切り替え便利になりました。
LovyanGFXで漢字が容易に使用できるのは 素晴らしいです。
メモリー使用量を考慮すると 表示する漢字の部分を bin.c にした方が
良いかと感じました。多くの事を熟知していないと こうなります。

 

.


.
M5Stack , ESP32 MiniKIt . ILI9488 , LovyanGFX , 天気 , 強震モニタ ,

Written by macsbug

7月 16, 2022 at 12:34 pm

カテゴリー: ESP32, M5STACK

USB Cable Tester for M5Stack

leave a comment »

USB Cable Tester for M5Stack             2022.07.08

USB Cableの断線や抵抗(電圧降下)を デジタルとアナログで表示します。
500円 の USB Cable Tester を M5Stackに接続します。


費用: 900円。
たまに使用する為 取り付け取り外しが容易な
M5Stackの横に接続する Extension方式を採用しました。
測定するUSB Cableは上下に接続します。

Cableが 断線している場合は
該当端子に [ OPEN ] を表示。
電圧降下(mV)を数値とグラフで表示し
抵抗値が 大きい場合は 赤色で表示。
グラフは抵抗の変化を目視できます。

.


.
🟢 Down Load:M5_USB_Cable_Tester.zip
_ DL後 pdf(_.pdf)を削除しzipを解凍します。
🔴 Down Load:LovyanGFX版です。M5_USB_Cable_Tester_LGFX.zip
_ DL後 pdf(_.pdf)を削除しzipを解凍します。
_ LovyanGFX版は 表示が綺麗で高速です。
_ 開発環境:Arduino IDE 1.8.19
.


.
構成:

500円の USB Cable Tester を使用。
コネクタの端子は基板上にあります。
サイズはM5Stackに入る50x50mm。
USB Cable Tester の 基板を
M5Stack PROTO Caseへ装着。
M5 PROTO Boardと接続します。

.


.
回路図:

USB Cable Tester の回路図です。

_ R1,R2,R3,R4,R5 は 300Ω です。LEDは高輝度青色です。
_ Lighning, type-c, Micro は パラレル接続されています。
_ 基板には コネクターのCheck Pointが24個あります。
_ 動作:USB 5Vから 300Ω、測定するUSB Cableを挟み
_ Cableが正常の場合 LEDは点灯します。
_ Cableが断線の場合 LEDは点灯しません。
_ この方法は Cableの抵抗値の測定はできません。
:

改修方法:M5Stackへ接続する回路図。

_ 配線は 両側(D+,D-,VCC,GND x2)の8本と電源2本です。
_ 8本は M5Stackの ADC端子(Analog Input) へ接続します。
_ 2本は M5Stackの 3.3V電源(330Ωを含む)とGNDへ接続します。
_ USB Cableの両端をM5StackのADC端子へ接続し電圧を測ります。
_ コネクター間の電位差を測定し断線や抵抗値を判断できます。
_ 電源は 3.3Vで 10mA程度にする為に 330Ωを入れます。
_ USB Cableの導通が正常の場合 D+ 端子は 2.54Vです。
_ この時 LEDは 2106Ω に相当します。

_ メモ:GPIO_0 を使用する為に プログラム書き込み時と
_  電源投入時は 測定するUSB Cableを 外しておきます。
_  R1,R2,R3,R4,R5,LED は 他の抵抗に交換しても良いですが
_  基板に手を加えない様にする為に そのまま使用しました。
.


.
部品リスト:費用:900円

No. Nomen Purchase Price
1 USB Cable Tester, 50x50mm
MECHANIC Factory Store
. $3.39
. 輸送期間 : 18日
470円
2 Extension Adapter
M5Stack Extension Adapter 356円
3 CASE Cover
3D Printerで製作 50円
4 Resistor 330Ω 10円
5 Screw : 2φ x 2ea 10円
6 Wire : 0.26mm ジョンフロン線

.
補足:同等の USB Cable Tester で 45×48.5mm。

No. Nomen Purchase Price
1 Quick Cable Test, 45×48.5mm
YH Repair Tools Store
. $4.53
632円

.


.
製作:回路図に従い配線します。
_ M-BUS 3.3V には 330Ωを入れます。
_ USB Cable TesterからのWireは PROTO基板のスルーホールを通します。

USB Cable Tester of M5Stack , Pin Assignments
Type-A PWR IN VCC GND D+ D- VCC GND
M-BUS 330Ω + 3V3 GND 35 36 26 0
type-C PWR IN VCC GND D+ D- VCC GND
M-BUS 330Ω + 3V3 GND 12 34 13 15

サイズは 50x50mmでM5Stackに入ります。 Caseに固定する穴を開けます。
各端子に Wire ( 10本 ) を接続。
8本のWireを M-BUSへ接続します。
3V3は 330Ωを接続。GNDも接続。
基板を ネジで止めた状態です。
各コネクターは 丁度良い位置。
基板をネジで止めた状態です。
ケースの高さは 15mm です。
M5StackのM-BUS拡張コネクタです。
コネクタは縦2段で 緩みは出ません。

.
完成:M5Stackに 必要な時に接続し 不要な時に容易に外せます。

.


.
ADC:アナログ入力について
- アナログ入力 ADCには ADC1とADC2とがあります。
- Wi-Fi使用時 ADC2は機能しません。
- ADC1 : GPIO 34, 35, 36, 37, 38, 39, Hall Phase 1, Hall Phase 0
- ADC2 : GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27
.


.
プログラム:フォントを綺麗に高速に表示する。
- フォントを同じ場所で重ね書きするには フォントの背景色を黒とかにします。
- この方法で重ね書きをすると 高速な表示が可能です。
- M5.Lcd.setTextColor(TFT_WHITE); :文字を白。以前の白い文字と重なります。
- M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK); :文字を白。背景色を黒で重なりません。
- 
- フォントを重ね書きするには 数値や文字は 等幅が必要です。
- 幅が変化するフォントは 位置がずれて綺麗に表示できません。
- M5StackでFreeFontsのFMB12を使用し何とか表示ができました。
- ただし 妙な細工をして完璧ではありませんでした。
- 
- LonyanGFXは 固定幅フォントがあります。
- fonts::lgfxJapanMincho_12 // 明朝体 サイズ12 固定幅フォント
- fonts::lgfxJapanGothic_20 // ゴシック体 サイズ20 固定幅フォント
- サイズは 8, 12, 16, 20, 24, 28, 32, 36, 40 が用意されています。
- LovyanGFX/examples/HowToUse/3_fonts/3_fonts.ino
- このフォントを使用すると プログラムが容易である事と綺麗に表示できます。
.


.
感想:
USB Cable Testerの基板は MECHANIC Factory Storeの商品です。
価格;500円。
- 作るより購入した方が安いです。
- コネクター部品を集めて作ると これ以上の価格になるでしょう。
サイズ:50 x 50mm。
- M5Stack用に作られたかの様なピッタリのサイズです。
- コネクターの位置も最適な距離にあります。
ネジ穴の場所:
- ネジを止める為の穴の場所は 適切な場所が確保されています。
課題:
- 使用されているコネクターの品質が課題になります。

メモ:低抵抗のCableを測定する時は 両サイドに抵抗を接続します。

案:USB Cable Testerの基板を使用せず M5Stack用に再設計し
-  ソフトを充実すると素晴らしいモノができると考えています。


.
.


M5Stack , USB Cable Tester ,

Written by macsbug

7月 8, 2022 at 9:10 am

カテゴリー: ESP32, M5STACK

Let’s revive the broken M5Stack

leave a comment »

壊れたM5Stackを復活しよう。           2022.06.08

M5Stackに ESP32 MiniKit, S2 mini , M5Stamp C3U を接続します。



修理費用: 640円です。
1. ESP32 MiniKit :640円。
2. ESP32 S2 mini:690円。
3. M5Stamp C3U:870円。

修理改造後の性能:
- ESP32 MiniIKit(MiniKIT_lgfx80M)は M5Stackより 2.6倍 高速です。
- ESP32 MiniKitとS2 miniは SPI 80MHz動作が可能です。
- M5Stamp C3Uは SPI 40MHz までです。

- Raytrace 速度比較:Minikit(M5MiniKit)は M5Stackの2.2〜2.4倍高速です。


.
経緯と故障状況:M5Stackを10台ほど購入。内3台が壊れました。
1. M5Stack Basic:Tip Partsを破損。
2. M5Stack Gray:MD5 error発生。原因は CP2104の不良。
3. M5Stack FIRE :MD5 error発生。原因は CP2104の不良。
-  


.
🟢 Sample Down Load:
3D_CUBE_M5MiniKit.zip , LVGL802_demo_M5MiniKit.zip , MovingCircles_M5MiniKIT.zip
Raytrace_M5MiniKit.zip , Test_PDQ_M5MinKit.zip , Tetris_M5MiniKit.zip
uncannyEyes_M5MiniKit.zip
DL後 pdf(_.pdf)を削除しzipを解凍します。
SPI 80MHzです。ただし LVGL802_demo, Tetris, uncannyEyes は40MHz動作です。
記事の下に示す「LovyanGFX と SPI Frequency」を参照ください。


.
修理方法:
1. ESP32 MiniKit に交換。(SPI Clock 80MHz可能)
2. ESP32 S2 mini に交換。(SPI Clock 80MHz可能)
3. M5Stamp C3U に交換。(SPI Clock 40MHzまで可能)
4. Libraryは LovyanGFXを使用します。


.
準備:
1. M5Stack基板のLayoutを把握します。
- Parts arrangement of M5Stack。2020.04.01。pdfは 解析と部品配置が示されています。
- レイアウトから部品や信号の流れの把握、修理、改修が可能です。

2. M5StackのSchematicを把握します。
- M5-Core-Schematic(20171206).pdf
- 公式のSchrmaticは 意図的な誤記がありますので解析を把握します。

3. 部品リスト:640円 ( $5 ):価格は 円相場で変動します。

No. Nomen Purchase Price
1 MH ET LIVE ESP32 MiniKIT
WAGAT official Store
. 10個:5585円
. 1個560円
. 輸送期間 10day
. その後 価格上昇。
560円
1 MH ET LIVE ESP32 MiniKIT SAMIORE Store
. 10個:5626円, 1個563円, 輸送期間 9day
563円
1 MH ET LIVE ESP32 MiniKIT SAMIORE Store 698円 698円
1 ESP32 S2 mini V1.0.0
LOLIN Official Store
. $7.85
. 輸送期間 11day
921円
1 ESP32 S2 mini V1.0.0 TENSTAR Store $4.37 603円
1 ESP32 S2 mini V1.0.0 SuperModule Store $4.42 611円
1 M5Stamp C3
M5Stack Official M5Stamp C3
. $10.2 (1162円)
. 5pcs販売は 3923円で 1個 785円
785円
2 FFC 26pin (0.7mm to 2.54mm)
JJiu Online Store
. 5pcs 393円。個 79円
79円
3 N ch FET AO3400A 秋月電子通商
. 10pcs 220円。1個 22円
22円
4 Tip Resistor 10K,100K, 両面テープ,,
5 0.26mm ジュンフロン線 千石電商

.
S2 mini : Without TELEC:ソフトで送信停止 又は アンテナ部に50Ωダミーロードを接続します。
変換基板:LCDのPitchは 0.7mmです。よって 0.7mm to 2.54mm 変換基板を使用します。
N ch FET AO3400A:基板にある FET1 AO03402 が無い場合に使用できます。

4. Libraly:LovyanGFX



.
以下の順に記載します。
1️⃣ ESP32 MiniKit , 2️⃣ ESP32 S2 mini , 3️⃣ M5Stamp C3U

1️⃣ ESP32 MiniKit

改造手順:
1.分解, 2.LCDの取り外し, 3.MiniKit RST Switch取り外し, 4.LCD配線,
5.基板加工, 6.A,B,C,Power Buttonの高さ調整, 7.基板の加工と配線の実例
の順で説明を致します。

1. 分解:
- Screw2本とSpeakerを外します。
- 基板を左に移動し 基板凹部とケース凸部を合わせ 基板を上げます。
- LCDのFront側(両面テープで固定されている)を外す方法もあります。
- LCDのFlex Wireは短い為 切れないように注意します。

2. LCDの取り外し:M5Stackの基板とLCDを外します。
- Flex Wireは 切れやすく難解ですので準備と注意をしてください。
- 注意:Flex Wireは短く 僅かの範囲で基板を浮かせて取り出します。
- 注意:LCDのFlex Wireは短く”力”で切断しやすい為 ”力”を加えない事。
- 2本のネジを外します。
- Speakerの線が切れないように引き出します。
- Speaker側に基板を移動し基板を上側に上げて引出します。
- 基板からFlex Wireをハンダゴテで外すには コテ先の長い部分で
-  Flex Wireハンダ部の全体を溶かして ”力”を加えずに短時間で取ります。


- 補足:Flex wreを破損した場合の処置方法。
-  参照:Repair Repair M5Stack Display
-  より線Wreを 分解して1本にしハンダ付けします。
-  Flex端子と変換基板(半田メッキ済)に半田付け済みのWireを
-  瞬時にハンダ付けします。上からチョンと押す程度です。

3. MiniKit RST Switch 取り外し:
- 参照:ESP32 Minikit schematic
_ MiniKitの部品がM5StackのPower Buttonに接触する為に
_ RST Switch(緑色)を外し 基板(黄色)をカットします。
_ RST Switch(緑色)を外した状態。
_ RST(SW4) , R29, C37, EN の位置。
_ M5StackのPower ButtonとMiniKitの基板が接触しなくなります。

.
4. LCD配線:
- LCDを変換基板へハンダ付けします。
- 配線図に従い 配線します。
- LCD, 変換基板, M5Stack基板の間は 隙間は ありませんので注意。
- BL(Back Light)用の FET(AO3402)は M5Stack基板の部品を使用します。
- 今回 BLは ESP32のGNDへ配線しています。

5. 基板加工:
- メモ:M5Stackの基板は 4層です。

6. A,B,C Button, Reset(Power) Button の高さ調整:

A,B,C Buttonに
シールを4枚程 積み重ね
両面テープで固定します。
Power Buttonは 1枚です。
参考:
Repair M5STACK Power Switch

メモ:M5の設計は 0.1mm
(ポストイット1枚分)
少なく緩みがあります。

.
7. 基板の加工と配線の実例:

1. S4 Power Swicth 配線。

2. この基板のR13(100K)は
_ 値が異なっていた為 103(10KΩ)に交換。
_ RST時定数:1nF+10KΩ。τ=0.47μsec。
_ 100KΩ τ=4.7μsec でも良いです。

3. L2 を外します。
_ MiniKitの3V3を使用する為にL2を外し
_ EA3036 OUTPUT(VCC3V3)を切断。
_ VDD3V3の場合は L3を外します。

4. 3V3 Wire 配線。

5. GND Wire 配線。
_ Grove GNDからESP32 GNDへ配線。

1. EA3036 3V3 OUTPUTは L2の下。
_ VCC_3V3は L2の上から出力されます。

2. R13は 100KΩ,上のC7は1nf。
_ R13,C7はS4 Switchに接続。
_ S4 SwicthをRST Swicthにします。

1. A Switch Wire配線。
+ Resistor(100K)取付。

2. A Switch Wire配線。

3. A Switch Wire配線。

.



.
2️⃣ ESP32 S2 mini

配線:図の様に配線します。
-  A,B,C Switch と Power Switchの配線は 省略しています。
-  BLとGPIOの配線は 省略しています。
-  基板カットは Wireを通す為に カットします。
-  BLは 全てGNDへ接続しています。

 



.
3️⃣ M5Stamp C3U

配線:図の様に配線します。
-  A,B,C Switch と Power Switchの配線は 省略しています。
-  BLとGPIOの配線は 省略しています。
-  基板カットは Wireを通す為に カットします。

 


.
LovyanGFX と SPI Frequency:
SPI Frequency ( cfg.freq_write ) は 最大80MHz, 80MHzを整数で割った値に丸められます。
20,30,40,50,60,70,80M に設定しますと 20,30,40,80MHz に丸められています。
MiniKit, S2 mini は 80MHzでも表示しますが
画像データーを含まれたものは 80MHzでは表示せず 40MHzで表示されます。
M5Stackは 80MHzでは表示せず 最大40MHzになります。


.
LovyanGFX設定:

M5stack の LCD は SPI ILI9342 です。
SPIは SPI2_HOST を使用します。
MiniKit と S2 mini の SPI Clockは 80MHz が可能です。
M5Stamp C3U の SPI Clockは 60MHz までです。

1️⃣ ESP32 MiniKit

//----------------------------------------------------------------------
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
//=====================================================================
class LGFX : public lgfx::LGFX_Device{
  lgfx::Panel_ILI9342  _panel_instance;
  lgfx::Bus_SPI        _bus_instance;   // SPIバスのインスタンス

public:LGFX(void){         // バス制御の設定を行います。
  auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。
  cfg.spi_host = SPI2_HOST;     // 使用するSPIを選択  ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST
  // ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用してください。
  cfg.spi_mode = 0;             // SPI通信モードを設定 (0 ~ 3)
  cfg.freq_write = 80000000;    // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます)
  cfg.freq_read  = 16000000;    // 受信時のSPIクロック
  cfg.spi_3wire  = true;        // 受信をMOSIピンで行う場合はtrueを設定
  cfg.use_lock   = true;        // トランザクションロックを使用する場合はtrueを設定
  cfg.dma_channel = SPI_DMA_CH_AUTO; // 使用するDMAチャンネルを設定 (0=DMA不使用 / 1=1ch / 2=ch / SPI_DMA_CH_AUTO=自動設定)
  // ※ ESP-IDFバージョンアップに伴い、DMAチャンネルはSPI_DMA_CH_AUTO(自動設定)が推奨になりました。1ch,2chの指定は非推奨になります。
  cfg.pin_sclk = 18;            // SPIのSCLKピン番号を設定
  cfg.pin_mosi = 23;            // SPIのMOSIピン番号を設定
  cfg.pin_miso = 19;            // SPIのMISOピン番号を設定 (-1 = disable)
  cfg.pin_dc   = 27;            // SPIのD/Cピン番号を設定  (-1 = disable)
  _bus_instance.config(cfg);    // 設定値をバスに反映します。
  _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。
  {// 表示パネル制御の設定
  auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。
  cfg.pin_cs       =   14; // CSが接続されているピン番号   (-1 = disable)
  cfg.pin_rst      =   33; // RSTが接続されているピン番号  (-1 = disable)
  cfg.pin_busy     =   -1; // BUSYが接続されているピン番号 (-1 = disable)
  cfg.memory_width =  320; // ドライバICがサポートしている最大の幅
  cfg.memory_height=  240; // ドライバICがサポートしている最大の高さ
  cfg.panel_width  =  320; // 実際に表示可能な幅
  cfg.panel_height =  240; // 実際に表示可能な高さ
  cfg.offset_x     =    0; // パネルのX方向オフセット量
  cfg.offset_y     =    0; // パネルのY方向オフセット量
  cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
  cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
  cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数
  cfg.readable    =  true; // データ読出しが可能な場合 trueに設定
  cfg.invert      = false; // パネルの明暗が反転してしまう場合 trueに設定
  cfg.rgb_order   = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定
  cfg.dlen_16bit  = false; // データ長を16bit単位で送信するパネルの場合trueに設定
  cfg.bus_shared  = false; // SDカードとバス共有はtrueに設定
  _panel_instance.config(cfg);
  }
  setPanel(&_panel_instance); // 使用するパネルをセットします。
  }
};
LGFX tft; // 準備したクラスのインスタンスを作成します。

 


.
LovyanGFX設定:
2️⃣ ESP32 S2 mini

//----------------------------------------------------------------------
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
//=====================================================================
class LGFX : public lgfx::LGFX_Device{
  lgfx::Panel_ILI9342  _panel_instance;
  lgfx::Bus_SPI        _bus_instance;   // SPIバスのインスタンス

public:LGFX(void){         // バス制御の設定を行います。
  auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。
  cfg.spi_host = SPI2_HOST;     // 使用するSPIを選択  ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST
  // ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用してください。
  cfg.spi_mode = 0;             // SPI通信モードを設定 (0 ~ 3)
  cfg.freq_write = 80000000;    // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます)
  cfg.freq_read  = 16000000;    // 受信時のSPIクロック
  cfg.spi_3wire  = true;        // 受信をMOSIピンで行う場合はtrueを設定
  cfg.use_lock   = true;        // トランザクションロックを使用する場合はtrueを設定
  cfg.dma_channel = SPI_DMA_CH_AUTO; // 使用するDMAチャンネルを設定 (0=DMA不使用 / 1=1ch / 2=ch / SPI_DMA_CH_AUTO=自動設定)
  // ※ ESP-IDFバージョンアップに伴い、DMAチャンネルはSPI_DMA_CH_AUTO(自動設定)が推奨になりました。1ch,2chの指定は非推奨になります。
  cfg.pin_sclk =  7;            // SPIのSCLKピン番号を設定
  cfg.pin_mosi =  5;            // SPIのMOSIピン番号を設定
  cfg.pin_miso = 19;            // SPIのMISOピン番号を設定 (-1 = disable)
  cfg.pin_dc   = 11;            // SPIのD/Cピン番号を設定  (-1 = disable)
  _bus_instance.config(cfg);    // 設定値をバスに反映します。
  _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。
  {// 表示パネル制御の設定
  auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。
  cfg.pin_cs       =    3; // CSが接続されているピン番号   (-1 = disable)
  cfg.pin_rst      =    9; // RSTが接続されているピン番号  (-1 = disable)
  cfg.pin_busy     =   -1; // BUSYが接続されているピン番号 (-1 = disable)
  cfg.memory_width =  320; // ドライバICがサポートしている最大の幅
  cfg.memory_height=  240; // ドライバICがサポートしている最大の高さ
  cfg.panel_width  =  320; // 実際に表示可能な幅
  cfg.panel_height =  240; // 実際に表示可能な高さ
  cfg.offset_x     =    0; // パネルのX方向オフセット量
  cfg.offset_y     =    0; // パネルのY方向オフセット量
  cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
  cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
  cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数
  cfg.readable    =  true; // データ読出しが可能な場合 trueに設定
  cfg.invert      = false; // パネルの明暗が反転してしまう場合 trueに設定
  cfg.rgb_order   = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定
  cfg.dlen_16bit  = false; // データ長を16bit単位で送信するパネルの場合trueに設定
  cfg.bus_shared  = false; // SDカードとバス共有はtrueに設定
  _panel_instance.config(cfg);
  }
  setPanel(&_panel_instance); // 使用するパネルをセットします。
  }
};
LGFX tft; // 準備したクラスのインスタンスを作成します。

 


.
LovyanGFX設定:
3️⃣ M5Stamp C3U

//----------------------------------------------------------------------
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
//=====================================================================
class LGFX : public lgfx::LGFX_Device{
  lgfx::Panel_ILI9342  _panel_instance;
  lgfx::Bus_SPI        _bus_instance;   // SPIバスのインスタンス

public:LGFX(void){         // バス制御の設定を行います。
  auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。
  cfg.spi_host = SPI2_HOST;     // 使用するSPIを選択  ESP32-S2,C3 : SPI2_HOST or SPI3_HOST / ESP32 : VSPI_HOST or HSPI_HOST
  // ※ ESP-IDFバージョンアップに伴い、VSPI_HOST , HSPI_HOSTの記述は非推奨になるため、エラーが出る場合は代わりにSPI2_HOST , SPI3_HOSTを使用してください。
  cfg.spi_mode = 0;             // SPI通信モードを設定 (0 ~ 3)
  cfg.freq_write = 60000000;    // 送信時のSPIクロック (最大80MHz, 80MHzを整数で割った値に丸められます)
  cfg.freq_read  = 16000000;    // 受信時のSPIクロック
  cfg.spi_3wire  = true;        // 受信をMOSIピンで行う場合はtrueを設定
  cfg.use_lock   = true;        // トランザクションロックを使用する場合はtrueを設定
  cfg.dma_channel = SPI_DMA_CH_AUTO; // 使用するDMAチャンネルを設定 (0=DMA不使用 / 1=1ch / 2=ch / SPI_DMA_CH_AUTO=自動設定)
  // ※ ESP-IDFバージョンアップに伴い、DMAチャンネルはSPI_DMA_CH_AUTO(自動設定)が推奨になりました。1ch,2chの指定は非推奨になります。
  cfg.pin_sclk =  5;            // SPIのSCLKピン番号を設定
  cfg.pin_mosi =  4;            // SPIのMOSIピン番号を設定
  cfg.pin_miso = 19;            // SPIのMISOピン番号を設定 (-1 = disable)
  cfg.pin_dc   =  7;            // SPIのD/Cピン番号を設定  (-1 = disable)
  _bus_instance.config(cfg);    // 設定値をバスに反映します。
  _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。
  {// 表示パネル制御の設定
  auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。
  cfg.pin_cs       =    3; // CSが接続されているピン番号   (-1 = disable)
  cfg.pin_rst      =    6; // RSTが接続されているピン番号  (-1 = disable)
  cfg.pin_busy     =   -1; // BUSYが接続されているピン番号 (-1 = disable)
  cfg.memory_width =  320; // ドライバICがサポートしている最大の幅
  cfg.memory_height=  240; // ドライバICがサポートしている最大の高さ
  cfg.panel_width  =  320; // 実際に表示可能な幅
  cfg.panel_height =  240; // 実際に表示可能な高さ
  cfg.offset_x     =    0; // パネルのX方向オフセット量
  cfg.offset_y     =    0; // パネルのY方向オフセット量
  cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
  cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
  cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数
  cfg.readable    =  true; // データ読出しが可能な場合 trueに設定
  cfg.invert      = false; // パネルの明暗が反転してしまう場合 trueに設定
  cfg.rgb_order   = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定
  cfg.dlen_16bit  = false; // データ長を16bit単位で送信するパネルの場合trueに設定
  cfg.bus_shared  = false; // SDカードとバス共有はtrueに設定
  _panel_instance.config(cfg);
  }
  setPanel(&_panel_instance); // 使用するパネルをセットします。
  }
};
LGFX tft; // 準備したクラスのインスタンスを作成します。

 


.
感想:
愛着のある M5Stackが蘇ると嬉しいですね。

- 修理費:M5Stackは 価格高いですが MiniKit版の 640円は安いです。
- 速度の向上:ESP32 MiniKit により 2.6倍 高速化し気分が高まります。

- 変換基板:市販の変換基板は 1.6mmで厚いです。
-  その為に A,B,C Switch の高さ調整が必要です。
-  1mm厚の基板であれば 調整不要か調整が容易になります。
-  1mm基板を製作し付加価値のある回路を追加すると
-  最強のM5Stackになるでしょう。

- ESP32 RST:
-  S4 Power Switch を MiniKitのRST Switchに変更します。
-  C7(1nF)とR13(100KΩ)(τ=4.7μsec)をそのまま使用するか
-  R13=10KΩで τ=0.47μsec(MiniKitの時定数)でも良いです。
-  時定数は ある程度大きい方が安定した書き込みや起動をします。

- RST τ の値:書き込みや起動時に重要な τ(タウ) の値。τ=0.47CR
-  ESP32 Dev Kit:0.22μsec:エラーが起きやすい値です。
-  M5Stack Basic:0.564μsec:書き込みエラーの情報があります。
-  ESP32 MiniKit:0.564μsec:正常に動作しています。
-  ESP32 S2 mini:4.7μsec:従来よりも1桁値が増えています。
-  M5Stamp C3U:221μsec:従来とは桁が違う値です。
-  他 新しいESP32 Boardの τ の値は 大きくなっています。

- SPI 80MHz:
-  60MHzでないと表示が乱れたり動作しない場合があります。
-  原因はスケッチ内の画像データーを読み込む時に発生します。

- MiniKitとGPIO:
-  LCDのGPIOを同一にする事により Arduino IDE での
-  Board Manager は M5Stack-core-ESP32 を選択できたり
-  #include M5Stack.h を使用でき M5Stackの命令も動作します。

- IC と サーマルパッド(GNDパターン):
-  サーマルパッド(GNDパターン)のある ICは ESP32 と IP5306 です。
-  ESP32とIP5306を破損せず外すには 工夫してください。

- M5StackとMiniKit:
-  ESP32-WROOM-32と言う同じMPUを使用しています。
-  LovyanGFXでPDQ Graphics Testを実行すると
-  M5Stackは SPI 40MHzまでの表示です。
-  MiniKitは SPI 80MHzまで表示が可能でした。不思議です。
-  この違いは 部品レイアウトや配線の太さの違いの為かと想像しています。

 


.
.
M5Stack , Gray , FIRE , ESP32 MiniKit , S2 mini , M5Stamp C3U ,

Written by macsbug

6月 8, 2022 at 1:02 pm

カテゴリー: ESP32, M5STACK

Modified SPI Display to 16bit Parallel Display

leave a comment »

SPI ILI9488 Display を 16bit Parallel Display に改造。    2022.05.06

SPI Displayを16bit Parallel Displayに改造し高速化します。
表示速度は SPIの3〜5倍速くなります。
ラズパイのケースを使用し 低価格で持ちやすく綺麗です。
SPI Displayは 8/16bit Parallel Displayよりも低価格です。
費用は 3320円です。

特徴:
1. 低価格 Display;2000円以内。
2. 綺麗なケース:ラズパイのケースは 工作不要で低価格です。
3. 高速表示:16bit / 8bit Parallel は SPIの5倍速いです。
4. タッチパネル;ハードのスイッチや工作が不要です。
5. 携帯:バッテリー内蔵で持ち運べ 充電も可能です。2300mA


速度:
SPI接続の ILI9488 and MiniKIt に対し 5倍高速です。
SPI接続の Lily Pi や WT32-SC01 に対し 3倍高速です。
Bus 周波数は 30MHzまで可能です。


.
🟢 Down Load:Touch Calibration:Touch_Calibration_16bitILI9488_S2mini.zip
DL後 pdf(_.pdf)を削除しzipを解凍し実施します。
Exsample には Touch Calibration の値が記載されています。
Touch Calibrationを実施するか サンプルの値を使用しても良いでしょう。

Exsample :
🟢 Down Load:LVGL802_demo:LVGL802_demo_16bitILI9488_S2mini.zip
🟢 Down Load:Tetris:Tetris_16bitILI9488_S2mini.zip
🟢 Down Load:uncannyEyes:uncannyEyes_16bitILI9488_S2mini.zip
🟢 Down Load:Resistor_CALC:Resistor_CALC_16bitILI9488_S2mini.zip
DL後 pdf(_1.pdf)を削除しzipを解凍し実施します。


.

ディスプレー:低価格で実施する方法。
_ M5Stamp C3 or ESP32 Mini KIT で使用した
_ 3.5″ 480×320 SPI ILI9488 with Resistive Touch を使用します。
_ Display部は Flex wireで接続されている為に 取り外しが容易です。
_ Touch:Capacitive Touch の方が操作性は良いですが価格が高くなります。
_ 販売:JR E-Shop:3.5″ SPI 480*320 ILI9488 TFT module with Touch panel
_ 価格:1600円(2022.03.05), 1876円 (2022.05.05)。輸送期間 16日。
_ JR E-Shop:低価格で対応の良い販売店です。

SPI Displayは Parallel端子を使用していません。
中央のFCP ConnectorからFlex Wireをを外し
Display部分(画像左下)を使用します。
Display 型番:LHC03540
LHC03540 単体でも販売されています。
XPT2046 Touch Sensを含めると
左画像のModuleの方が低価格です。
LHC03540:🟢 詳細
Rear

 


.
部品リスト:3320円( $24 )。

No. Nomen Purchase Price
1 Raspberry Pi ABS Case
. USB Connector Type
RazerZONE Store
. Just Black Case
. 輸送期間 16day
367円
2 ESP32 S2 mini V1.0.0
LOLIN Official Store
. $7.85
. 輸送期間 11day
921円
2 ESP32 S2 mini V1.0.0 TENSTAR Store $4.37 603円
2 ESP32 S2 mini V1.0.0 SuperModule Store $4.42 611円
3 3.5″ 480×320 SPI ILI9488
. with Touch
JR E-shop
. $13.85
. 輸送期間 19day
1600円
4 FPC/FFC plate,
. Well welded 0.5MM,40P
JJiu Online store
. $1.15
. 輸送期間 14day
194円
5 Battery 50x70x6mm
HJS230 2300mAh
. 秋葉原・中古屋
100円
6 Battery Charger
Lithium Battery Charger Module
. Type-C with protect , 10pcs 590円
. 輸送期間=16日
59円
7 Diode
秋月電子通商 1パック 180円, 1個 9円 9円
8 Switch
秋月電子通商 20円
9 ユニバーサル基板 95x72mm
秋月電子通商 200円
10 ピンヘッダ 2×20 (40P) 秋月電子通商 50円
11 ロープロファイルピンソケット
. 低メス 2x25P 5.7mm
秋月電子通商 40円
12 コネクター 付コード2P(D) 秋月電子通商 30円
13 XHコネクタ 2P 秋月電子通商 10円
14 ロープロファイルピンヘッダ
. 低オス 2x40P 7.7mm
秋月電子通商 40円
15 グルーガン ダイソー 220円, any
13 絶縁テープ, 両面テープ any

.
円相場により価格は変動します。投稿時は円安で高くなっています。
LOLIN S2 mini
– 32 PIn で 27 の GPIO を備えています。
– EN端子の時定数:100nF + 10KΩ、τ=4.7μsec
– Without TELEC:ソフトで送信停止 又は アンテナ部に50Ωダミーロードを接続します。
– Displayの価格は 全体の55%で 低価格で入手する事がポイントになります。
– Aliexpressの商品の価格変動は Price Archive で販売店のURLを入力すると見る事ができます。
.


.
配線図:

16bit Bus 設定:IM2,1,0(pin 38,38,40)を選択します。( 8bit Bus 設定も可能です )。

部品配置:
基板と各基板の間は 耐熱絶縁テープを挟み絶縁します。
S2 miniとouch(XPT2046)基板の接続はピンヘッダーのピンを使用します。
理由:高さを低くする為と 確実な接続と半田量の低減です。

XPT2046:0.65mm pitch のハンダ付方法。
_ ピンの間隔が非常に狭く難しい為に 充分に検討し時間をかけます。
_ 事前にWireにハンダ付けとICのPinを清掃(ハンダメッキでも良い)します。
_ Wireを逆作用ピンセット(Selef-Closing Tweezers)で固定します。
_ 半田付け時はハンダを使用せず Wireに付いたハンダを利用し
_ 先の細いハンダゴテでWireに熱を瞬時に加えて接続します。

_ 難しい場合は SOP-16の変換基盤を使用し 2.54mm pitchで接続します。
– 販売:SOP16 to DIP16 Adapter , XPT2046
– 販売:aitendoにありますが 上記Aliexpressより高いです。

基板配線:


Display:
Flex Wire to FPC-40P 0.5mm Connector:LCD Flex wire は 40Pin 0.5mm です。

FCP-40Pの基板は 0.5mm/1.0mm供用です。基板側に接点があります。
Flex 0.5mmは 1.0mm表示側に2×20ピンヘッダーを接続します。
ピン番号や向きに注意が必要です。

LCD Flex wireの接続:基板側に接点があり Flex wireの金属端子側を
基板側に向けて挿します。Flex wireの黒い部分が上になります。
注意:Flex wireの黒い部分を下に接続しますと導通されません。




.
Touch Calibration:タッチ キャリブレーションの実施。
🟢 Down Load:Touch Calibration。Touch_Calibration_16bitILI9488_S2mini.zip
DL後 pdf(_.pdf)を削除しzipを解凍し実施します。

指示に従いタッチします。 設定の値が表示されます。
void setup(){
  uint16_t calData[]={502,180,451,3731,3502,281,3650,3708};
  tft.setTouchCalibrate(calData);

.


.
LovyanGFX 設定:
16bit Bus: cfg.freq_write =30000000; 30MHzまで可能です。
Touch SPI:SPI2_HOST です。
Touch INT:cfg.pin_int = 3; は無くとも動作しますが設定しておきます。

//----------------------------------------------------------------------
// https://github.com/lovyan03/LovyanGFX/blob/master/examples/HowToUse/2_user_setting/2_user_setting.ino
//=====================================================================
class LGFX : public lgfx::LGFX_Device{
  lgfx::Panel_ILI9488  _panel_instance;
  lgfx::Bus_Parallel16 _bus_instance;//16bit Parallelのインスタンス(ESP32)
  lgfx::Touch_XPT2046  _touch_instance; // SPI

public:LGFX(void){         // バス制御の設定を行います。
  auto cfg = _bus_instance.config(); // バス設定用の構造体を取得します。
  // 16ビットパラレルバスの設定
  cfg.freq_write =30000000;// 送信クロック(最大20MHz,80MHzを整数割の値に丸める)
  cfg.pin_wr  = 18;        // WR を接続しているピン番号
  cfg.pin_rd  = 21;        // RD を接続しているピン番号
  cfg.pin_rs  = 17;        // RS(D/C)を接続しているピン番号
  cfg.pin_d0  = 34;        // D0 を接続しているピン番号
  cfg.pin_d1  = 33;        // D1 を接続しているピン番号
  cfg.pin_d2  = 36;        // D2 を接続しているピン番号
  cfg.pin_d3  = 35;        // D3 を接続しているピン番号
  cfg.pin_d4  = 38;        // D4 を接続しているピン番号
  cfg.pin_d5  = 37;        // D5 を接続しているピン番号
  cfg.pin_d6  = 40;        // D6 を接続しているピン番号
  cfg.pin_d7  = 39;        // D7 を接続しているピン番号
  cfg.pin_d8  = 13;        // D8 を接続しているピン番号
  cfg.pin_d9  = 14;        // D9 を接続しているピン番号
  cfg.pin_d10 = 10;        // D10を接続しているピン番号
  cfg.pin_d11 = 12;        // D11を接続しているピン番号
  cfg.pin_d12 =  8;        // D12を接続しているピン番号
  cfg.pin_d13 = 11;        // D13を接続しているピン番号
  cfg.pin_d14 =  6;        // D14を接続しているピン番号
  cfg.pin_d15 =  9;        // D15を接続しているピン番号
  _bus_instance.config(cfg);// 設定値をバスに反映します。
  _panel_instance.setBus(&_bus_instance); // バスをパネルにセットします。
  {// 表示パネル制御の設定
  auto cfg = _panel_instance.config(); // 表示パネル設定用の構造体を取得します。
  cfg.pin_cs       =   16; // CSが接続されているピン番号   (-1 = disable)
  cfg.pin_rst      =   -1; // RSTが接続されているピン番号  (-1 = disable)
  cfg.pin_busy     =   -1; // BUSYが接続されているピン番号 (-1 = disable)
  cfg.memory_width =  320; // ドライバICがサポートしている最大の幅
  cfg.memory_height=  480; // ドライバICがサポートしている最大の高さ
  cfg.panel_width  =  320; // 実際に表示可能な幅
  cfg.panel_height =  480; // 実際に表示可能な高さ
  cfg.offset_x     =    0; // パネルのX方向オフセット量
  cfg.offset_y     =    0; // パネルのY方向オフセット量
  cfg.offset_rotation = 0; // 回転方向の値のオフセット 0~7 (4~7は上下反転)
  cfg.dummy_read_pixel= 8; // ピクセル読出し前のダミーリードのビット数
  cfg.dummy_read_bits = 1; // ピクセル以外のデータ読出し前のダミーリードのビット数
  cfg.readable    =  true; // データ読出しが可能な場合 trueに設定
  cfg.invert      = false; // パネルの明暗が反転してしまう場合 trueに設定
  cfg.rgb_order   = false; // パネルの赤と青が入れ替わってしまう場合 trueに設定
  cfg.dlen_16bit  =  true; // データ長を16bit単位で送信するパネルの場合trueに設定
  cfg.bus_shared  = false; // SDカードとバス共有はtrueに設定
  _panel_instance.config(cfg);
  }
  {// タッチスクリーン制御の設定を行います。(必要なければ削除)
  auto cfg = _touch_instance.config();
  cfg.x_min      = 0;      // タッチスクリーンから得られる最小のX値(生の値)
  cfg.x_max      = 4095;   // タッチスクリーンから得られる最大のX値(生の値)
  cfg.y_min      = 0;      // タッチスクリーンから得られる最小のY値(生の値)
  cfg.y_max      = 4095;   // タッチスクリーンから得られる最大のY値(生の値)
  cfg.pin_int    = 3;      // INTが接続されているピン番号 : T_IRQ
  cfg.bus_shared = false;  // 画面と共通のバスを使用している場合 trueを設定
  cfg.offset_rotation = 0; // 表示とタッチの向きのが一致しない場合の調整 0~7の値で設定 2
  // SPI接続の場合
  cfg.spi_host = SPI2_HOST;// 使用するSPIを選択 (HSPI_HOST or VSPI_HOST)
  cfg.freq     = 1000000;  // SPIクロックを設定
  cfg.pin_sclk = 4;        // SCLKが接続されているピン番号 : T_CLK
  cfg.pin_mosi = 2;        // MOSIが接続されているピン番号 : T_DIN
  cfg.pin_miso = 1;        // MISOが接続されているピン番号 : T_DO
  cfg.pin_cs   = 5;        //   CSが接続されているピン番号 : T_CS
  _touch_instance.config(cfg);
  _panel_instance.setTouch(&_touch_instance);//タッチスクリーンをパネルにセット
  }
  setPanel(&_panel_instance); // 使用するパネルをセットします。
  }
};
LGFX tft; // 準備したクラスのインスタンスを作成します。
//=====================================================================

.
感想:
ケースを含めた低価格と高速化を目指しました。
単体のLCDを採用する場合は 付属回路が必要になり手間が増えます。
今回の方法により 他のDisplayも使用方法が容易になります。
Resistive TouchよりもCapasitive Touchの方が操作性が良いですが 価格が高くなります。
.
.


.
.
Raspberry Pi Case , S2 mini , LGFX , LovyanGFX , SPI2 , 16bit ,

Written by macsbug

5月 6, 2022 at 4:47 am

カテゴリー: ESP32