
ESP32-C6-Touch-LCD-1.83 是一款微雪 (Waveshare) 设计的低成本,高性能的微控制器开发板。它采用紧凑的板型设计,板载了 1.83 英寸电容 LCD 屏、锂电池充电芯片、六轴传感器(三轴加速度计与三轴陀螺仪)、RTC 等外设,便于开发者快速进行产品原型开发和嵌入式应用。

SPI 通信协议:

注:此处的 SPI 接口专为屏幕显示设计,因此省略了从机到主机的数据线 (MISO)。
RESX 为复位,模块上电时拉低,通常情况下置 1;
CSX 为从机片选, 仅当 CS 为低电平时,芯片才会被使能。
D/CX 为芯片的数据/命令控制引脚,当 DC = 0 时写命令,当 DC = 1 时写数据
SDA 为传输的数据,即 RGB 数据;
SCL 为 SPI 通信时钟。
对于 SPI 通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性(CPOL)的组合:
CPHA 的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当 CPHA = 0,在第一个跳变沿进行数据采集;
CPOL 的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。
从图中可以看出,当 SCL 第一个下降沿时开始传输数据,一个时钟周期传输 1 bit 数据,使用 SPI0,按位传输,高位在前,低位在后。
本款触摸屏搭载 CST816D 自电容触控芯片,支持标准 I2C 通讯协议,通信速率可配置为 10Khz~400Khz。
在使用 ESP32-C6-Touch-LCD-1.83 板上预留的 GPIO 端子时需注意接线颜色和对应功能,避免接线惯性导致烧坏开发板


请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。
要运行示例,需要安装对应的库。示例代码使用 GFX Library for Arduino 库驱动 ST7789 显示屏 ,并使用 Arduino_DriveBus 库驱动 CST816 触摸芯片。
可从 此链接 的 Arduino 目录中,下载 ESP32-C6-Touch-LCD-1.83 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。
| 库或文件名称 | 说明 | 版本 | 安装方式 |
|---|---|---|---|
| GFX Library for Arduino | ST7789 显示驱动图形库 | v1.6.0 | 通过库管理器或手动安装 |
| SensorLib | PCF85063、QMI8658 传感器驱动库 | v0.3.1 | 通过库管理器或手动安装 |
| XPowersLib | AXP2101驱动库 | v0.3.0 | 通过库管理器或手动安装 |
| lvgl | lvgl显示显示框架 | v8.4.0 | 通过库管理器或手动安装 |
| Arduino_DriveBus | I2C,触摸驱动库 | v1.0.1 | 手动安装 |
LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。
安装步骤:
下载 示例程序包。
将其 Arduino\libraries 目录下的所有文件夹(Arduino_DriveBus、GFX_Library_for_Arduino 等)复制到 Arduino 的库文件夹中。
Arduino 库文件夹的路径通常是:c:\Users\<用户名>\Documents\Arduino\libraries。
也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的 libraries 文件夹。
其他安装方式请参考:Arduino 库管理教程。
ESP32-C6-Touch-LCD-1.83 需要选择及配置开发板。

printf() 函数可直接使用;
若要使用 Serial.println() 函数,需要额外配置:在 IDE 工具菜单中启用"USB CDC On Boot"选项,或在代码中声明 HWCDC 对象处理 USB 串口通信。
Arduino 示例程序位于 示例程序包 的 Arduino/examples 目录中。
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_sd_test | 展示基本的挂载TF卡过程,读写文件测试 | |
| 02_audio_out | 播放MP3音频 | |
| 03_axp2101_example | 电源管理芯片AXP2101测试 | XPowersLib |
| 04_qmi8658_example | IMU qmi8658测试 | SensorLib |
| 05_pcf85063_example | RTC实时时钟PCF85063测试 | SensorLib |
| 06_gfx_helloworld | 一个简单的 ST7789 屏幕驱动示例 | GFX_Library_for_Arduino |
| 07_LVGL_Arduino | lvgl8.4示例程序 | SArduino_DriveBus,GFX_Library_for_Arduino ,lvgl |
本示例展示如何使用SPI挂载TF卡,并测试读写文件

初始化 SPI及挂载TF卡:
#ifdef REASSIGN_PINS
SPI.begin(sck, miso, mosi, cs);
if (!SD.begin(cs)) {
#else
if (!SD.begin()) {
#endif
Serial.println("Card Mount Failed");
return;
}
uint8_t cardType = SD.cardType();
if (cardType == CARD_NONE) {
Serial.println("No SD card attached");
return;
}
Serial.print("SD Card Type: ");
if (cardType == CARD_MMC) {
Serial.println("MMC");
} else if (cardType == CARD_SD) {
Serial.println("SDSC");
} else if (cardType == CARD_SDHC) {
Serial.println("SDHC");
} else {
Serial.println("UNKNOWN");
}
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.printf("SD Card Size: %lluMB\n", cardSize);
测试文件读写 :
listDir(SD, "/", 0);
createDir(SD, "/mydir");
listDir(SD, "/", 0);
removeDir(SD, "/mydir");
listDir(SD, "/", 2);
writeFile(SD, "/hello.txt", "Hello ");
appendFile(SD, "/hello.txt", "World!\n");
readFile(SD, "/hello.txt");
deleteFile(SD, "/foo.txt");
renameFile(SD, "/hello.txt", "/foo.txt");
readFile(SD, "/foo.txt");
testFileIO(SD, "/test.txt");
Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
本示例演示如何使用 I2S播放音频,此例程屏幕无任何显示,烧录后会自动播放音频
初始化I2C,I2S等外设,并配置ES8311解码器 :
Serial.begin(115200);
Wire.begin(I2C_SDA, I2C_SCL);
es8311_codec_init();
setupI2S();
Serial.println("I2S Initialized");
pinMode(PA_CTRL_PIN, OUTPUT);
digitalWrite(PA_CTRL_PIN, HIGH);
本示例展示如何使用电源管理芯片,并打印出电池相关信息

初始化AXP2101 :
bool result = power.begin(Wire, AXP2101_SLAVE_ADDRESS, i2c_sda, i2c_scl);
本示例打印了imu qmi8658的运行结果

初始化qmi8658 :
ret = qmi.begin(Wire, QMI8658_L_SLAVE_ADDRESS, SENSOR_SDA, SENSOR_SCL);
本示例打印出RTC实时时钟pcf85063的值

初始化PCF85063 :
if (!rtc.begin(Wire, SENSOR_SDA, SENSOR_SCL)) {
Serial.println("Failed to find PCF85063 - check your wiring!");
// Enter an infinite loop to halt the program
while (1) {
delay(1000);
}
}
设置时间 :
uint16_t year = 2023;
uint8_t month = 9;
uint8_t day = 7;
uint8_t hour = 11;
uint8_t minute = 24;
uint8_t second = 30;
// Set the defined date and time on the RTC
rtc.setDateTime(year, month, day, hour, minute, second);
本示例驱动屏幕,并在屏幕上不断打印helloworld。

初始化SPI总线以及屏幕 :
Arduino_DataBus *bus = new Arduino_HWSPI(LCD_DC, LCD_CS, LCD_SCK, LCD_DIN);
Arduino_GFX *gfx = new Arduino_ST7789(
bus, LCD_RST, 0 /* rotation */, true /* IPS */,
240 /* width */, 284 /* height */);
填充Hello World :
gfx->setCursor(random(gfx->width()), random(gfx->height()));
gfx->setTextColor(random(0xffff), random(0xffff));
gfx->setTextSize(random(6) /* x scale */, random(6) /* y scale */, random(2) /* pixel_margin */);
gfx->println("Hello World!");
本示例使用Arduino_GFX_Library驱动ST7789屏幕,同时移植LVGL,以及触摸驱动

以下环境设置适用于 Windows 10/11 系统,Mac/Linux 用户请参考 官方说明
下载并安装 Visual Studio Code。
在 VS Code 中,通过点击 VS Code 侧边活动栏中的 或使用快捷键(Ctrl+Shift+X)来打开 扩展 视图。然后,搜索 ESP-IDF 扩展并安装。

安装扩展后,VS Code 左侧活动栏中会出现 图标,点击该图标可查看 ESP-IDF 扩展的基本命令列表,在 Advanced 中选择 配置 ESP-IDF 扩展。

选择 Express 进入快速配置模式:

根据需要修改以下选项。

点击 Install 开始安装。你将看到一个显示安装进度的页面,包括 ESP-IDF 下载、ESP-IDF 工具下载安装以及 Python 虚拟环境创建的进度状态。

如果安装正确,你会看到所有设置已配置完成的提示,即可开始使用该扩展程序。

注意:如果 ESP-IDF 安装失败或需要重新安装,可以尝试删除 C:\Users\%Username%\esp 和 C:\Users\%Username%\.espressif 文件夹后重试。
ESP-IDF 示例程序位于 示例程序包 的 ESP-IDF 目录中。
本示例在使用lvgl 以及 brookesia组件构建APP风格的界面,可独立开发和安装各种应用程序。
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
|---|
本示例使用ES7210编码芯片进行录音测试,音频文件保存在TF卡根目录下

代码解释
初始化TF卡以及初始化ES7210芯片 :
/* Init I2C bus to configure ES7210 and I2S bus to receive audio data from ES7210 */
i2s_chan_handle_t i2s_rx_chan = es7210_i2s_init();
/* Create ES7210 device handle and configure codec parameters */
es7210_codec_init();
/* Mount SD card, the recorded audio file will be saved into it */
sdmmc_card_t *sdmmc_card = mount_sdcard();
开始录音 :
esp_err_t err = record_wav(i2s_rx_chan);
本示例使用ES8311播放TF中的MP3音频,音频名称需设置为1.MP3

代码解释
初始化TF卡以及初始化8311芯片,并初始化MP3播放库 :
sd_card_init();
ESP_ERROR_CHECK(esp_board_init(16000, 1, 16));
//esp_sdcard_init("/sdcard", 10);
Audio_Play_Init();
播放MP3 :
Audio_Play_Music("file://sdcard/1.mp3");
本示例移植LVGL,并播放LVGL demo

代码解释
初始化I2C,lcd,触摸IC以及lvgl :
i2c_master_init();
lcd_driver_init();
touch_driver_init();
lvgl_driver_init();
使用lvgl互斥锁加载lvgl 官方demo
lvgl_port_lock(0);
lv_demo_stress();
lvgl_port_unlock();
本示例驱动AXP2101,并打印电池相关信息

代码解释
初始化I2C以及AXP2101 :
ESP_ERROR_CHECK(i2c_init());
ESP_LOGI(TAG, "I2C initialized successfully");
ESP_ERROR_CHECK(pmu_init());
创建打印任务
xTaskCreate(pmu_hander_task, "App/pwr", 4 * 1024, NULL, 10, NULL);
本示例使用lvgl显示图片,可以左右滑动手势切换图片

开发板设计文件
ESP32-C6 芯片官方手册
板载器件数据手册