ESP32-S3-LCD-0.85 使用教程

产品特性

  • 搭载 ESP32-S3-PICO-1-N8R8 芯片,集成了高性能的 Xtensa®32 位 LX7 双核处理器、超低功耗协处理器、Wi-Fi 基带、蓝牙基带、RF 模块以及丰富外设
  • 支持 2.4 GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth® 5 (LE),并集成板载天线
  • 内置 512KB 的 SRAM 和 384KB ROM,叠封 8MB PSRAM 和外接 8MB Flash 存储
  • 采用 Type-C 接口,提高了用户的使用便捷性和设备的兼容性
  • 板载 0.85 英寸电容液晶屏,128 × 128 分辨率
  • 内置 GC9107 驱动芯片,使用 SPI 接口通信,不占用过多接口引脚资源
  • 板载 PLUS、BOOT 两个可自定义功能的按钮,方便使用按钮进行自定义功能开发
  • 板载 3.7V 1.2mm 锂电池充放电接口
  • 引出 1 路 I2C、1 路 UART 和 1 路 USB 焊盘,可供外接设备和调试使用,灵活配置外设功能
  • 板载 Micro SD 卡槽,支持存储扩展与快速数据传输,便于实现数据记录与媒体播放等功能,并简化系统电路设计

板载资源

  1. ESP32-S3-PICO-1-N8R8 高性能 Xtensa® 32 位 LX7 双核处理器,主频达 240 MHz
  2. NS4150 音频功率放大器芯片
  3. ES8311 音频编解码芯片
  4. 电池充放电管理芯片
  5. ES7210
  6. PLUS 按键
  7. PWR 电源按键 可控制电源通断,支持自定义功能
  8. BOOT 按键 用于设备启动和功能调试
  9. 麦克风
  10. Micro SD 卡槽
  11. 贴片陶瓷天线 支持 2.4GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth 5 (LE)
  12. 电池接口 MX1.25 2PIN 连接器,可用于接入 3.7V 锂电池,支持充放电
  13. USB Type-C 接口 ESP32-S3 USB 接口,用于烧录程序和日志打印
  14. 喇叭接口

LCD 及其控制器

  • 本款 LCD 使用的内置控制器为 GC9107,是一款 128 x RGB x 160 像素的 LCD 控制器,而本 LCD 本身的像素为 128(H)RGB x 128(V), 同时由于初始化控制可以初始化为横屏和竖屏两种,因此 LCD 的内部 RAM 并未完全使用。
  • 该 LCD 支持 8 位,9 位,16 位像素的输入颜色格式,即 RGB444,RGB565 两种颜色格式,本例程使用 RGB565 的颜色格式,这也是常用的 RGB 格式
  • LCD 使用四线 SPI 通信接口,这样可以大大的节省 GPIO 口,同时通信是速度也会比较快

SPI 通信协议:

  • 注:与传统的 SPI 协议不同的地方是:由于是只需要显示,故而将从机发往主机的数据线进行了隐藏

  • RESX 为复位,模块上电时拉低,通常情况下置 1;

  • CSX 为从机片选, 仅当 CS 为低电平时,芯片才会被使能。

  • D/CX 为芯片的数据/命令控制引脚,当 DC = 0 时写命令,当 DC = 1 时写数据

  • SDA 为传输的数据,即 RGB 数据;

  • SCL 为 SPI 通信时钟。

  • 对于 SPI 通信而言,数据是有传输时序的,即时钟相位(CPHA)与时钟极性 (CPOL) 的组合:

  • CPHA 的高低决定串行同步时钟是在第一时钟跳变沿还是第二个时钟跳变沿数据被采集,当 CPHA = 0,在第一个跳变沿进行数据采集;

  • CPOL 的高低决定串行同步时钟的空闲状态电平,CPOL = 0,为低电平。

  • 从图中可以看出,当 SCLK 第一个下降沿时开始传输数据,一个时钟周期传输 8bit 数据,使用 SPI0,按位传输,高位在前,低位在后

引脚定义

注意

在使用 ESP32-S3-LCD-0.85 板上预留的 GPIO 焊盘时需注意接线和对应功能,避免接线惯性导致烧坏开发板

产品尺寸


Arduino 开发

配置开发环境

1. 安装和配置 Arduino IDE

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

2. 安装库

要运行示例,需要安装对应的库。 可从 此链接 下载 ESP32-S3-LCD-0.85 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。

库或文件名称说明版本安装方式
lvglLVGL 图形化库v8.4.0 或 v9.3.0通过库管理器或手动安装
GFX_Library_for_ArduinoGFX 图形化库v1.6.0通过库管理器或手动安装
U8g2图形显示库v2.35.30通过库管理器或手动安装
FastLEDRGB 灯驱动库v3.10.1通过库管理器或手动安装
ESP32-audioI2S-master音频处理库v3.4.0通过库管理器或手动安装
OneButton按键库v2.6.1通过库管理器或手动安装
版本兼容性说明

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

安装步骤:

  1. 解压已下载的 示例程序包

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

    信息

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

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

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

3. 其他提示

ESP32-S3-LCD-0.85 需要选择及配置开发板。

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

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

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

示例程序

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

示例程序基础例程说明依赖库
01_audio_out读取 SD 卡的音频文件,并播放ESP32-audioI2S-master
02_button_example按键测试OneButton
03_ws2812b_example测试 RGB 灯FastLED
04_gfx_helloworld屏幕上显示 HelloWorldGFX_Library_for_Arduino
05_esp_wifi_analyzer屏幕上显示 WiFi 信号强度GFX_Library_for_Arduino
06_gfx_u8g2_font通过加载字库,实现各国文字显示GFX_Library_for_Arduino、U8g2
07_sd_card_test测试 SD 卡的读写---
08_lvgl_example_v8lvgl v8.4.0 示例程序GFX_Library_for_Arduino、lvgl
09_lvgl_example_v9lvgl v9.3.0 示例程序GFX_Library_for_Arduino、lvgl

01_audio_out

本示例演示 ESP32-S3-LCD-0.85 读取 SD 卡的音频文件并使用喇叭播放,屏幕无现象,支持 MP3、AAC、WAV 等格式。

代码

01_audio_out.ino

代码解释

  • 初始化 SD 卡:

      if (!SD_MMC.setPins(clk, cmd, d0, d1, d2, d3)) {
    Serial.println("Pin change failed!");
    return;
    }
    if (!SD_MMC.begin()) {
    Serial.println("Card Mount Failed");
    return;
    }
  • 设置 I2S 引脚和音量大小:

    audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT, I2S_MCLK);
    audio.setVolume(21); // 0...21
  • 设置播放的音频文件:

    audio.connecttoFS(SD_MMC, "music/1.mp3");

运行效果

  • 播放音频文件,屏幕无现象

02_button_example

本示例演示如何使用 OneButton 库读取按键的单击、双击和长按等状态,并通过串口打印。

代码

02_button_example.ino

代码解释

  • 绑定回调函数:

    button1.attachClick(click1);
    button1.attachDoubleClick(doubleclick1);
    button1.attachLongPressStart(longPressStart1);
    button1.attachLongPressStop(longPressStop1);
    button1.attachDuringLongPress(longPress1);

运行效果

  • 屏幕无现象
  • 串口打印按钮信息

03_ws2812b_example

本示例 ESP32-S3-LCD-0.85 使用 FastLED 驱动 sw2812b RGB 灯,每 500ms 切换一种随机的颜色

代码

03_ws2812b_example.ino

代码解释

  • 初始化 ws2812b, 并设置亮度:

    FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
    FastLED.setBrightness(100); // 0-255

运行效果

  • 屏幕无现象
  • RGB 灯每 500ms 切换一种随机的颜色
  • 打开串口监视器,可以看到打印的 x、y、z 轴的 accel 和 gyro 数据

04_gfx_helloworld

本示例演示 ESP32-S3-LCD-0.85 使用 GFX_Library_for_Arduino 库驱动屏幕并在屏幕上显示 HelloWorld

代码

04_gfx_helloworld.ino

代码解释

  • 配置屏幕接口、分辨率等
    Arduino_DataBus* bus = new Arduino_ESP32SPI(45 /* DC */, 21 /* CS */, 38 /* SCK */, 39 /* MOSI */, -1 /* MISO */);
    Arduino_GFX* gfx = new Arduino_ST7789(
    bus, 40 /* RST */, 0 /* rotation */, true, 240, 240);

运行效果

  • 屏幕显示

05_esp_wifi_analyzer

本示例演示 ESP32-S3-LCD-0.85 使用 GFX_Library_for_Arduino 库显示 WiFi 频段信号强度

代码

05_esp_wifi_analyzer.ino

运行效果

  • 屏幕显示

06_gfx_u8g2_font

本示例演示 ESP32-S3-LCD-0.85 使用 GFX_Library_for_Arduino 库通过加载字库,实现各国文字显示

代码

06_gfx_u8g2_font.ino

运行效果

  • 屏幕显示

07_sd_card_test

本示例使用 ESP32-S3-LCD-0.85 测试 SD 卡的读写功能

代码

07_sd_card_test.ino

代码解释

  • SD 卡初始化 :

    if (!SD_MMC.setPins(clk, cmd, d0, d1, d2, d3)) {
    Serial.println("Pin change failed!");
    return;
    }
    if (!SD_MMC.begin()) {
    Serial.println("Card Mount Failed");
    return;
    }

运行效果

  • 屏幕无现象
  • 打开串口监视器

08_lvgl_example_v8

本示例演示了使用 ESP32-S3-LCD-0.85 运行 lvgl(v8.4.0)示例程序。

  • 需要安装 lvgl v8.4.0 版本,如已安装其他版本,请重新安装。

代码

08_lvgl_example_v8.ino

运行效果

  • 屏幕显示

09_lvgl_example_v9

本示例演示了使用 ESP32-S3-LCD-0.85 运行 lvgl(v9.3.0)示例程序。

  • 需要安装 lvgl v9.3.0 版本,如已安装其他版本,请重新安装。

代码

09_lvgl_example_v9.ino

运行效果

  • 屏幕显示


ESP-IDF

配置 ESP-IDF 开发环境

信息

对于 ESP32-S3-LCD-0.85 开发板,需要使用 ESP-IDF V5.5.0 以上版本。

备注

以下内容以 Windows 系统为例,使用 VS Code + ESP-IDF 扩展 的方式进行开发。Mac/Linux 用户请参考 官方说明

安装 ESP-IDF 开发环境

  1. 前往 ESP-IDF Installation Manager 下载 ESP-IDF 安装管理器。这是乐鑫最新推出的跨平台安装工具,下文将演示如何使用其离线安装功能。

    在页面中点击 Offline Installer 标签,然后在筛选栏中选择 Windows 操作系统和你要安装的版本。

    下载 EIM 和整合包

    确认选择无误后,点击下载按钮。浏览器将自动同时下载两个文件:一个是 ESP-IDF 离线整合包(.zst),另一个是 ESP-IDF 安装器(.exe)

    下载 EIM 和整合包2

    请耐心等待两个文件下载完成。

  2. 下载完成后,双击运行 ESP-IDF 安装器(eim-gui-windows-x64.exe)

    启动后,可在右上角将界面语言切换为中文。

    切换 EIM 语言

    安装工具会自动检测同一目录下是否存在离线整合包。点击 从存档安装

    自动检测整合包

    接下来,选择安装路径。建议使用默认路径;若需自定义,请确保路径中不包含中文或空格。确认无误后,点击 开始安装

    选择安装路径
  3. 当看到如下界面时,表示 ESP-IDF 已安装成功。

    安装成功
  4. 建议同时安装驱动程序。点击 完成安装,然后点击 安装驱动程序

    用 ESP-IDF 安装管理器安装驱动

安装 Visual Studio Code 与 ESP-IDF 扩展

  1. 下载并安装 Visual Studio Code

  2. 安装时建议勾选 通过 Code 打开操作添加到 Windows 资源管理器文件上下文菜单,以便快速打开项目文件夹。

  3. 在 VS Code 中,点击侧边活动栏中的 扩展图标 扩展图标(或使用快捷键 Ctrl + Shift + X)打开 扩展 视图。

  4. 在搜索框中输入 ESP-IDF,找到 ESP-IDF 扩展并点击安装。

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

  5. 当 ESP-IDF 扩展版本 ≥ 2.0 时,扩展会自动检测并识别上述步骤中安装的 ESP-IDF 环境,无需手动配置。

示例程序

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

01_factory

本示例演示是 ESP32-S3-LCD-0.85 的综合示例,也是出厂默认烧录的示例。

具体操作

  • 长按左键不松开,扬声器实时播放麦克风采集的声音。
  • 双击中键屏幕熄屏,再次双击屏幕恢复显示。
  • 使用电池供电时,长按中键开机,再次长按并松开关机
  • 长按右键,灯珠发光,4 种颜色轮换,再次长按,灯珠熄灭。
  • 单击左右键进行页面切换

运行效果

  • 第一个页面显示红,绿,蓝三种颜色轮换
  • 第二个页面显示开发板信息
  • 第三个页面显示已连接 wifi 的 ip 地址(未连接,连接失败显示 0.0.0.0)和 搜索到的 wifi
ESP32-S3-LCD-0.85 ESP-IDF 示例 1 图 1
ESP32-S3-LCD-0.85 ESP-IDF 示例 1 图 2
ESP32-S3-LCD-0.85 ESP-IDF 示例 1 图 3

02_button_example

本示例演示如何使用 espressif/button 库读取按键的单击、双击和长按等状态,并通过串口打印。

代码解释

  • 绑定回调函数 :

      ret = iot_button_register_cb(boot_btn, BUTTON_PRESS_DOWN, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_PRESS_UP, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_PRESS_REPEAT, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_PRESS_REPEAT_DONE, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_SINGLE_CLICK, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_DOUBLE_CLICK, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_LONG_PRESS_START, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_LONG_PRESS_HOLD, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_LONG_PRESS_UP, NULL, button_event_cb, NULL);
    ret |= iot_button_register_cb(boot_btn, BUTTON_PRESS_END, NULL, button_event_cb, NULL);

运行效果

  • 打开串口监视器
    ESP32-S3-LCD-0.85 ESP-IDF 示例 2 图 1

03_ws2812b_example

本示例演示如何使用 ESP32 的 RMT 外设控制 WS2812 LED 灯带,实现 LED 的开关控制

代码解释

  • 配置 LED 灯带参数并初始化 :
  • 循环控制 LED 灯带的开关状态 :
      led_strip_config_t strip_config {
    .strip_gpio_num = LED_STRIP_GPIO_PIN, // The GPIO that connected to the LED strip's data line
    .max_leds = LED_STRIP_LED_COUNT, // The number of LEDs in the strip,
    .led_model = LED_MODEL_WS2812, // LED strip model
    .color_component_format = LED_STRIP_COLOR_COMPONENT_FMT_GRB, // The color order of the strip: GRB
    .flags = {
    .invert_out = false, // don't invert the output signal
    }
    while (1) {
    if (led_on_off) {
    /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */
    for (int i = 0; i < LED_STRIP_LED_COUNT; i++) {
    ESP_ERROR_CHECK(led_strip_set_pixel(led_strip, i, 5, 5, 5));
    }
    /* Refresh the strip to send data */
    ESP_ERROR_CHECK(led_strip_refresh(led_strip));
    ESP_LOGI(TAG, "LED ON!");
    } else {
    ESP_ERROR_CHECK(led_strip_clear(led_strip));
    ESP_LOGI(TAG, "LED OFF!");
    }

    led_on_off = !led_on_off;
    vTaskDelay(pdMS_TO_TICKS(500));
    }

运行效果

  • 屏幕无现象
  • LED 灯珠会同时以 500ms 间隔闪烁
    ESP32-S3-LCD-0.85 ESP-IDF 示例 3 图 1
  • 打开串口监视器
    ESP32-S3-LCD-0.85 ESP-IDF 示例 3 图 2

04_sd_card_test

本示例使用 ESP32-S3-LCD-0.85 对 SD 卡的读写功能进行测试。

  • 将 Micro SD 卡插入卡槽(SD 卡需要格式化为 FAT32)

代码解释

  • SD 卡初始化,并挂载:

      sdmmc_slot_config_t slot_config = SDMMC_SLOT_CONFIG_DEFAULT();
    #if EXAMPLE_IS_UHS1
    slot_config.flags |= SDMMC_SLOT_FLAG_UHS1;
    #endif

    // Set bus width to use:
    #ifdef CONFIG_EXAMPLE_SDMMC_BUS_WIDTH_4
    slot_config.width = 4;
    #else
    slot_config.width = 1;
    #endif

    // On chips where the GPIOs used for SD card can be configured, set them in
    // the slot_config structure:
    #ifdef CONFIG_SOC_SDMMC_USE_GPIO_MATRIX
    slot_config.clk = CONFIG_EXAMPLE_PIN_CLK;
    slot_config.cmd = CONFIG_EXAMPLE_PIN_CMD;
    slot_config.d0 = CONFIG_EXAMPLE_PIN_D0;
    #ifdef CONFIG_EXAMPLE_SDMMC_BUS_WIDTH_4
    slot_config.d1 = CONFIG_EXAMPLE_PIN_D1;
    slot_config.d2 = CONFIG_EXAMPLE_PIN_D2;
    slot_config.d3 = CONFIG_EXAMPLE_PIN_D3;
    #endif // CONFIG_EXAMPLE_SDMMC_BUS_WIDTH_4
    #endif // CONFIG_SOC_SDMMC_USE_GPIO_MATRIX

    // Enable internal pullups on enabled pins. The internal pullups
    // are insufficient however, please make sure 10k external pullups are
    // connected on the bus. This is for debug / example purpose only.
    slot_config.flags |= SDMMC_SLOT_FLAG_INTERNAL_PULLUP;

    ESP_LOGI(TAG, "Mounting filesystem");
    ret = esp_vfs_fat_sdmmc_mount(mount_point, &host, &slot_config, &mount_config, &card);

运行效果

  • 打开串口监视器
  • 打印 SD 卡信息
    ESP32-S3-LCD-0.85 ESP-IDF 示例 4 图 1

05_lvgl_example

本示例演示了 ESP32-S3-LCD-0.85 运行 lvgl 示例程序(支持 lvgl v8 和 lvgl v9)

代码解释

  • 初始化:

       /* LCD HW initialization */
    ESP_ERROR_CHECK(app_lcd_init());

    /* Touch initialization */
    app_touch_init();

    /* LVGL initialization */
    ESP_ERROR_CHECK(app_lvgl_init());

运行效果

  • 默认使用的 LVGL 版本为 v9.3.0。如需更换版本,请修改 main/idf_component.yml 文件中的 LVGL 配置,例如将其改为 lvgl/lvgl:^8.4.0。
    ESP32-S3-LCD-0.85 ESP-IDF 示例 5 图 1
  • 运行效果
    ESP32-S3-LCD-0.85 ESP-IDF 示例 5 图 2

相关资料

1. 硬件资料

开发板设计文件

2. 技术手册

3. 示例程序

技术支持

周一-周五(9:30-6:30)周六(9:30-5:30)

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841