Google Chat:---
+86-0755-88291180
sales@spotpear.com
dragon_manager@163.com
tech-support@spotpear.com
zhoujie@spotpear.com
WhatsApp:13246739196

The ESP32-S3-Touch-LCD-4.3C is a low-cost, high-performance development board from Waveshare. It integrates 2.4GHz WiFi, BLE5, large-capacity Flash and PSRAM, and features an onboard 4.3-inch capacitive touch LCD for smooth LVGL GUI operation. It is equipped with an ES8311 audio codec and an ES7210 quad-channel ADC, supporting voice capture and playback. It also provides rich interfaces like I2C and wide-voltage IOs, making it suitable for applications in IoT, mobile devices, and smart homes.
| SKU | Product |
|---|---|
| 33799 | ESP32-S3-Touch-LCD-4.3C (Without case) |
| 33630 | ESP32-S3-Touch-LCD-4.3C (With plastic case) |



The ESP32-S3-Touch-LCD-4.3C supports two development frameworks: Arduino IDE and ESP-IDF, providing developers with flexible choices. You can select the appropriate development tool based on project requirements and personal preference.
Each method has its advantages, and developers can select based on their needs and skill level. Arduino is simple to learn and easy to get started with, suitable for beginners and non-professionals; ESP-IDF provides more advanced development tools and stronger control capabilities, suitable for developers with professional backgrounds or those with higher performance requirements, and is more suitable for complex project development.
Arduino IDE is a convenient, flexible, and easy-to-use open-source electronics prototyping platform. It requires minimal foundational knowledge, allowing for rapid development after a short learning period. Arduino has a vast global community that provides a wealth of open-source code, project examples, tutorials, and rich libraries that encapsulate complex functionalities, enabling developers to implement various features quickly. You can refer to the Working with Arduino to complete the initial setup, and the tutorial also provides related demos for reference.
ESP-IDF (Espressif IoT Development Framework) is a professional development framework released by Espressif for its ESP series chips. It is developed based on the C language, including a compiler, debugger, and flashing tool, etc. It supports development via command line or an Integrated Development Environment (such as Visual Studio Code with the Espressif IDF plugin), which provides features like code navigation, project management, and debugging, etc. We recommend using VS Code for development. For the specific configuration process, please refer to the Working with ESP-IDF. The tutorial also provides relevant demos for reference.
Please refer to the tutorial Installing and Configuring Arduino IDE Tutorial to download and install the Arduino IDE and add ESP32 support.
To run the demo, you need to install the corresponding library.
You can click this link to download the demo package for the ESP32-S3-Touch-LCD-4.3C development board. The arduino\libraries directory within the package already includes all the library files required for this tutorial.
| Library/File Name | Description | Version | Installation Method |
|---|---|---|---|
| lvgl | LVGL graphics library | v8.4.0 | Install via library manager or manually |
| lv_conf.h | LVGL configuration file | —— | Install manually |
There are strong dependencies between versions of LVGL and its driver libraries. For example, a driver written for LVGL v8 may not be compatible with LVGL v9. To ensure stable reproduction of the examples, it is recommended to use the specific versions listed in the table above. Mixing different library versions may cause compilation failures or runtime exceptions.
Installation Steps:
Navigate to the downloaded demo package.
Copy all folders (such as lvgl and lv_conf.h) from the arduino\libraries directory to the Arduino libraries folder.
The path to the Arduino libraries folder is typically: c:\Users\<Username>\Documents\Arduino\libraries.
You can also locate it within the Arduino IDE via File > Preferences, by checking the "Sketchbook location". The library folder is the libraries folder under this path.
For other installation methods, please refer to: Arduino Library Management Tutorial.

The Arduino demos are located in the arduino/examples directory of the demo package.
| Demo | Basic Program Description | Dependency Library |
|---|---|---|
| 01_i2c | Test I2C functionality | - |
| 02_rtc | Test RTC functionality | - |
| 03_lcd | Test LCD functionality | - |
| 04_isolation_io | Test ISOLATION_IO functionality | - |
| 05_sd | Test TF card functionality | - |
| 06_touch | Test touch screen functionality | - |
| 07_display_bmp | Display images from TF card | - |
| 08_wifi_scan | Scan nearby Wi-Fi networks and display names | - |
| 09_wifi_sta | Test STA mode | - |
| 10_wifi_ap | Test AP mode | - |
| 11_speaker_microphone | Test microphone input and speaker playback | - |
| 12_lvgl_transplant | LVGL demo test | LVGL |
| 13_lvgl_btn | Draw a button to control GPIO output | LVGL |
| 14_lvgl_slider | Draw a slider to control backlight & GPIO, display battery voltage | LVGL |
| 15_udp_tcp_ntp | Implement UDP/TCP communication and NTP time sync | LVGL |
This example demonstrates how to periodically control the LCD backlight's on/off state via I2C, creating a flashing effect, using an I/O expansion chip.
setup():
loop():
This example demonstrates how to use the onboard PCF85063 RTC chip to implement a real-time clock display and alarm reminder functionality.
setup():
loop():
Open the serial port debugging assistant to send a message to the ESP32-S3-Touch-LCD-4.3C device, and the device will return the received message to the serial port debugging assistant

This example demonstrates how to initialize the LCD and display various graphics, text, and images.
setup():
Paint_NewImage():
Paint_DrawRectangle():
Paint_DrawString_EN():
This example verifies the isolation I/O functionality using the display.

setup():
setup() function initializes the serial port, I2C bus, I/O expansion chip, and LCD screen. It then tests the DI/DO functionality by controlling the DO pins and reading the state of the DI pins. Based on the test result, it displays green (test passed) or red (test failed) on the RGB LCD screen.Serial.begin(115200):
DEV_I2C_Init():
IO_EXTENSION_Init():
This example displays the mounting status of the TF card on the screen.
setup():
sd_mmc_init():
read_sd_capacity():
sd_mmc_unmount():
After successful flashing, the screen displays the TF card capacity. If no TF card is inserted, it displays* TF Card Fail!

This example demonstrates how to use 5-point touch.
setup():
touch_gt911_read_point():
waveshare_rgb_lcd_display():
After successful flashing, five-point touch functionality can be achieved.
07_display_bmp
This example demonstrates how to read and display BMP images from a TF card.
setup():
list_files(const char *base_path):
.bmp files, and stores their full paths.sd_mmc_init():
touch_gt911_init():
GUI_ReadBmp():
After successful flashing, tapping the left/right navigation arrow areas switches the display to the previous or next BMP image and updates the navigation arrow graphics.

This example demonstrates displaying the names of scanned Wi-Fi networks on the screen (Chinese SSIDs cannot be displayed).
setup():
wifi_scan_init():
wifi_scan():
After successful flashing, the scanned Wi-Fi names are displayed on the screen.

This example demonstrates using the screen to display the IP information after connecting to a hotspot.
setup():
wifi_sta_init(USER_SSID, USER_PASS):
After successful flashing, the right side of the screen updates to display the IP address, Wi-Fi name, etc., or a connection failure message after a successful or failed connection.

This example demonstrates using the screen to display the status of a hotspot, showing the MAC addresses of connected devices.
setup():
wifi_ap_init(USER_SSID, USER_PASS):
Initializes the Wi-Fi module and configures it into Access Point (AP) mode using the specified network name and password.
wifi_ap_StationNum():
wifi_ap_StationMac(station_mac, i):
After successful flashing, the Wi-Fi connection count and MAC addresses of devices are displayed.

This example demonstrates implementing recording and playback functionality via the touchscreen.
setup():
play_or_pause(bool play):
codec_init():
mic_i2s_read() / speaker_i2s_write():
After successful flashing, tapping the designated area switches between recording and playback operations, enabling both functions.
12_lvgl_transplant
This example demonstrates the porting of LVGL.
setup():
lv_demo_widgets():
After successful flashing, the LVGL sample program is displayed.

setup():
lvgl_btn():
btn_event_cb(lv_event_t * e):
After successful flashing, a button will be displayed in the center of the screen. Open the Serial Monitor, and when interacting with the button, the monitor will output "Button Pressed.”.

setup():
loop():
lvgl_slider():
slider_event_cb(lv_event_t * e):
bat_cb(lv_timer_t * timer):
After successful flashing, a slider control and battery information are displayed. The brightness of the image can be controlled by moving the slider component.

setup():
ui_init() to load the user interface and creates the wifi_connect_task task to handle background network connection and time synchronization.loop():
lvgl_port_lock to ensure thread-safe updating of the time display label on the screen.wifi_connect_task():
After successful flashing, the screen displays system initialization information. After a successful network connection, it will retrieve and continuously update the display with the current date and time via NTP.

The following instructions focus on Windows 10/11. For macOS / Linux, please refer to the official Espressif guide: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html
Install Visual Studio Code: https://code.visualstudio.com/
Install the ESP-IDF extension in VS Code (open Extensions view with Ctrl+Shift+X, search for ESP-IDF and install).
After installation, an Espressif icon will appear in the sidebar. Open it and select Configure ESP-IDF Extension to enter the configuration wizard.
The Express configuration is recommended. Choose as needed:
Click Install to begin the automatic download and installation of ESP-IDF, the toolchain, and the creation of a Python virtual environment. Wait for the installation completion prompt.
If installation fails or a reinstall is needed, you can try deleting the C:\Users\%Username%\esp and C:\Users\%Username%\.espressif folders and then retry.
The ESP-IDF demo package is located in examples/esp-idf.
Below is the purpose, key points, and operation effect for each example (for quick start).
| Demo | Basic Program Description | Dependency Library |
|---|---|---|
| 01_i2c | Uses I2C to control an I/O expansion chip, periodically switching the LCD backlight on and off to create a flashing effect | - |
| 02_rtc | Uses the onboard RTC chip to implement real-time clock display and alarm reminder functionality | - |
| 03_lcd | Initializes the LCD and displays various graphics, text, and images | - |
| 04_isolation_io | Verifies the isolation I/O functionality via the display | - |
| 05_sd | Displays the TF card mounting status on the screen | - |
| 06_touch | Demonstrates how to use 5-point touch | - |
| 07_display_bmp | Shows how to read and display BMP images from a TF card. | - |
| 08_wifi_scan | Scans nearby Wi-Fi networks and displays the SSID list on the screen | - |
| 09_wifi_sta | Connects to an AP in STA mode and displays IP information | - |
| 10_wifi_ap | Uses the screen to display hotspot status, showing the MAC addresses of connected devices | - |
| 11_speaker_microphone | Recording and playback example (codec, I2S) | - |
| 12_lvgl_transplant | Ports LVGL and runs the official demo | LVGL |
| 13_lvgl_codec | Example combining LVGL and audio | LVGL |
| 14_tcp_udp_ntp | Demonstrates TCP/UDP communication and NTP time synchronization | LVGL |
This example demonstrates how to periodically control the LCD backlight's on/off state via I2C, creating a flashing effect, using an I/O expansion chip.
i2c_config_t structure, and calls i2c_driver_install to register the driver.i2c_master_write_to_device, modifying the level state of specific pins using bitwise operations.This example demonstrates time reading/writing and alarm functionality of the onboard PCF85063.
The serial port or screen displays the current time; outputs a prompt message when the alarm triggers.

This example demonstrates LCD initialization and basic drawing processes, verifying the RGB LCD display link and frame buffer refresh.
esp_lcd_new_rgb_panel to create a panel handle, configuring RGB interface timing parameters to match the 4.3inch screen's resolution.MALLOC_CAP_SPIRAM flag, addressing the high memory footprint issue for high-resolution displays on SRAM.This example verifies the isolation I/O functionality.

This example demonstrates TF card mounting, filesystem access, and displays the mounting status and basic information on the screen.
fopen).The screen indicates successful/failed mounting and displays card capacity, file list, or test file read/write results.

This example demonstrates the touch controller driver and 5 5-point touch reading, verifying the mapping between touch coordinates and screen coordinates.
After successful flashing, 5-point touch reading is demonstrated, and circles are drawn in real-time based on the touch point coordinates.
07_display_bmp
his example reads BMP files from a TF card and displays them on the screen, verifying the file reading, decoding, and display refresh pipeline.
BMP images from the TF card are displayed on the screen; the serial port outputs image information and loading time.

This example scans for nearby Wi‑Fi hotspots and displays information such as SSID, RSSI, and encryption type on the screen.
true or false.This example connects to a specified AP in STA mode and displays the connection status and IP information on the screen.
The screen displays a successful connection and the assigned IP address; prompts reconnection status upon disconnection.

This example enables a SoftAP hotspot and displays information about connected devices (e.g., MAC address, connection count) on the screen.

This example demonstrates the audio capture and playback pipeline, including microphone recording and speaker playback (Codec + I2S).
Playback audio can be heard; the serial port outputs recording/playback status and audio parameters.
12_lvgl_transplant
This example completes the basic LVGL port, verifies the display driver, touch input, and LVGL refresh pipeline, and runs the official demo.

This example combines the LVGL UI with audio functionality, demonstrating interactions such as UI control of volume/playback status.
The screen displays an audio control interface that can be operated; playback status and volume changes take effect in real-time.

This example demonstrates basic network communication (TCP/UDP) and the NTP time synchronization process, verifying the network stack and time sync functionality.
localtime.The serial port outputs connection information; basic data interaction is possible using a network debug assistant set to the corresponding IP address and port number; the screen displays network status and the current time.

A brief explanation of the usage and functionality of each program.
For the image display and music playback tests, you need to copy the two folders from .\firmware\sdcard to the TF card. The TF card's file system must be formatted as FAT32; otherwise, clicking the icon will restart the system.
This example directly runs a squareline demo.





This example tests if the touchscreen is functioning properly.

This example reads and displays image files from the TF card.

This example plays music from the TF card. The volume can be adjusted using the speaker button on the right.

This example runs XiaoZhi AI. After configuring XiaoZhi, you can say "Return to the application interface" to go back to the desktop.

This example contains several widgets. Here is a brief introduction:
This widget demonstrates Wi-Fi functionality. The specific operations are as follows:

These widgets demonstrate sound adjustment and brightness adjustment.

This widget displays the CPU temperature and current battery voltage.

This widget demonstrates the isolation I/O test. You need to connect DI0 to DO0 and DI1 to DO1.

This example tests if the microphone is working properly by capturing sound and displaying it via animation.

If you have flashed other programs and cannot test the factory firmware, you can restore the factory settings using the method below:
You need to know how to use Flash Tool. If not, you can click this link to learn.
Add .\firmware\ESP32-S3-Touch-LCD-4.3C-Test.bin to the Flash Tool. The flashing address is 0x00.
Connect the development board to the computer. Check the COM port via Device Manager, then select the corresponding COM port in the Flash Tool and click Start. After the flashing is successful, press the RESET button.

①. Add the firmware file.
②. Enter the flashing address.
③. Select the development board's COM port.
④. Start flashing.
⑤. Flashing completed.
Development Board Design File
Official ESP32-S3 Chip Manuals
Datasheets
Monday-Friday (9:30-6:30) Saturday (9:30-5:30)
Email: services01@spotpear.com