ESP32-C6-Touch-LCD-1.83 使用教程

ESP32-C6-Touch-LCD-1.83

ESP32-C6-Touch-LCD-1.83

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

产品特性

  • 搭载 ESP32-C6 高性能 RISC-V 32 位单核处理器,主频高达 160 MHz
  • 支持 2.4 GHz Wi-Fi 6 (802.11 b/g/n/ax)、Bluetooth® 5 (LE) 以及 IEEE 802.15.4(支持 Thread 和 Zigbee 协议),并可选板载 PCB 天线或外接天线座子
  • 内置 512 KB SRAM、320 KB ROM 和 16 KB 低功耗 SRAM,支持外接 Flash(常见为 4MB、8MB 或 16MB)
  • 采用 Type-C 接口,提高了用户的使用便捷性和设备的兼容性
  • 板载 1.83 英寸电容触摸液晶屏,240 × 284 分辨率,65K 彩色
  • 内置 ST7789P 驱动芯片和 CST816D 电容触控芯片,分别使用 SPI 和 I2C 接口通信,不占用过多接口引脚资源
  • 板载 QMI8658 六轴惯性测量单元 (3 轴加速度、3 轴陀螺仪),可检测运动姿态、计步等功能
  • 板载 PCF85063 RTC 芯片,通过 AXP2101 接入电池,实现不间断供电
  • 板载 PWR、BOOT 两个可自定义功能的侧边按钮,方便使用按钮进行自定义功能开发
  • 板载 3.7V 1.2mm 锂电池充放电接口
  • 引出 1 路 I2C、1 路 UART 和 1 路 USB 焊盘,可供外接设备和调试使用,灵活配置外设功能
  • 板载 Micro SD 卡槽,支持存储扩展与快速数据传输,便于实现数据记录与媒体播放等功能,并简化系统电路设计
  • AXP2101 提供高效的电源管理方案,支持输出多路可配置电压,集成充电与电池管理功能,有助于延长电池寿命
  • 触摸屏透过率高,响应快,寿命长

板载资源​

ESP32-C6-Touch-LCD-1.83 硬件资源 1
  1. ESP32-C6 支持 Wi-Fi 和蓝牙 SoC,160MHz 运行频率
  2. AXP2101 高集成度的电源管理芯片
  3. ES8311 低功耗音频编解码芯片
  4. ES7210 ADC 芯片实现回声消除电路
  5. MX1.25 喇叭接口 不区分极性
  6. 1.2mm 锂电池接口 1.2mm 2PIN 连接器,用于接入 3.7V 锂电池,支持充放电,搭配外壳使用,推荐内置 6 × 25 × 25 规格的电池
  7. Type-C 接口 USB 接口,用于烧录程序和日志打印
  8. 16MB NOR-Flash 用于存储数据
  9. 贴片麦克风阵列 麦克风输入及回声消除
  10. 板载贴片天线 支持 2.4GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth 5 (LE)
  11. 预留 GPIO 焊盘 引出可用 IO 功能引脚,方便扩展使用
  12. Micro SD 卡槽
  13. BOOT 按键 用于设备启动和功能调试
  14. PWR 电源按键 长按 6 秒关机,短按开机,支持自定义功能
  15. 1.83 英寸屏幕接线端子
  16. QMI8658 六轴惯性测量单元 (IMU),包含一个 3 轴陀螺仪和一个 3 轴加速度计
  17. 扬声器功放芯片
  18. PCF85063 RTC 时钟芯片

LCD 及其控制器​

  • 该款 LCD 使用的内置控制器为 ST7789P,是一款 240 × RGB × 320 像素的 LCD 控制器,而本 LCD 本身的像素为 240(H) × RGB × 284(V),因此 LCD 的内部 RAM 并未完全使用。
  • 该 LCD 支持 12 位,16 位以及 18 位每像素的输入颜色格式,即 RGB444,RGB565,RGB666 三种颜色格式,例程使用 RGB565 的颜色格式,这也是常用的 RGB 格式。
  • LCD 使用四线 SPI 通信接口,这样可以大大的节省 GPIO 口,同时通信时速度也会比较快。
  • 本模组分辨率是 240(H) × RGB × 284(V),但是因为四角是圆角的(尺寸见参数),因此部分输入图像会有部分不显示。

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 端子时需注意接线颜色和对应功能,避免接线惯性导致烧坏开发板

ESP32-C6-Touch-LCD-1.83 引脚定义

产品尺寸

ESP32-C6-Touch-LCD-1.83 产品尺寸

Arduino 开发

配置开发环境​

1. 安装和配置 Arduino IDE​

请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。

2. 安装库​

要运行示例,需要安装对应的库。示例代码使用 GFX Library for Arduino 库驱动 ST7789 显示屏 ,并使用 Arduino_DriveBus 库驱动 CST816 触摸芯片。

可从 此链接 的 Arduino 目录中,下载 ESP32-C6-Touch-LCD-1.83 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。

库或文件名称说明版本安装方式
GFX Library for ArduinoST7789 显示驱动图形库v1.6.0通过库管理器或手动安装
SensorLibPCF85063、QMI8658 传感器驱动库v0.3.1通过库管理器或手动安装
XPowersLibAXP2101驱动库v0.3.0通过库管理器或手动安装
lvgllvgl显示显示框架v8.4.0通过库管理器或手动安装
Arduino_DriveBusI2C,触摸驱动库v1.0.1手动安装
版本兼容性说明

LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。

安装步骤:

  1. 下载 示例程序包。

  2. 将其 Arduino\libraries 目录下的所有文件夹(Arduino_DriveBus、GFX_Library_for_Arduino 等)复制到 Arduino 的库文件夹中。

    信息

    Arduino 库文件夹的路径通常是:c:\Users\<用户名>\Documents\Arduino\libraries。

    也可以在 Arduino IDE 中通过 文件 > 首选项,查看“项目文件夹位置”来定位。库文件夹就是此路径下的 libraries 文件夹。

  3. 其他安装方式请参考:Arduino 库管理教程。

3. 其他提示​

ESP32-C6-Touch-LCD-1.83 需要选择及配置开发板。

  1. ESP32-C6-Touch-LCD-1.83 需要选择ESP32C6 Dev Module。
  2. 选择USB端口
  3. ESP32-C6-Touch-LCD-1.83 使用 ESP32-C6 原生 USB 接口,而非 UART 转 USB。对于串口通信:
    • printf() 函数可直接使用;

    • 若要使用 Serial.println() 函数,需要额外配置:在 IDE 工具菜单中启用"USB CDC On Boot"选项,或在代码中声明 HWCDC 对象处理 USB 串口通信。

  4. 选择16MB flash
  5. 选择合适大小的分区表

示例程序​

Arduino 示例程序位于 示例程序包 的 Arduino/examples 目录中。

示例程序基础例程说明依赖库
01_sd_test展示基本的挂载TF卡过程,读写文件测试
02_audio_out播放MP3音频
03_axp2101_example电源管理芯片AXP2101测试XPowersLib
04_qmi8658_exampleIMU qmi8658测试SensorLib
05_pcf85063_exampleRTC实时时钟PCF85063测试SensorLib
06_gfx_helloworld一个简单的 ST7789 屏幕驱动示例GFX_Library_for_Arduino
07_LVGL_Arduinolvgl8.4示例程序SArduino_DriveBus,GFX_Library_for_Arduino ,lvgl

01_sd_test​

本示例展示如何使用SPI挂载TF卡,并测试读写文件

代码​

01_sd_test.ino

代码解释​

  • 初始化 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));

02_audio_out​

本示例演示如何使用 I2S播放音频,此例程屏幕无任何显示,烧录后会自动播放音频

代码​

02_audio_out.ino

代码解释​

  • 初始化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);

03_axp2101_example​

本示例展示如何使用电源管理芯片,并打印出电池相关信息

代码

03_axp2101_example.ino

代码解释

  • 初始化AXP2101 :

    bool result = power.begin(Wire, AXP2101_SLAVE_ADDRESS, i2c_sda, i2c_scl);

04_qmi8658_example​

本示例打印了imu qmi8658的运行结果

代码

04_qmi8658_example.ino

代码解释

  • 初始化qmi8658 :

    ret = qmi.begin(Wire, QMI8658_L_SLAVE_ADDRESS, SENSOR_SDA, SENSOR_SCL);

05_pcf85063_example​

本示例打印出RTC实时时钟pcf85063的值

代码

05_pcf85063_example.ino

代码解释

  • 初始化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);

06_gfx_helloworld

本示例驱动屏幕,并在屏幕上不断打印helloworld。

代码​

06_gfx_helloworld.ino

代码解释​

  • 初始化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!");

07_LVGL_Arduino

本示例使用Arduino_GFX_Library驱动ST7789屏幕,同时移植LVGL,以及触摸驱动

ESP-IDF 开发

配置开发环境

备注

以下环境设置适用于 Windows 10/11 系统,Mac/Linux 用户请参考 官方说明

  1. 下载并安装 Visual Studio Code。

  2. 在 VS Code 中,通过点击 VS Code 侧边活动栏中的 扩展图标 或使用快捷键(Ctrl+Shift+X)来打开 扩展 视图。然后,搜索 ESP-IDF 扩展并安装。

    在 VS Code 中搜索并安装 ESP-IDF 扩展

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

    选择“配置 ESP-IDF 拓展”

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

    选择快速配置模式

  5. 根据需要修改以下选项。

    • 选择下载服务器:
      • Espressif:使用乐鑫中国服务器,下载速度更快。
      • Github:使用 GitHub 官方发布链接。
    • ESP-IDF 版本:通常根据开发板要求选择对应版本,如无特殊要求建议使用最新的正式版本。对于 ESP32-C6-Touch-LCD-1.83 ,建议 Espressif IDF 版本 ≥ v5.5.0。
    • ESP-IDF 容器安装地址:建议使用默认地址,或使用纯英文路径且路径中不包含空格。
    • ESP-IDF 所需的工具安装地址:建议使用默认地址,或使用纯英文路径且路径中不包含空格。

    ESP-IDF 拓展快速配置模式选项

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

    安装进度

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

    安装成功

注意

注意:如果 ESP-IDF 安装失败或需要重新安装,可以尝试删除 C:\Users\%Username%\esp 和 C:\Users\%Username%\.espressif 文件夹后重试。

示例程序

ESP-IDF 示例程序位于 示例程序包 的 ESP-IDF 目录中。

lvgl_brookesia_01​

本示例在使用lvgl 以及 brookesia组件构建APP风格的界面,可独立开发和安装各种应用程序。

ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例1 图1
ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例1 图2
ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例1 图3
ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例1 图4
ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例1 图5
ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例1 图6

i2s_es7210_rec_02​

本示例使用ES7210编码芯片进行录音测试,音频文件保存在TF卡根目录下

ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例2 图1

代码解释

  • 初始化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);

mp3_play_03​

本示例使用ES8311播放TF中的MP3音频,音频名称需设置为1.MP3

ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例3 图1

代码解释

  • 初始化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_example_04​

本示例移植LVGL,并播放LVGL demo

ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例4 图1

代码解释

  • 初始化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_05​

本示例驱动AXP2101,并打印电池相关信息

ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例5 图1

代码解释

  • 初始化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_image_06​

本示例使用lvgl显示图片,可以左右滑动手势切换图片

ESP32-C6-Touch-LCD-1.83 ESP-IDF 示例6 图1

相关资料

1. 硬件资料

开发板设计文件

2. 技术手册

3. 示例程序​