3. ESP-IDF
First, in this section, we need to configure the IDF development environment. You can follow the chapters below for installation.
After installing VSCode and IDF as per the tutorial, We’re ready to start configuring the project.
Project Configuration
First, you need to configure the COM port and chip model (using esp32c6 as an example).
Project Structure
- Project-level configuration (root directory):
- CMakeLists.txt: The core configuration file for project building.
Specifies the target chip platform (e.g., ESP32/ESP32-S3)
Manages project component dependencies
Configures global compile parameters (optimization levels, macros, etc.)
Sets up the cross-compilation toolchain
- Project configuration system:
- sdkconfig: Instantiated file for project build configuration
Stores all configuration options from menuconfig
Includes critical parameters such as chip model, function modules, switches, etc.
Auto-generated, recommended to be modified via idf.py menuconfig
- Application core (main directory):
- main.c: System entry file
Must implement the app_main() entry function
Plays a similar role to main()
The first code executed after system startup
- CMakeLists.txt: Component-level build configuration
Specifies the collection of source files
Sets header file search paths
Defines component dependencies
- Storage management:
- partitions.csv: Flash storage layout definition
Configures partition types, start addresses, and sizes
Supports OTA upgrade scheme design
User data areas can be customized
- Component management system (components directory):
Built-in components: such as drivers, protocol stacks, etc. Third-party components: e.g., LVGL graphics library Custom components: project-specific functional modules
- Each component follows a standard structure including:
Build configuration file (CMakeLists.txt)
Configuration options (Kconfig)
Source code implementation (src/)
Start Compiling and Flashing
First, open VSCode and select the project example folder.
Select the example provided under ESP-IDF and click to select the folder (in the path where you downloaded the code).
Connect the device, select the correct COM port and model, and click the flame icon below to compile and flash it.
ESP32-C6-LCD-1.47
This example program tests onboard device functions, integrating both the LED and LVGL libraries. After flashing, the board’s LED will display random colors, and the screen will show SD card capacity, flash size, run time, and the number of nearby Bluetooth and WiFi devices.
Hardware Connection
Insert the SD card into the development board and connect the board to your computer.
Code Analysis
Wireless_Init(); // Initialize WiFi/BLE wireless communication module
Flash_Searching(); // Test and print flash size information
RGB_Init(); // Initialize RGB LED driver (WS2812 programmable LED)
RGB_Example(); // Start the default rainbow gradient effect
spi_bus_init(); // Initialize SPI bus (for LCD and SD card communication)
// Initialize LCD hardware
st7789_config_t lcd_config = st7789_get_default_config(); // Get default config
lcd_device = st7789_create(&lcd_config); // Create LCD device object
st7789_init(lcd_device); // Initialize LCD hardware
st7789_backlight_set(lcd_device, 50); // Set backlight brightness to 50%
SD_Init(); // Initialize SD card (SPI mode)
// Initialize LVGL
lvgl_config_t lvgl_config = lvgl_get_default_config(lcd_device); // Get default LVGL config (LCD device required)
lvgl_driver = lvgl_driver_create(&lvgl_config); // Create LVGL driver object
lvgl_driver_init(lvgl_driver); // Initialize LVGL (alloc buffer, register display driver, start timer)
Lvgl_Example1(); // Load custom LVGL UI example (displays system information)
// Main loop
while (1) {
lvgl_driver_task_handler(lvgl_driver); // Run LVGL task handler (UI refresh, animations, events)
vTaskDelay(pdMS_TO_TICKS(10)); // Delay 10ms (recommended interval)
}
Run Result