A comprehensive development environment for the ESP32-S3 Touch LCD 1.85" circular display (360x360 pixels) with touch input, WiFi, Bluetooth, audio, and sensor capabilities.
- Display: 1.85" Circular TFT LCD (360x360) - ST77916 Driver
- Touch: Capacitive touch sensor - CST816 Controller
- MCU: ESP32-S3 (Dual-core Xtensa LX7, WiFi, Bluetooth)
- Audio: PCM5101A DAC + MEMS Microphone (MSM)
- Storage: SD Card slot + 8MB Flash (NVS + LittleFS)
- Sensors: Battery management, RTC (PCF85063)
- I/O: GPIO expander (TCA9554PWR)
- β WiFi Manager with flash-based password storage
- β LVGL UI Framework with tabbed interface
- β Audio Playback (MP3, WAV via I2S)
- β Touch Input with gesture support
- β Persistent Storage (Preferences/NVS + LittleFS)
- β Real-Time Clock with time synchronization
- β Battery Monitoring
- β Wireless Communication (WiFi + Bluetooth)
ESP32BOX/
βββ DEMO/
β βββ Arduino/ # Arduino IDE Projects
β β βββ examples/
β β β βββ LVGL_Arduino/ # Main Arduino Project β
β β β βββ docs/ # π Complete Documentation
β β β βββ *.cpp/h # Source files
β β β βββ LVGL_Arduino.ino # Main sketch
β β βββ libraries/ # Required libraries
β β βββ lvgl/ # LVGL v8.3.0
β β βββ ESP32-audioI2S-master/ # Audio library
β β
β βββ ESP-IDF/ # ESP-IDF Projects
β β βββ ESP32-S3-Touch-LCD-1.85C-Test/
β β
β βββ Firmware/ # Pre-built firmware binaries
β β βββ Factory firmware/
β β βββ Phone To DLNA/
β β
β βββ ReadMe.txt # Original manufacturer documentation
β
βββ README.md # This file
Complete guide for building custom user interface tabs
2,100+ lines covering:
- Tab creation step-by-step tutorial
- All LVGL widgets (buttons, sliders, charts, arcs, keyboards, etc.)
- Grid layout system and positioning
- Event handling and animations
- Advanced widgets (charts, gauges, message boxes)
- Colors, styles, and symbols
- Best practices and debugging
Perfect for: Creating custom UI screens on the circular display
πΎ Flash Storage Guide
Complete guide for ESP32 non-volatile storage
846 lines covering:
- Preferences Library (NVS): Key-value storage with examples
- LittleFS: Modern filesystem for ESP32
- WiFi password storage implementation
- Settings persistence patterns
- Best practices and limitations
Perfect for: Saving settings, WiFi credentials, user preferences
Validation and debugging guide for flash storage
Quick reference for:
- Expected Serial Monitor output
- Verification steps
- Common issues and solutions
Complete guide for SD card interface and audio playback
600+ lines covering:
- SD Card Interface: Hardware specs, file operations, card management
- Audio Playback: PCM5101A DAC, supported formats (MP3, WAV, AAC, FLAC, OGG, OPUS)
- Volume Control: 0-21 levels, optimal settings
- Playback Functions: Play, pause, resume, duration, elapsed time
- Complete Examples: Music player, playlist, progress monitor, UI integration
- Best Practices: SD handling, audio optimization, troubleshooting
Perfect for: Music players, audio feedback, sound effects, voice playback
Tested and Working: Audio playback confirmed operational! πβ
π Documentation Index
Complete documentation hub with quick start guides and cross-references
-
Install Arduino IDE (version 2.0+)
-
Install ESP32 Board Support:
- Go to: File β Preferences
- Add to "Additional Board Manager URLs":
https://espressif.github.io/arduino-esp32/package_esp32_index.json - Go to: Tools β Board β Boards Manager
- Search for "esp32" and install "esp32 by Espressif Systems"
-
Open the Project:
File β Open β DEMO/Arduino/examples/LVGL_Arduino/LVGL_Arduino.ino -
Configure Board:
- Board: "ESP32S3 Dev Module"
- USB CDC On Boot: "Enabled"
- Flash Size: "8MB"
- Partition Scheme: "Default 4MB with spiffs"
- Upload Speed: "921600"
-
Install Required Libraries: The project includes libraries in
DEMO/Arduino/libraries/:- LVGL v8.3.0
- ESP32-audioI2S
Copy these to your Arduino libraries folder or add to library path.
-
Configure WiFi (Optional):
- Edit
WiFi_Config.hor let the system use flash storage - Default passwords are stored in flash on first boot
- Edit
-
Compile and Upload:
- Connect your ESP32-S3 device via USB
- Click Upload button
-
Monitor Serial Output:
- Open Serial Monitor (115200 baud)
- Watch for WiFi connection and system initialization
-
Install ESP-IDF (version 4.4+)
-
Open Project:
cd DEMO/ESP-IDF/ESP32-S3-Touch-LCD-1.85C-Test -
Configure:
idf.py menuconfig
-
Build and Flash:
idf.py build idf.py flash monitor
Flash pre-compiled binaries using flash_download_tool_3.9.5:
- Download the tool from Espressif
- Select firmware from
DEMO/Firmware/Factory firmware/ - Set flash address to
0x00 - Check the checkbox and click "START"
Files: WiFi_Manager.cpp/h
Features:
- Priority-based network scanning (Hot1 β AviRedmi β others)
- Flash-based password storage (encrypted NVS)
- Automatic reconnection
- Signal strength monitoring
See: Flash Storage Guide for implementation details
Files: LVGL_Example.cpp/h, LVGL_Music.cpp/h
Features:
- Tabbed interface with swipe gestures
- Custom widgets and layouts
- Grid-based positioning
- Event-driven architecture
See: LVGL Tab Design Guide for creating custom tabs
Files: Audio_PCM5101.cpp/h, MIC_MSM.cpp/h
Features:
- I2S audio output via PCM5101A DAC
- MP3/WAV playback via ESP32-audioI2S library
- MEMS microphone input
- Volume control
Files: Touch_CST816.cpp/h
Features:
- Single-point capacitive touch
- Gesture detection
- LVGL integration
// 1. Declare function in LVGL_Example.cpp
static void MyTab_create(lv_obj_t * parent);
// 2. Add tab in Lvgl_Example1()
lv_obj_t * t_new = lv_tabview_add_tab(tv, "MyTab");
MyTab_create(t_new);
// 3. Implement function
static void MyTab_create(lv_obj_t * parent) {
lv_obj_t * panel = lv_obj_create(parent);
// Add your widgets here
}Full details: LVGL Tab Design Guide
#include <Preferences.h>
#include <nvs_flash.h>
Preferences preferences;
void setup() {
// Initialize NVS
nvs_flash_init();
// Save data
preferences.begin("settings", false);
preferences.putInt("brightness", 80);
preferences.putString("name", "MyDevice");
preferences.end();
// Load data
preferences.begin("settings", true);
int brightness = preferences.getInt("brightness", 50);
String name = preferences.getString("name", "Default");
preferences.end();
}Full details: Flash Storage Guide
- β WiFi connectivity with priority networks
- β Flash-based password storage (NVS)
- β LVGL UI with 2+ tabs (Onboard, Music)
- β Touch input integration
- β Audio playback support
- β Battery monitoring
- β RTC integration
- β SD card support
- Oct 5, 2025: Added comprehensive documentation (2,100+ lines)
- Oct 5, 2025: Implemented flash storage for WiFi passwords
- Oct 5, 2025: Fixed NVS initialization for Preferences library
- Oct 5, 2025: Organized documentation into docs/ folder
| Component | Pin | Description |
|---|---|---|
| Display | SPI | ST77916 driver |
| Touch | I2C | CST816 controller |
| Audio Out | I2S | PCM5101A DAC |
| Microphone | I2S | MEMS MSM |
| SD Card | SPI | Storage expansion |
| RTC | I2C | PCF85063 |
| GPIO Exp | I2C | TCA9554PWR |
| Battery | ADC | Voltage monitoring |
Detailed pinouts: See source files in DEMO/Arduino/examples/LVGL_Arduino/
- Ensure ESP32 board support is installed
- Verify LVGL library is in correct location
- Check
lv_conf.his present in project folder
- Check Serial Monitor for error messages
- Verify password in flash storage
- Signal strength must be adequate
- See
WiFi_Manager.cppfor debugging output
- Ensure
nvs_flash_init()is called before Preferences - Check
preferences.begin()return value - NVS partition must exist in partition table
- See Flash Storage Guide
- Verify SPI connections
- Check display initialization in
Display_ST77916.cpp - LVGL buffer size in
lv_conf.h
- LVGL v8.3.0 - Graphics library
- ESP32-audioI2S - Audio playback
- WiFi.h
- Preferences.h
- nvs_flash.h
- SPI.h
- Wire.h (I2C)
- SD.h
To add or improve documentation:
- Place
.mdfiles inDEMO/Arduino/examples/LVGL_Arduino/docs/ - Update the Documentation Index
- Follow existing formatting conventions
- Include practical code examples
- Test all code on hardware before documenting
This project contains multiple components with various licenses:
- LVGL: MIT License
- ESP32-audioI2S: GPL-3.0
- ESP32 Arduino Core: LGPL-2.1
- Project-specific code: Check individual file headers
- LVGL Documentation: https://docs.lvgl.io/8.3/
- ESP32-S3 Datasheet: https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf
- ESP32 Arduino Core: https://github.com/espressif/arduino-esp32
- ESP-IDF Documentation: https://docs.espressif.com/projects/esp-idf/
- LVGL Forum: https://forum.lvgl.io/
For hardware-specific questions, refer to the manufacturer's documentation.
For software development:
- Check the Documentation
- Review working examples in source files
- Check Serial Monitor output for debugging info
- See LVGL forum for UI-related questions
- π Complete Documentation Hub
- π¨ UI Development Guide
- πΎ Flash Storage Guide
- π§ͺ Testing Guide
- π» Main Arduino Project
ESP32-S3 Touch LCD 1.85" Development Project - Making circular displays beautiful! π¨β¨