Skip to content

Commit 4299835

Browse files
authored
Added support for Waveshare ESP32-S3-Touch-LCD-2 (#826)
1 parent 3026d37 commit 4299835

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
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

Comments
 (0)