Skip to content

Commit fb154a8

Browse files
committed
Add initial Lilygo T-RGB-2.8 support
This is a round 2.8" IPS TFT with capacitive touch. Non conclusive list of known issues: * screen is distorted when WiFi throughput is high.
1 parent ef1ea17 commit fb154a8

File tree

2 files changed

+238
-2
lines changed

2 files changed

+238
-2
lines changed

src/drv/tft/tft_driver_arduinogfx.cpp

Lines changed: 146 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,132 @@
88
#include "Arduino_RGBPanel_mod.h"
99
#include "Arduino_RGB_Display_mod.h"
1010
#include "Arduino_PCA9535SWSPI.h"
11-
11+
#if defined(ST7701_TRGB_28)
12+
/* sequence from the T-RGB 2.8 SDK */
13+
const uint8_t st7701_type9_init_operations_trgb28[297] = {
14+
BEGIN_WRITE,
15+
16+
WRITE_COMMAND_8, 0xFF,
17+
WRITE_BYTES, 5, 0x77, 0x01, 0x00, 0x00, 0x13,
18+
19+
WRITE_C8_D8, 0xEF, 0x08,
20+
21+
WRITE_COMMAND_8, 0xFF,
22+
WRITE_BYTES, 5, 0x77, 0x01, 0x00, 0x00, 0x10,
23+
24+
WRITE_C8_D16, 0xC0, 0x3B, 0x00,
25+
WRITE_C8_D16, 0xC1, 0x10, 0x0C,
26+
WRITE_C8_D16, 0xC2, 0x07, 0x0A,
27+
WRITE_C8_D8, 0xC7, 0x00,
28+
WRITE_C8_D8, 0xC7, 0x10,
29+
WRITE_C8_D8, 0xCD, 0x08,
30+
31+
WRITE_COMMAND_8, 0xB0, // Positive Voltage Gamma Control
32+
WRITE_BYTES, 16,
33+
0x05, 0x12, 0x98, 0x0e, 0x0F,
34+
0x07, 0x07, 0x09, 0x09, 0x23,
35+
0x05, 0x52, 0x0F, 0x67, 0x2C,
36+
0x11,
37+
38+
39+
40+
WRITE_COMMAND_8, 0xB1, // Negative Voltage Gamma Control
41+
WRITE_BYTES, 16,
42+
0x0B, 0x11, 0x97, 0x0C, 0x12,
43+
0x06, 0x06, 0x08, 0x08, 0x22,
44+
0x03, 0x51, 0x11, 0x66, 0x2B,
45+
0x0F,
46+
47+
WRITE_COMMAND_8, 0xFF,
48+
WRITE_BYTES, 5, 0x77, 0x01, 0x00, 0x00, 0x11,
49+
50+
WRITE_C8_D8, 0xB0, 0x5D,
51+
WRITE_C8_D8, 0xB1, 0x2D,
52+
WRITE_C8_D8, 0xB2, 0x81,
53+
WRITE_C8_D8, 0xB3, 0x80,
54+
WRITE_C8_D8, 0xB5, 0x4E,
55+
WRITE_C8_D8, 0xB7, 0x85,
56+
WRITE_C8_D8, 0xB8, 0x20,
57+
WRITE_C8_D8, 0xC1, 0x78,
58+
WRITE_C8_D8, 0xC2, 0x78,
59+
60+
WRITE_C8_D8, 0xD0, 0x88,
61+
62+
WRITE_COMMAND_8, 0xE0,
63+
WRITE_BYTES, 4,
64+
0x00, 0x00, 0x02,
65+
66+
WRITE_COMMAND_8, 0xE1,
67+
WRITE_BYTES, 16,
68+
0x06, 0x30, 0x08, 0x30, 0x05,
69+
0x30, 0x07, 0x30, 0x00, 0x33,
70+
0x33,
71+
72+
WRITE_COMMAND_8, 0xE2,
73+
WRITE_BYTES, 16,
74+
0x11, 0x11, 0x33, 0x33, 0xf4,
75+
0x00, 0x00, 0x00, 0xf4, 0x00,
76+
0x00, 0x00,
77+
78+
WRITE_COMMAND_8, 0xE3,
79+
WRITE_BYTES, 4, 0x00, 0x00, 0x11, 0x11,
80+
81+
WRITE_C8_D16, 0xE4, 0x44, 0x44,
82+
83+
WRITE_COMMAND_8, 0xE5,
84+
WRITE_BYTES, 16,
85+
0x0d, 0xf5, 0x30, 0xf0, 0x0f,
86+
0xf7, 0x30, 0xf0, 0x09, 0xf1,
87+
0x30, 0xf0, 0x0b, 0xf3, 0x30, 0xf0,
88+
89+
WRITE_COMMAND_8, 0xE6,
90+
WRITE_BYTES, 4, 0x00, 0x00, 0x11, 0x11,
91+
92+
WRITE_C8_D16, 0xE7, 0x44, 0x44,
93+
94+
WRITE_COMMAND_8, 0xE8,
95+
WRITE_BYTES, 16,
96+
0x0c, 0xf4, 0x30, 0xf0,
97+
0x0e, 0xf6, 0x30, 0xf0,
98+
0x08, 0xf0, 0x30, 0xf0,
99+
0x0a, 0xf2, 0x30, 0xf0,
100+
101+
WRITE_C8_D8, 0xe9, 0x36,
102+
103+
WRITE_COMMAND_8, 0xEB,
104+
WRITE_BYTES, 7,
105+
0x00, 0x01, 0xe4, 0xe4,
106+
0x44, 0x88, 0x40,
107+
108+
WRITE_COMMAND_8, 0xED,
109+
WRITE_BYTES, 16,
110+
0xff, 0x10, 0xaf, 0x76,
111+
0x54, 0x2b, 0xcf, 0xff,
112+
0xff, 0xfc, 0xb2, 0x45,
113+
0x67, 0xfa, 0x01, 0xff,
114+
115+
WRITE_COMMAND_8, 0xEF,
116+
WRITE_BYTES, 6,
117+
0x08, 0x08, 0x08, 0x45,
118+
0x3f, 0x54,
119+
120+
WRITE_COMMAND_8, 0xFF,
121+
WRITE_BYTES, 5, 0x77, 0x01, 0x00, 0x00, 0x00,
122+
123+
WRITE_COMMAND_8, 0x11, // Sleep Out
124+
END_WRITE,
125+
126+
DELAY, 150,
127+
128+
BEGIN_WRITE,
129+
WRITE_C8_D8, 0x3A, 0x66,
130+
WRITE_C8_D8, 0x36, 0x08,
131+
WRITE_C8_D8, 0x35, 0x00,
132+
WRITE_COMMAND_8, 0x29, // Display On
133+
END_WRITE,
134+
DELAY, 20
135+
};
136+
#endif
12137
namespace dev {
13138

14139
void tftPinInfo(const __FlashStringHelper* pinfunction, int8_t pin)
@@ -106,6 +231,25 @@ void ArduinoGfx::init(int w, int h)
106231
st7701_4848S040_init_operations, sizeof(st7701_4848S040_init_operations));
107232
tft->begin(GFX_NOT_DEFINED); // Used for RFB displays
108233

234+
235+
#elif(TFT_WIDTH == 480) && (TFT_HEIGHT == 480) && defined(ST7701_DRIVER) && defined(ST7701_TRGB_28)
236+
/* SPI to the TFT is done over an I2C port expander */
237+
Arduino_DataBus *bus = new Arduino_XL9535SWSPI(8 /* SDA */, 48 /* SCL */, 2 /* XL PWD */, 3 /* XL CS */, 5 /* XL SCK */, 4 /* XL MOSI */);
238+
239+
Arduino_ESP32RGBPanel *rgbpanel = new Arduino_ESP32RGBPanel(
240+
45 /* DE */, 41 /* VSYNC */, 47 /* HSYNC */, 42 /* PCLK */,
241+
21 /* R0 */, 18 /* R1 */, 17 /* R2 */, 16 /* R3 */, 15 /* R4 */,
242+
14 /* G0 */, 13 /* G1 */, 12 /* G2 */, 11 /* G3 */, 10 /* G4 */, 9 /* G5 */,
243+
7 /* B0 */, 6 /* B1 */, 5 /* B2 */, 3 /* B3 */, 2 /* B4 */,
244+
1 /* hsync_polarity */, 50 /* hsync_front_porch */, 1 /* hsync_pulse_width */, 30 /* hsync_back_porch */,
245+
1 /* vsync_polarity */, 20 /* vsync_front_porch */, 1 /* vsync_pulse_width */, 30 /* vsync_back_porch */,
246+
1 /* pclk_active_neg */);
247+
248+
tft = new Arduino_RGB_Display(
249+
480 /* width */, 480 /* height */, rgbpanel, 0 /* rotation */, true /* auto_flush */,
250+
bus, GFX_NOT_DEFINED /* RST */, st7701_type9_init_operations_trgb28, sizeof(st7701_type9_init_operations_trgb28));
251+
tft->begin(GFX_NOT_DEFINED); // Used for RFB displays
252+
109253
#elif(TFT_WIDTH == 480) && (TFT_HEIGHT == 480) && defined(ST7701_DRIVER)
110254
/* More data bus class: https://github.com/moononournation/Arduino_GFX/wiki/Data-Bus-Class */
111255
Arduino_DataBus* bus = new Arduino_SWSPI(TFT_DC, TFT_CS, TFT_SCLK, TFT_MOSI, TFT_MISO);
@@ -494,4 +638,4 @@ uint32_t ArduinoGfx::get_tft_driver()
494638
} // namespace dev
495639

496640
dev::ArduinoGfx haspTft;
497-
#endif
641+
#endif
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
;***************************************************;
2+
; Lilygo T-RGB 2.8 ;
3+
; - Custom esp32-s3 board ;
4+
; - round st7701s TFT ;
5+
; - TFT SPI control is over I2C expander ;
6+
; - gt911 touch controller ;
7+
;***************************************************;
8+
9+
[esp32-s3-lilygo-t-rgb-28]
10+
extends = arduino_esp32s3_v2
11+
board = esp32-s3-devkitc-1
12+
board_build.arduino.memory_type = qio_opi
13+
14+
build_flags =
15+
-D HASP_MODEL="ESP32-S3 T-RGB-2.8"
16+
${arduino_esp32s3_v2.build_flags}
17+
${esp32s3.ps_ram}
18+
; -DARDUINO_USB_CDC_ON_BOOT
19+
; -DUSE_USB_CDC_CONSOLE
20+
21+
;region -- ArduinoGFX build options ------------------------
22+
-D HASP_USE_ARDUINOGFX=1
23+
-D ST7701_DRIVER=1
24+
-D ST7701_TRGB_28=1
25+
-D TFT_WIDTH=480
26+
-D TFT_HEIGHT=480
27+
; Bus Settings
28+
-D TFT_CS=-1
29+
-D TFT_SCLK=-1
30+
-D TFT_MOSI=-1
31+
-D TFT_DE=45
32+
-D TFT_VSYNC=41
33+
-D TFT_HSYNC=47
34+
-D TFT_PCLK=42
35+
-D TFT_R0=21
36+
-D TFT_R1=18
37+
-D TFT_R2=17
38+
-D TFT_R3=16
39+
-D TFT_R4=15
40+
-D TFT_G0=14
41+
-D TFT_G1=13
42+
-D TFT_G2=12
43+
-D TFT_G3=11
44+
-D TFT_G4=10
45+
-D TFT_G5=9
46+
-D TFT_B0=7
47+
-D TFT_B1=6
48+
-D TFT_B2=5
49+
-D TFT_B3=3
50+
-D TFT_B4=2
51+
-D TFT_DC=-1
52+
-D TFT_MISO=-1
53+
-D TFT_RST=-1
54+
-D TFT_BUSY=-1
55+
-D TFT_BCKL=46
56+
-D BACKLIGHT_FREQUENCY=100
57+
; Panel Settings
58+
; -D TFT_HSYNC_POLARITY=1
59+
-D TFT_HSYNC_FRONT_PORCH=10
60+
-D TFT_HSYNC_PULSE_WIDTH=8
61+
-D TFT_HSYNC_BACK_PORCH=50
62+
-D TFT_VSYNC_POLARITY=1
63+
-D TFT_VSYNC_FRONT_PORCH=10
64+
-D TFT_VSYNC_PULSE_WIDTH=8
65+
-D TFT_VSYNC_BACK_PORCH=20
66+
-D TFT_PCLK_ACTIVE_NEG=1
67+
-D TFT_PREFER_SPEED=12000000
68+
-D TFT_AUTO_FLUSH=1
69+
; Touch Settings
70+
-D TOUCH_DRIVER=0x911
71+
-D TOUCH_WIDTH=480
72+
-D TOUCH_HEIGHT=480
73+
-D TOUCH_SDA=8
74+
-D TOUCH_SCL=48
75+
-D TOUCH_RST=-1
76+
-D TOUCH_IRQ=-1
77+
-D I2C_TOUCH_FREQUENCY=400000
78+
-D I2C_TOUCH_ADDRESS=0x5D ; or 0x14
79+
-D I2C_TOUCH_PORT=1
80+
; USB GPIO - Only need to define these so that the pins do not
81+
; show up in the list of available GPIO
82+
-D USB_TXD=19
83+
-D USB_RXD=20
84+
;endregion
85+
86+
lib_deps =
87+
${arduino_esp32s3_v2.lib_deps}
88+
${arduinogfx.lib_deps}
89+
${goodix.lib_deps}
90+
91+
[env:esp32-s3-lilygo-t-rgb-28_16MB]
92+
extends = esp32-s3-lilygo-t-rgb-28, flash_16mb

0 commit comments

Comments
 (0)