43
43
#include < Arduino.h>
44
44
#include < ESP_Panel_Library.h>
45
45
46
+ /* The following default configurations are for the board 'jingcai: ESP32_4848S040C_I_Y_3, ST7701' */
46
47
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
47
48
// ////////////////// Please update the following configuration according to your LCD spec //////////////////////////////
48
49
// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
64
65
#define EXAMPLE_LCD_RGB_TIMING_VPW (10 )
65
66
#define EXAMPLE_LCD_RGB_TIMING_VBP (10 )
66
67
#define EXAMPLE_LCD_RGB_TIMING_VFP (10 )
67
- #define EXAMPLE_LCD_USE_EXTERNAL_CMD (0 )
68
+ #define EXAMPLE_LCD_RGB_BOUNCE_BUFFER_SIZE (EXAMPLE_LCD_WIDTH * 10 )
69
+ #define EXAMPLE_LCD_USE_EXTERNAL_CMD (1 )
68
70
#if EXAMPLE_LCD_USE_EXTERNAL_CMD
69
71
/* *
70
72
* LCD initialization commands.
@@ -86,10 +88,44 @@ const esp_lcd_panel_vendor_init_cmd_t lcd_init_cmd[] = {
86
88
// {0xC1, (uint8_t []){0x0D, 0x02}, 2, 0},
87
89
// {0x29, (uint8_t []){0x00}, 0, 120},
88
90
// // or
89
- // ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xFF, {0x77, 0x01, 0x00, 0x00, 0x10}),
90
- // ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC0, {0x3B, 0x00}),
91
- // ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM(0, 0xC1, {0x0D, 0x02}),
92
- // ESP_PANEL_LCD_CMD_WITH_NONE_PARAM(120, 0x29),
91
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xFF , {0x77 , 0x01 , 0x00 , 0x00 , 0x10 }),
92
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xC0 , {0x3B , 0x00 }),
93
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xC1 , {0x0D , 0x02 }),
94
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xC2 , {0x31 , 0x05 }),
95
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xCD , {0x00 }),
96
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB0 , {0x00 , 0x11 , 0x18 , 0x0E , 0x11 , 0x06 , 0x07 , 0x08 , 0x07 , 0x22 , 0x04 , 0x12 ,
97
+ 0x0F , 0xAA , 0x31 , 0x18 }),
98
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB1 , {0x00 , 0x11 , 0x19 , 0x0E , 0x12 , 0x07 , 0x08 , 0x08 , 0x08 , 0x22 , 0x04 , 0x11 ,
99
+ 0x11 , 0xA9 , 0x32 , 0x18 }),
100
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xFF , {0x77 , 0x01 , 0x00 , 0x00 , 0x11 }),
101
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB0 , {0x60 }),
102
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB1 , {0x32 }),
103
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB2 , {0x07 }),
104
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB3 , {0x80 }),
105
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB5 , {0x49 }),
106
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB7 , {0x85 }),
107
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xB8 , {0x21 }),
108
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xC1 , {0x78 }),
109
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xC2 , {0x78 }),
110
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE0 , {0x00 , 0x1B , 0x02 }),
111
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE1 , {0x08 , 0xA0 , 0x00 , 0x00 , 0x07 , 0xA0 , 0x00 , 0x00 , 0x00 , 0x44 , 0x44 }),
112
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE2 , {0x11 , 0x11 , 0x44 , 0x44 , 0xED , 0xA0 , 0x00 , 0x00 , 0xEC , 0xA0 , 0x00 , 0x00 }),
113
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE3 , {0x00 , 0x00 , 0x11 , 0x11 }),
114
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE4 , {0x44 , 0x44 }),
115
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE5 , {0x0A , 0xE9 , 0xD8 , 0xA0 , 0x0C , 0xEB , 0xD8 , 0xA0 , 0x0E , 0xED , 0xD8 , 0xA0 ,
116
+ 0x10 , 0xEF , 0xD8 , 0xA0 }),
117
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE6 , {0x00 , 0x00 , 0x11 , 0x11 }),
118
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE7 , {0x44 , 0x44 }),
119
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE8 , {0x09 , 0xE8 , 0xD8 , 0xA0 , 0x0B , 0xEA , 0xD8 , 0xA0 , 0x0D , 0xEC , 0xD8 , 0xA0 ,
120
+ 0x0F , 0xEE , 0xD8 , 0xA0 }),
121
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xEB , {0x02 , 0x00 , 0xE4 , 0xE4 , 0x88 , 0x00 , 0x40 }),
122
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xEC , {0x3C , 0x00 }),
123
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xED , {0xAB , 0x89 , 0x76 , 0x54 , 0x02 , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0xFF , 0x20 ,
124
+ 0x45 , 0x67 , 0x98 , 0xBA }),
125
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xFF , {0x77 , 0x01 , 0x00 , 0x00 , 0x13 }),
126
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xE5 , {0xE4 }),
127
+ ESP_PANEL_LCD_CMD_WITH_8BIT_PARAM (0 , 0xFF , {0x77 , 0x01 , 0x00 , 0x00 , 0x00 }),
128
+ ESP_PANEL_LCD_CMD_WITH_NONE_PARAM (120 , 0x11 ),
93
129
};
94
130
#endif
95
131
@@ -169,43 +205,43 @@ void setup()
169
205
170
206
#if EXAMPLE_LCD_PIN_NUM_BK_LIGHT >= 0
171
207
Serial.println (" Initialize backlight and turn it off" );
172
- ESP_PanelBacklight *backlight = new ESP_PanelBacklight (EXAMPLE_LCD_PIN_NUM_BK_LIGHT, EXAMPLE_LCD_BK_LIGHT_ON_LEVEL, true );
208
+ ESP_PanelBacklight *backlight = new ESP_PanelBacklight (
209
+ EXAMPLE_LCD_PIN_NUM_BK_LIGHT, EXAMPLE_LCD_BK_LIGHT_ON_LEVEL, true
210
+ );
173
211
backlight->begin ();
174
212
backlight->off ();
175
213
#endif
176
214
177
215
Serial.println (" Create 3-wire SPI + RGB LCD bus" );
178
216
#if EXAMPLE_LCD_RGB_DATA_WIDTH == 8
179
- ESP_PanelBus_RGB *lcd_bus = new ESP_PanelBus_RGB (EXAMPLE_LCD_WIDTH, EXAMPLE_LCD_HEIGHT,
180
- EXAMPLE_LCD_PIN_NUM_SPI_CS, EXAMPLE_LCD_PIN_NUM_SPI_SCK,
181
- EXAMPLE_LCD_PIN_NUM_SPI_SDA,
182
- EXAMPLE_LCD_PIN_NUM_RGB_DATA0, EXAMPLE_LCD_PIN_NUM_RGB_DATA1,
183
- EXAMPLE_LCD_PIN_NUM_RGB_DATA2, EXAMPLE_LCD_PIN_NUM_RGB_DATA3,
184
- EXAMPLE_LCD_PIN_NUM_RGB_DATA4, EXAMPLE_LCD_PIN_NUM_RGB_DATA5,
185
- EXAMPLE_LCD_PIN_NUM_RGB_DATA6, EXAMPLE_LCD_PIN_NUM_RGB_DATA7,
186
- EXAMPLE_LCD_PIN_NUM_RGB_HSYNC, EXAMPLE_LCD_PIN_NUM_RGB_VSYNC,
187
- EXAMPLE_LCD_PIN_NUM_RGB_PCLK, EXAMPLE_LCD_PIN_NUM_RGB_DE,
188
- EXAMPLE_LCD_PIN_NUM_RGB_DISP);
217
+ ESP_PanelBus_RGB *lcd_bus = new ESP_PanelBus_RGB (
218
+ EXAMPLE_LCD_WIDTH, EXAMPLE_LCD_HEIGHT,
219
+ EXAMPLE_LCD_PIN_NUM_SPI_CS, EXAMPLE_LCD_PIN_NUM_SPI_SCK, EXAMPLE_LCD_PIN_NUM_SPI_SDA,
220
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA0, EXAMPLE_LCD_PIN_NUM_RGB_DATA1, EXAMPLE_LCD_PIN_NUM_RGB_DATA2,
221
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA3, EXAMPLE_LCD_PIN_NUM_RGB_DATA4, EXAMPLE_LCD_PIN_NUM_RGB_DATA5,
222
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA6, EXAMPLE_LCD_PIN_NUM_RGB_DATA7, EXAMPLE_LCD_PIN_NUM_RGB_HSYNC,
223
+ EXAMPLE_LCD_PIN_NUM_RGB_VSYNC, EXAMPLE_LCD_PIN_NUM_RGB_PCLK, EXAMPLE_LCD_PIN_NUM_RGB_DE,
224
+ EXAMPLE_LCD_PIN_NUM_RGB_DISP
225
+ );
189
226
#elif EXAMPLE_LCD_RGB_DATA_WIDTH == 16
190
- ESP_PanelBus_RGB *lcd_bus = new ESP_PanelBus_RGB (EXAMPLE_LCD_WIDTH, EXAMPLE_LCD_HEIGHT,
191
- EXAMPLE_LCD_PIN_NUM_SPI_CS, EXAMPLE_LCD_PIN_NUM_SPI_SCK,
192
- EXAMPLE_LCD_PIN_NUM_SPI_SDA,
193
- EXAMPLE_LCD_PIN_NUM_RGB_DATA0, EXAMPLE_LCD_PIN_NUM_RGB_DATA1,
194
- EXAMPLE_LCD_PIN_NUM_RGB_DATA2, EXAMPLE_LCD_PIN_NUM_RGB_DATA3,
195
- EXAMPLE_LCD_PIN_NUM_RGB_DATA4, EXAMPLE_LCD_PIN_NUM_RGB_DATA5,
196
- EXAMPLE_LCD_PIN_NUM_RGB_DATA6, EXAMPLE_LCD_PIN_NUM_RGB_DATA7,
197
- EXAMPLE_LCD_PIN_NUM_RGB_DATA8, EXAMPLE_LCD_PIN_NUM_RGB_DATA9,
198
- EXAMPLE_LCD_PIN_NUM_RGB_DATA10, EXAMPLE_LCD_PIN_NUM_RGB_DATA11,
199
- EXAMPLE_LCD_PIN_NUM_RGB_DATA12, EXAMPLE_LCD_PIN_NUM_RGB_DATA13,
200
- EXAMPLE_LCD_PIN_NUM_RGB_DATA14, EXAMPLE_LCD_PIN_NUM_RGB_DATA15,
201
- EXAMPLE_LCD_PIN_NUM_RGB_HSYNC, EXAMPLE_LCD_PIN_NUM_RGB_VSYNC,
202
- EXAMPLE_LCD_PIN_NUM_RGB_PCLK, EXAMPLE_LCD_PIN_NUM_RGB_DE,
203
- EXAMPLE_LCD_PIN_NUM_RGB_DISP);
227
+ ESP_PanelBus_RGB *lcd_bus = new ESP_PanelBus_RGB (
228
+ EXAMPLE_LCD_WIDTH, EXAMPLE_LCD_HEIGHT,
229
+ EXAMPLE_LCD_PIN_NUM_SPI_CS, EXAMPLE_LCD_PIN_NUM_SPI_SCK, EXAMPLE_LCD_PIN_NUM_SPI_SDA,
230
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA0, EXAMPLE_LCD_PIN_NUM_RGB_DATA1, EXAMPLE_LCD_PIN_NUM_RGB_DATA2,
231
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA3, EXAMPLE_LCD_PIN_NUM_RGB_DATA4, EXAMPLE_LCD_PIN_NUM_RGB_DATA5,
232
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA6, EXAMPLE_LCD_PIN_NUM_RGB_DATA7, EXAMPLE_LCD_PIN_NUM_RGB_DATA8,
233
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA9, EXAMPLE_LCD_PIN_NUM_RGB_DATA10, EXAMPLE_LCD_PIN_NUM_RGB_DATA11,
234
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA12, EXAMPLE_LCD_PIN_NUM_RGB_DATA13, EXAMPLE_LCD_PIN_NUM_RGB_DATA14,
235
+ EXAMPLE_LCD_PIN_NUM_RGB_DATA15, EXAMPLE_LCD_PIN_NUM_RGB_HSYNC, EXAMPLE_LCD_PIN_NUM_RGB_VSYNC,
236
+ EXAMPLE_LCD_PIN_NUM_RGB_PCLK, EXAMPLE_LCD_PIN_NUM_RGB_DE, EXAMPLE_LCD_PIN_NUM_RGB_DISP
237
+ );
204
238
#endif
205
239
lcd_bus->configRgbTimingFreqHz (EXAMPLE_LCD_RGB_TIMING_FREQ_HZ);
206
- lcd_bus->configRgbTimingPorch (EXAMPLE_LCD_RGB_TIMING_HPW, EXAMPLE_LCD_RGB_TIMING_HBP, EXAMPLE_LCD_RGB_TIMING_HFP,
207
- EXAMPLE_LCD_RGB_TIMING_VPW, EXAMPLE_LCD_RGB_TIMING_VBP, EXAMPLE_LCD_RGB_TIMING_VFP);
208
- // lcd_bus->configRgbBounceBufferSize(EXAMPLE_LCD_WIDTH * 10); // Set bounce buffer to avoid screen drift
240
+ lcd_bus->configRgbTimingPorch (
241
+ EXAMPLE_LCD_RGB_TIMING_HPW, EXAMPLE_LCD_RGB_TIMING_HBP, EXAMPLE_LCD_RGB_TIMING_HFP,
242
+ EXAMPLE_LCD_RGB_TIMING_VPW, EXAMPLE_LCD_RGB_TIMING_VBP, EXAMPLE_LCD_RGB_TIMING_VFP
243
+ );
244
+ lcd_bus->configRgbBounceBufferSize (EXAMPLE_LCD_RGB_BOUNCE_BUFFER_SIZE); // Set bounce buffer to avoid screen drift
209
245
lcd_bus->begin ();
210
246
211
247
Serial.println (" Create LCD device" );
@@ -214,23 +250,23 @@ void setup()
214
250
// Configure external initialization commands, should called before `init()`
215
251
lcd->configVendorCommands (lcd_init_cmd, sizeof (lcd_init_cmd)/sizeof (lcd_init_cmd[0 ]));
216
252
#endif
217
- // lcd->configAutoReleaseBus (true); // If the "3-wire SPI" interface are sharing pins of the "RGB" interface to
218
- // save GPIOs, please enable this function to release the bus object and pins
219
- // (except CS signal). And then, the "3-wire SPI" interface cannot be used to
220
- // transmit commands any more.
221
- // lcd->configMirrorByCommand(true); // This function is conflict with `configAutoReleaseBus(true)`, please don't
222
- // enable them at the same time
253
+ // lcd->configEnableIO_Multiplex (true); // If the "3-wire SPI" interface are sharing pins of the "RGB" interface to
254
+ // save GPIOs, please enable this function to release the bus object and pins
255
+ // (except CS signal). And then, the "3-wire SPI" interface cannot be used to
256
+ // transmit commands any more.
257
+ // lcd->configMirrorByCommand(true); // This function is conflict with `configAutoReleaseBus(true)`, please don't
258
+ // enable them at the same time
223
259
lcd->init ();
224
- lcd->reset (); // If the `configAutoReleaseBus(true)` is called, here should not call `reset()`
225
- // to deinit the LCD device
260
+ lcd->reset ();
226
261
lcd->begin ();
227
- lcd->displayOn (); // This function is conflict with `configAutoReleaseBus(true)`, please don't
228
- // enable them at the same time
262
+ lcd->displayOn ();
229
263
#if EXAMPLE_ENABLE_PRINT_LCD_FPS
264
+ /* Attach a callback function which will be called when the Vsync signal is detected */
230
265
lcd->attachRefreshFinishCallback (onVsyncEndCallback, nullptr );
231
266
#endif
232
267
233
268
Serial.println (" Draw color bar from top left to bottom right, the order is B - G - R" );
269
+ /* Users can refer to the implementation within `colorBardTest()` to draw patterns on the LCD */
234
270
lcd->colorBarTest (EXAMPLE_LCD_WIDTH, EXAMPLE_LCD_HEIGHT);
235
271
236
272
#if EXAMPLE_LCD_PIN_NUM_BK_LIGHT >= 0
0 commit comments