|
| 1 | +// 2026-02-16 13:00 v2.2.1 |
| 2 | +// |
| 3 | +// LGFX_ESP32_S3_Touch_LCD_2.h |
| 4 | +// |
| 5 | +// LovyanGFX device configuration for Waveshare ESP32-S3-Touch-LCD-2. |
| 6 | +// Display: ST7789 240x320 IPS (SPI) | Touch: CST816S (I2C) |
| 7 | +// MCU: ESP32-S3 |
| 8 | +// |
| 9 | +// Compatible with both Arduino framework and ESP-IDF. |
| 10 | + |
| 11 | +#ifndef LGFX_ESP32_S3_TOUCH_LCD_2_H_ |
| 12 | +#define LGFX_ESP32_S3_TOUCH_LCD_2_H_ |
| 13 | + |
| 14 | +#include <LovyanGFX.hpp> |
| 15 | + |
| 16 | +class LGFX : public lgfx::LGFX_Device { |
| 17 | + lgfx::Panel_ST7789 panel_instance_; |
| 18 | + lgfx::Bus_SPI bus_instance_; |
| 19 | + lgfx::Light_PWM light_instance_; |
| 20 | + lgfx::Touch_CST816S touch_instance_; |
| 21 | + |
| 22 | + public: |
| 23 | + LGFX(void) { |
| 24 | + // --- SPI bus --- |
| 25 | + { |
| 26 | + auto cfg = bus_instance_.config(); |
| 27 | + cfg.spi_host = SPI3_HOST; |
| 28 | + cfg.spi_mode = 0; |
| 29 | + cfg.freq_write = 40000000; // 40 MHz write clock |
| 30 | + cfg.freq_read = 16000000; // 16 MHz read clock |
| 31 | + cfg.spi_3wire = true; |
| 32 | + cfg.use_lock = true; |
| 33 | + cfg.dma_channel = SPI_DMA_CH_AUTO; |
| 34 | + cfg.pin_sclk = 39; |
| 35 | + cfg.pin_mosi = 38; |
| 36 | + cfg.pin_miso = 40; |
| 37 | + cfg.pin_dc = 42; |
| 38 | + bus_instance_.config(cfg); |
| 39 | + panel_instance_.setBus(&bus_instance_); |
| 40 | + } |
| 41 | + |
| 42 | + // --- Display panel --- |
| 43 | + { |
| 44 | + auto cfg = panel_instance_.config(); |
| 45 | + cfg.pin_cs = 45; |
| 46 | + cfg.pin_rst = -1; // Not connected |
| 47 | + cfg.pin_busy = -1; // Not used |
| 48 | + cfg.panel_width = 240; |
| 49 | + cfg.panel_height = 320; |
| 50 | + cfg.offset_x = 0; |
| 51 | + cfg.offset_y = 0; |
| 52 | + cfg.offset_rotation = 0; |
| 53 | + cfg.dummy_read_pixel = 8; |
| 54 | + cfg.dummy_read_bits = 1; |
| 55 | + cfg.readable = true; |
| 56 | + cfg.invert = true; // Required for IPS panel |
| 57 | + cfg.rgb_order = false; // RGB (not BGR) |
| 58 | + cfg.dlen_16bit = false; |
| 59 | + cfg.bus_shared = true; |
| 60 | + panel_instance_.config(cfg); |
| 61 | + } |
| 62 | + |
| 63 | + // --- Backlight (PWM) --- |
| 64 | + { |
| 65 | + auto cfg = light_instance_.config(); |
| 66 | + cfg.pin_bl = 1; |
| 67 | + cfg.invert = false; // HIGH = bright |
| 68 | + cfg.freq = 44100; |
| 69 | + cfg.pwm_channel = 7; |
| 70 | + light_instance_.config(cfg); |
| 71 | + panel_instance_.setLight(&light_instance_); |
| 72 | + } |
| 73 | + |
| 74 | + // --- Touch (CST816S via I2C) --- |
| 75 | + { |
| 76 | + auto cfg = touch_instance_.config(); |
| 77 | + cfg.i2c_port = 0; |
| 78 | + cfg.i2c_addr = 0x15; // CST816S default address |
| 79 | + cfg.pin_sda = 48; |
| 80 | + cfg.pin_scl = 47; |
| 81 | + cfg.pin_int = -1; // Not connected |
| 82 | + cfg.pin_rst = -1; // Not connected |
| 83 | + cfg.freq = 400000; // 400 kHz I2C clock |
| 84 | + cfg.x_min = 0; |
| 85 | + cfg.x_max = 239; |
| 86 | + cfg.y_min = 0; |
| 87 | + cfg.y_max = 319; |
| 88 | + cfg.offset_rotation = 0; |
| 89 | + touch_instance_.config(cfg); |
| 90 | + panel_instance_.setTouch(&touch_instance_); |
| 91 | + } |
| 92 | + |
| 93 | + setPanel(&panel_instance_); |
| 94 | + } |
| 95 | +}; |
| 96 | + |
| 97 | +#endif // LGFX_ESP32_S3_TOUCH_LCD_2_H_ |
0 commit comments