3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#include "TinyGPU/Emulation.h"
29#include "TinyGPU/Drivers/DisplayDriverDSI.h"
30#include "TinyGPU/Drivers/DisplayDriverQSPI.h"
31#include "TinyGPU/Drivers/DisplayDriverSPI.h"
32#include "TinyGPU/Input/TouchDriverArduino.h"
33#include "TinyGPU/Boards/LCDBoardsCommon.h"
34#include "esp_adc/adc_cali.h"
35#include "esp_adc/adc_cali_scheme.h"
36#include "esp_adc/adc_oneshot.h"
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83class LCDBoardESP32S3_2_8Display :
public LCDBoard {
88 bool begin() override {
89 pinMode(kPinBacklight, OUTPUT);
90 digitalWrite(kPinBacklight, HIGH);
92 SPI.begin(kPinSck, kPinMiso, kPinMosi, kPinCs);
93 if (!display_.begin())
return false;
94 display_.setInvertColor(
true);
95 display_.setSwapOutputBytes(
false);
97 Wire.begin(kPinTouchSda, kPinTouchScl);
98 return touch_.begin();
102 size_t width()
const override {
return 240; }
104 size_t height()
const override {
return 320; }
107 ILI9341Driver<RGB565>& display() override {
return display_; }
109 TouchDriver* touch() override {
return &touch_; }
111 const I2SPins& i2s()
const override {
return i2s_; }
113 const LEDPins& led()
const override {
return led_; }
115 int8_t backlightPin()
const override {
return kPinBacklight; }
118 static constexpr int8_t kPinCs = 10;
119 static constexpr int8_t kPinDc = 46;
120 static constexpr int8_t kPinSck = 12;
121 static constexpr int8_t kPinMosi = 11;
122 static constexpr int8_t kPinMiso = 13;
123 static constexpr int8_t kPinBacklight = 45;
124 static constexpr int8_t kPinTouchSda = 16;
125 static constexpr int8_t kPinTouchScl = 15;
126 static constexpr int8_t kPinTouchRst = 18;
133 ILI9341Driver<RGB565> display_{SPI,
137 ILI9341Driver<RGB565>::Rotation::kNone,
139 TouchDriverFT6236 touch_{Wire, kPinTouchRst, -1};
147using FBBA0125_002 = LCDBoardESP32S3_2_8Display;
148using ESP32S3HosyondLCD = LCDBoardESP32S3_2_8Display;
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175class LCDBoardGuitionESP32S3_4_3Display :
public LCDBoard {
179 bool begin() override {
180 pinMode(kPinBacklight, OUTPUT);
181 digitalWrite(kPinBacklight, HIGH);
183 if (!display_.begin())
return false;
185 Wire.begin(kPinTouchSda, kPinTouchScl);
186 return touch_.begin();
190 size_t width()
const override {
return 480; }
192 size_t height()
const override {
return 272; }
195 NV3041ADriver<RGB565>& display() override {
return display_; }
197 TouchDriver* touch() override {
return &touch_; }
199 const I2SPins& i2s()
const override {
return i2s_; }
201 const LEDPins& led()
const override {
return led_; }
203 int8_t backlightPin()
const override {
return kPinBacklight; }
206 static constexpr int8_t kPinCs = 45;
207 static constexpr int8_t kPinSclk = 47;
208 static constexpr int8_t kPinD0 = 21;
209 static constexpr int8_t kPinD1 = 48;
210 static constexpr int8_t kPinD2 = 40;
211 static constexpr int8_t kPinD3 = 39;
212 static constexpr int8_t kPinBacklight = 1;
213 static constexpr int8_t kPinTouchSda = 8;
214 static constexpr int8_t kPinTouchScl = 4;
215 static constexpr int8_t kPinTouchIrq = 3;
216 static constexpr int8_t kPinTouchRst = 38;
218 NV3041ADriver<RGB565> display_{kPinCs, kPinSclk, kPinD0,
219 kPinD1, kPinD2, kPinD3};
220 TouchDriverGT911 touch_{Wire, kPinTouchRst, kPinTouchIrq};
221 I2SPins i2s_{-1, 42, 2, 41,
226using JC4827W543C_I = LCDBoardGuitionESP32S3_4_3Display;
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256class LCDBoardGuitionESP32_LVGL_2_4Display :
public LCDBoard {
260 bool begin() override {
261 pinMode(kPinBacklight, OUTPUT);
262 digitalWrite(kPinBacklight, HIGH);
264 SPI.begin(kPinSck, kPinMiso, kPinMosi, kPinCs);
265 if (!display_.begin())
return false;
267 Wire.begin(kPinTouchSda, kPinTouchScl);
268 return touch_.begin();
272 size_t width()
const override {
return 240; }
274 size_t height()
const override {
return 320; }
277 ILI9341Driver<RGB565>& display() override {
return display_; }
279 TouchDriver* touch() override {
return &touch_; }
281 const I2SPins& i2s()
const override {
return i2s_; }
283 const LEDPins& led()
const override {
return led_; }
285 int8_t backlightPin()
const override {
return kPinBacklight; }
288 static constexpr int8_t kPinCs = 15;
289 static constexpr int8_t kPinDc = 2;
290 static constexpr int8_t kPinSck = 14;
291 static constexpr int8_t kPinMosi = 13;
292 static constexpr int8_t kPinMiso = 12;
293 static constexpr int8_t kPinBacklight = 27;
294 static constexpr int8_t kPinTouchSda = 33;
295 static constexpr int8_t kPinTouchScl = 32;
296 static constexpr int8_t kPinTouchIrq = 36;
298 ILI9341Driver<RGB565> display_{SPI, kPinCs, kPinDc, -1};
299 TouchDriverCST816S touch_{Wire, -1, kPinTouchIrq};
301 LEDPins led_{-1, 4, 16, 17,
305using ESP32_2432S028R = LCDBoardGuitionESP32_LVGL_2_4Display;
306using ESP32CheapYellowDisplay = LCDBoardGuitionESP32_LVGL_2_4Display;
315#ifdef TINYGPU_HAS_ESP_LCD_DSI
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
356class LCDBoardGuitionESP32H4_4_3Display :
public LCDBoard {
358 LCDBoardGuitionESP32H4_4_3Display() =
default;
360 ~LCDBoardGuitionESP32H4_4_3Display() {
362#if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
363 adc_cali_delete_scheme_curve_fitting(cali_handle_);
364#elif ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
365 adc_cali_delete_scheme_line_fitting(cali_handle_);
369 adc_oneshot_del_unit(adc_handle_);
377 bool begin() override {
378 pinMode(kPinLcdBacklight, OUTPUT);
379 digitalWrite(kPinLcdBacklight, HIGH);
381 if (!display_.begin())
return false;
384 Wire.begin(kPinSda, kPinScl);
386 if (!touch_.begin())
return false;
389 if (!setupWifi())
return false;
392 if (!SD_MMC.setPins(kPinSdClk, kPinSdCmd, kPinSdD0, kPinSdD1, kPinSdD2,
403 void setAmplifierActive(
bool active) {
404 pinMode(kPinAmpEnable, OUTPUT);
405 digitalWrite(kPinAmpEnable, active ? HIGH : LOW);
409 size_t width()
const override {
return kDisplayWidth; }
411 size_t height()
const override {
return kDisplayHeight; }
414 ST7701Driver<RGB565>& display() override {
return display_; }
416 TouchDriver* touch() override {
return &touch_; }
418 const I2SPins& i2s()
const override {
return i2s_; }
420 const LEDPins& led()
const override {
return led_; }
422 int8_t backlightPin()
const override {
return kPinLcdBacklight; }
425 int battery(
int battery_readings_ = 100) {
426 if (!adc_initialized_) {
429 if (!adc_handle_)
return 0;
433 for (
int i = 0; i < battery_readings_; ++i) {
434 if (adc_oneshot_read(adc_handle_, kAdcChannel, &raw_val) == ESP_OK) {
439 int avg_raw = raw_sum / battery_readings_;
442 adc_cali_raw_to_voltage(cali_handle_, avg_raw, &mv);
445 int clamped_mv = constrain(mv, kVcMinMv, kVcMaxMv);
446 return (clamped_mv - kVcMinMv) * 100 / (kVcMaxMv - kVcMinMv);
450 static constexpr int kPinI2sMclk = 13;
451 static constexpr int kPinI2sBck = 12;
452 static constexpr int kPinI2sWs = 10;
453 static constexpr int kPinI2sDout = 9;
454 static constexpr int kPinI2sDin = 48;
455 static constexpr int kPinScl = 8;
456 static constexpr int kPinSda = 7;
457 static constexpr int kPinAmpEnable = 11;
460 static constexpr int kPinSdClk = 43;
461 static constexpr int kPinSdCmd = 44;
462 static constexpr int kPinSdD0 = 39;
463 static constexpr int kPinSdD1 = 40;
464 static constexpr int kPinSdD2 = 41;
465 static constexpr int kPinSdD3 = 42;
468 static constexpr int kSdLdoChannel = 4;
471 static constexpr int kDisplayWidth = 480;
472 static constexpr int kDisplayHeight = 800;
476 static constexpr int8_t kPinLcdRst = 5;
477 static constexpr int8_t kPinLcdBacklight = 23;
478 static constexpr int8_t kDsiPhyLdoChan = 3;
479 static constexpr uint16_t kDsiPhyLdoMv = 2500;
482 static constexpr int8_t kPinTouchRst = 3;
483 static constexpr int8_t kPinTouchInt = -1;
486 static constexpr int kPinWifiSdioClk = 18;
487 static constexpr int kPinWifiSdioCmd = 19;
488 static constexpr int kPinWifiSdioD0 = 14;
489 static constexpr int kPinWifiSdioD1 = 15;
490 static constexpr int kPinWifiSdioD2 = 16;
491 static constexpr int kPinWifiSdioD3 = 17;
492 static constexpr int kPinWifiC6Reset = 54;
495 static constexpr adc_channel_t kAdcChannel = ADC_CHANNEL_4;
496 static constexpr adc_atten_t kAdcAtten = ADC_ATTEN_DB_12;
497 static constexpr int kVcMaxMv = 2450;
498 static constexpr int kVcMinMv = 2250;
500 ST7701Driver<RGB565> display_{kPinLcdRst, kPinLcdBacklight, kDisplayWidth,
501 kDisplayHeight, kDsiPhyLdoChan, kDsiPhyLdoMv};
502 TouchDriverGT911 touch_{Wire, kPinTouchRst, kPinTouchInt};
504 I2SPins i2s_{kPinI2sMclk, kPinI2sBck, kPinI2sWs, kPinI2sDout, kPinI2sDin};
507 adc_oneshot_unit_handle_t adc_handle_ =
nullptr;
508 adc_cali_handle_t cali_handle_ =
nullptr;
509 bool adc_initialized_ =
false;
512 return hostedSetPins(kPinWifiSdioClk, kPinWifiSdioCmd, kPinWifiSdioD0,
513 kPinWifiSdioD1, kPinWifiSdioD2, kPinWifiSdioD3,
518 adc_initialized_ =
true;
520 adc_oneshot_unit_init_cfg_t init_config = {
521 .unit_id = ADC_UNIT_2,
522 .ulp_mode = ADC_ULP_MODE_DISABLE,
524 if (adc_oneshot_new_unit(&init_config, &adc_handle_) != ESP_OK)
return;
526 adc_oneshot_chan_cfg_t config = {
528 .bitwidth = ADC_BITWIDTH_DEFAULT,
530 adc_oneshot_config_channel(adc_handle_, kAdcChannel, &config);
532#if ADC_CALI_SCHEME_CURVE_FITTING_SUPPORTED
533 adc_cali_curve_fitting_config_t cali_config = {
534 .unit_id = ADC_UNIT_2,
537 .bitwidth = ADC_BITWIDTH_DEFAULT,
539 if (adc_cali_create_scheme_curve_fitting(&cali_config, &cali_handle_) ==
545#if ADC_CALI_SCHEME_LINE_FITTING_SUPPORTED
546 adc_cali_line_fitting_config_t cali_config = {
547 .unit_id = ADC_UNIT_2,
549 .bitwidth = ADC_BITWIDTH_DEFAULT,
551 adc_cali_create_scheme_line_fitting(&cali_config, &cali_handle_);
556using JC4880P443C_I_W = LCDBoardGuitionESP32H4_4_3Display;