ESP32-S3-LCD-2 使用教程

产品介绍

产品简介

本产品是一款由微雪 (Waveshare) 设计的低成本,高性能的微控制器开发板。在较小的板型下,板载了 2 英寸 LCD 屏、锂电池充电芯片、六轴传感器 (三轴加速度计与三轴陀螺仪)、摄像头接口等外设,方便开发并嵌入应用到产品中。

产品特性

  • 搭载 ESP32-S3R8 高性能 Xtensa 32 位 LX7 双核处理器,主频高达 240 MHz
  • 支持 2.4 GHz Wi-Fi (802.11 b/g/n) 和 Bluetooth 5 (LE),板载天线
  • 内置 512KB 的 SRAM 和 384KB ROM,叠封 8MB PSRAM 和外接 16MB Flash
  • 采用 Type-C 接口,紧跟时代潮流,无需纠结正反插
  • 板载 2 英寸高清 LCD 屏,240 × 320 分辨率,262K 彩色,能清晰地显示彩色图片
  • 内置 ST7789T3 驱动芯片,分别使用 SPI 接口通信,不占用过多接口引脚资源
  • 板载 QMI8658 六轴惯性测量单元 (3 轴加速度、3 轴陀螺仪)
  • 板载 3.7V MX1.25 锂电池充放电接口
  • 板载 USB Type-C 接口,可用于供电和下载调试,方便开发使用
  • 板载 Micro SD 卡槽,可外接 SD 卡存储图片或文件
  • 引出 22 个 GPIO,可灵活配置外设功能
  • 板载摄像头接口,兼容 OV2640 和 OV5640 等主流摄像头,适用于图像和视频采集

产品参数

参数名称参数
接口USB Type-A
主控芯片ESP32-S3
屏幕类型ISP
屏幕控制芯片Display :ST7789T3
板载设备Micro SD

资源简介

接口介绍

产品尺寸

使用说明

ESP32-S3-LCD-2 目前提供 Arduino IDE 和 ESP-IDF 两种开发工具和框架,提供了灵活的开发选择,你可以根据项目需求和个人习惯选择适合的开发工具。

开发工具介绍

器件准备

  • ESP32-S3-LCD-2 x1
  • OV5640摄像头 x1
  • SD卡 x1(32GB及以下)
  • 读卡器 x1
在操作前,建议先浏览目录,快速了解文档结构。为顺利操作,请仔细阅读FAQ,提前了解可能的问题。文档中所有资料均提供超链接,方便下载。

Arduino开发

本章介绍 Arduino 环境搭建,包括 Arduino IDE、ESP32板管理、相关库的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。

环境搭建

下载和安装 Arduino IDE

  • 点击访问Arduino官网,选择对应的系统和系统位数下载。
  • 运行安装程序,全部默认安装即可。

安装 ESP32 开发板

  • ESP32相关主板在Arduino IDE使用,须先安装“esp32 by Espressif Systems”开发板的软件包
  • 根据板安装要求进行安装,一般推荐“在线安装”, 若在线安装失败,则使用“离线安装
  • 安装教程

在线安装

下文以安装“ESP32-3.0.2”为例,若安装其他开发板或版本号,操作步骤类推。
  • 板管理URL用于索引指定平台的开发板信息,在 Arduino IDE菜单栏中选择 文件 -> 偏好设置
  • 添加对应的板管理链接,点击该按键
  • 在第一个空白处,添加下文
https://espressif.github.io/arduino-esp32/package_esp32_index.json
  • 保存设置
  • 安装开发板

①. 在侧边栏选择“BOARDS MANAGER”(板管理);
②. 在搜索框中输入要安装的板名称“ESP32”;
③. 在方框处选择 版本号
④. 点击“INSTALL”(安装)。

  • 等待下载
  • Arduino-esp32下载完成
  • ESP32-S3-LCD-2 所需开发板安装说明
板名称板安装要求版本号要求
esp32 by Espressif Systems“离线”安装/“在线”安装≥3.0.0

安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装若库安装要求离线安装,则必须使用提供的库文件
    对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 库安装教程


离线安装

下文以安装“ESP32-S3-ETH-Demo”所需库为例,若安装其他库,操作步骤类推。
  • 将Waveshare所提供的库文件复制到项目文件夹的 libraries 文件夹下
  • 其中waveshrare为用户名,用户名因人而异
  • 若项目文件夹目录下无 “libraries” 文件夹,需新建该文件夹并确保命名正确,后续库文件将存于此
  • 在复制库时注意如果目录下存在其他库,请先清理或迁移,避免替换或库冲突

ESP32-S3-AMOLED-1.91-Ar-lib-08.png
ESP32-S3-AMOLED-1.91-Ar-lib-05.png

  • 项目文件夹路径在File->preferences->Sketchbook location下查看


  • ESP32-S3-LCD-2 库文件路径:
    ..\ESP32-S3-LCD-2-Demo\Arduino\libraries
  • ESP32-S3-LCD-2 库文件安装说明
库名称说明版本库安装要求
lvgl图形库v8.4.0“在线”安装(需要复制demos文件夹至src)
GFX_Library_for_ArduinoLCD驱动库v1.5.0“在线”安装
FastIMUIUM驱动库v1.2.6“在线”安装

示例程序

  • ESP32-S3-LCD-2 示例程序
示例程序基础例程说明依赖库
01_factory综合测试程序lvgl、GFX_Library_for_Arduino、FastIMU
02_gfx_helloworld屏幕上显示HelloWorldGFX_Library_for_Arduino
03_sd_card_test测试SD卡--
04_qmi8658_output串口打印QMI8658的数据FastIMU
05_lvgl_qmi8658使用lvgl库显示QMI8658的数据lvgl、FastIMU
06_lvgl_battery使用lvgl库显示电池电压lvgl、GFX_Library_for_Arduino
07_lvgl_brightness使用lvgl库控制和显示屏幕亮度lvgl、GFX_Library_for_Arduino
08_lvgl_examplelvgl示例程序lvgl、GFX_Library_for_Arduino
09_lvgl_camera使用lvgl库显示摄像头图像lvgl、GFX_Library_for_Arduino
10_camera_web_server在网页上显示摄像头图像--

Arduino 工程参数设置

ESP32-S3-Touch-LCD-2-Demo-Arduino-Config.png

01_factory


【程序说明】


本示例测试ESP32-S3-LCD-2板载模块的功能,屏幕上将显示各个模块的信息,用户可以通过触摸屏进行页面切换

【硬件连接】


  • 将板子接入电脑
  • 将OV5640摄像头插入板子上的24pin座子(若没有也不影响其他功能使用)
  • 将Micro SD卡插入卡槽(若没有也不影响其他功能使用)


【代码分析】


  • 硬件初始化
Serial.begin(115200);
bsp_i2c_init();          //初始化 I2C 总线,通常用于连接传感器、显示器等外设
bsp_lv_port_init();      //初始化 LVGL 图形库的端口,这样可以将图形输出到显示设备(如 LCD)
bsp_spi_init();          //初始化 SPI 总线,通常用于与传感器、外部存储、屏幕等设备通信
  • LVGL 图形库配置
bsp_lv_port_run();       //运行与 LVGL 相关的驱动或循环,例如刷新显示等
if (lvgl_lock(-1)) {     //锁定 LVGL 资源,确保在更新 UI 时不会与其他任务冲突
  lvgl_ui_init();        //初始化 UI,可能包括布局、控件等设置
  lvgl_unlock();         //解锁 LVGL,允许其他任务访问 LVGL
}
  • 外设初始化
app_qmi8658_init();                     //初始化 QMI8658 传感器(如加速度计、陀螺仪等)
app_system_init();                      //进行系统级的初始化,例如时钟、内存、复位等
app_camera_init();                      //初始化相机模块,准备好进行图像采集
app_wifi_init(sta_ssid, sta_pass);      //初始化 Wi-Fi 模块,连接到指定的 Wi-Fi 网络
  • 应用层任务运行
app_qmi8658_run();       //启动 QMI8658 传感器相关的任务,例如数据采集、处理等
app_system_run();        //启动系统任务,确保系统功能正常运行
app_camera_run();        //启动相机相关的任务,通常是获取图像数据并进行处理或传输
app_wifi_run();          //启动 Wi-Fi 相关任务,例如连接管理、数据传输等

【运行效果】


  • 单击BOOT按键是下,双击BOOT按键是上,长按BOOT按键是确定
  • System界面
  • QMI8658界面,可以看到获取到的X、Y、Z轴的加速度和角速度数据
  • Camera界面,可以看到摄像头获取的画面
  • WiFi界面,显示要连接的WiFi名称和密码,连接成功后会显示IP

02_gfx_helloworld


【程序说明】


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

【硬件连接】


  • 将板子接入电脑

【代码分析】


  • 创建Arduino_ESP32SPI类的对象bus,用于配置SPI总线的GPIO,创建 Arduino_ST7789 类的对象gfx,用于驱动 ST7789 显示屏
Arduino_DataBus *bus = new Arduino_ESP32SPI(
  EXAMPLE_PIN_NUM_LCD_DC /* DC */, EXAMPLE_PIN_NUM_LCD_CS /* CS */,
  EXAMPLE_PIN_NUM_LCD_SCLK /* SCK */, EXAMPLE_PIN_NUM_LCD_MOSI /* MOSI */, EXAMPLE_PIN_NUM_LCD_MISO /* MISO */);

/* More display class: https://github.com/moononournation/Arduino_GFX/wiki/Display-Class */
Arduino_GFX *gfx = new Arduino_ST7789(
  bus, EXAMPLE_PIN_NUM_LCD_RST /* RST */, EXAMPLE_LCD_ROTATION /* rotation */, true /* IPS */,
  EXAMPLE_LCD_H_RES /* width */, EXAMPLE_LCD_V_RES /* height */);

03_sd_card_test


【程序说明】


本示例演示了如何使用 ESP32-S3-LCD-2 测试SD卡的读写功能

【硬件连接】


  • 将板子接入电脑
  • 将Micro SD卡插入卡槽(SD卡需要格式化为FAT32)

【代码分析】


  • SPI接口初始化以及SD卡初始化
  SPI.begin(sck, miso, mosi, cs);
  if (!SD.begin(cs)) {
    Serial.println("Card Mount Failed");
    return;
  }

04_qmi8658_output


【程序说明】


本示例演示了如何使用 ESP32-S3-LCD-2 获取QMI8658的数据并使用串口打印

【硬件连接】


  • 将板子接入电脑

【代码分析】


  • 初始化QMI8658
int err = IMU.init(calib, IMU_ADDRESS);
if (err != 0) {
  Serial.print("Error initializing IMU: ");
  Serial.println(err);
  while (true) {
    ;
  }
}

【运行效果】


  • 打开串口监视器,可以看到打印的 x、y、z 轴的accel和gyro以及qmi8658内部温度传感器的数据

05_lvgl_qmi8658


【程序说明】


本示例演示使用 ESP32-S3-LCD-2 获取qmi8658的数据,并通过lvgl库将数据显示出来

【硬件连接】


  • 将板子接入电脑

【代码分析】


  • ui的初始化,并创建一个100ms的定时器,用于获取qmi8658的数据
lvgl_qmi8658_ui_init(lv_scr_act());

06_lvgl_battery


【程序说明】


本示例演示了如何使用 ESP32-S3-LCD-2 使用lvgl库在屏幕上显示电池电压以及ADC的值

【硬件连接】


  • 将板子接入电脑
  • 电池插入座子

【代码分析】


  • ui的初始化,并创建一个1000ms的定时器,用于获取adc的数据并将该数据转换成电压
lvgl_battery_ui_init(lv_scr_act());

07_lvgl_brightness


【程序说明】


本示例演示了如何使用 ESP32-S3-LCD-2 使用lvgl库在屏幕上显示屏幕亮度,通过滑动条可以控制屏幕亮度

【硬件连接】


  • 将板子接入电脑

【代码分析】


  • ui的初始化,并创建一个滑动条值更改回调,当滑动条的值发生改变时,修改屏幕亮度
lvgl_brightness_ui_init(lv_scr_act());

08_lvgl_example


【程序说明】


本示例演示了使用 ESP32-S3-LCD-2 运行lvgl示例程序

【硬件连接】


  • 将板子接入电脑

【注意事项】


  • 如果lvgl库是在线安装,需要复制demos文件夹至src

【代码分析】


  • 选择要运行的lvgl示例
lv_demo_widgets();
// lv_demo_benchmark();
// lv_demo_keypad_encoder();
// lv_demo_music();
// lv_demo_stress();

09_lvgl_camera


【程序说明】


本示例在 ESP32-S3-LCD-2 屏幕上使用 LVGL 库显示从摄像头获取的图像

【硬件连接】


  • 将板子接入电脑
  • 将Micro SD卡插入卡槽

【代码分析】


  • 创建一个任务专门获取摄像头图像的任务
xTaskCreatePinnedToCore(camera_task, "camera_task_task", 1024 * 3, NULL, 1, NULL, 0);
  • 获取摄像头图像并更新显示
    camera_fb_t *pic;
    lv_img_dsc_t img_dsc;
    img_dsc.header.always_zero = 0;
    img_dsc.header.w = 480;
    img_dsc.header.h = 320;
    img_dsc.data_size = 320 * 480 * 2;
    img_dsc.header.cf = LV_IMG_CF_TRUE_COLOR;
    img_dsc.data = NULL;
    // lv_img_set_src(img_camera, &pic);
    while (1)
    {
        pic = esp_camera_fb_get();

        if (NULL != pic)
        {
            img_dsc.data = pic->buf;
            if (lvgl_lock(-1))
            {
                lv_img_set_src(img_camera, &img_dsc);
                lvgl_unlock();
            }
        }
        esp_camera_fb_return(pic);
        vTaskDelay(pdMS_TO_TICKS(1));
    }

10_camera_web


【程序说明】


本示例演示了如何使用 ESP32-S3-LCD-2 驱动摄像头。在连接 WiFi 后,程序会创建一个网页服务器,用户只需在浏览器中输入设备的 IP 地址即可访问。网页上可以显示摄像头的图像,并支持分辨率、镜像等设置操作

【硬件连接】


  • 将板子接入电脑
  • 将OV5640摄像头插入板子上的24pin座子

【代码分析】


  • char sta_ssid[] = "waveshare"; :要连接的WiFi名称
  • char sta_pass[] = "12345678"; :要连接的WiFi密码

【运行效果】


  • 打开串口终端连接WiFi后可以看到IP地址
  • 使用浏览器打开串口打印的IP地址
  • 点击Start Stream,可以看到摄像头的图像

ESP-IDF开发

本章介绍 ESP-IDF 环境搭建,包括 Visual Studio、Espressif IDF插件的安装,程序编译下载及示例程序测试,帮助用户掌握开发板,便于二次开发。

环境搭建

下载和安装 Visual Studio

  • 打开VScode官网的下载页面,选择对应系统和系统位数进行下载
  • 运行安装包后,其余均可以默认安装,但这里为了后续的体验建议,建议在此处勾选框中的1、2、3项
    • 第一二项开启后,可以直接通过鼠标右键文件或者目录打开VSCode,可以提高后续的使用体验
    • 第三项开启后,选择打开方式时,可以直接选择VSCode
环境设置是在 Windows 10 系统下进行,Linux和Mac用户可访问ESP-IDF环境搭建参考

安装Espressif IDF插件

  • 国内部分区域安装,一般推荐“在线安装”, 若因网络因素无法在线安装,则使用“离线安装
  • 安装Espressif IDF插件教程

在线安装

  • 打开VSCode,点击左侧的扩展,在扩展搜索并安装C/C++,ESP-IDF。可根据需求安装其他扩展
  • 使用快捷键 F1 ,输入
esp-idf: configure esp-idf extension

  • 选择express(此教程针对第一次安装的用户,故只讲述初次的通用安装教程)

  • 选择下载服务器,我们推荐国内用户使用Espressif作为你的下载服务器
  • 选择想要的ESP-IDF版本,一般根据开发板要求选择支持的版本,若无要求推荐用最新的release version
  • 下面两个分别为ESP-IDF容器安装地址和ESP-IDF所需的工具安装地址。
  • 配置完成后,点击 install 进行下载
  • 进入下载页面,其会自动安装对应工具与环境,稍等片刻即可
  • 安装完成后,会进入以下界面,说明安装完成
注意:如果之前有安装过ESP-IDF,或者失败过的,请务必彻底删除文件或者创建全新的无中文路径。


示例程序

  • ESP32-S3-LCD-2 示例程序
示例程序基础例程说明
sd_card_test测试SD卡
lvgl_example显示lvgl示例程序
lvgl_qmi8658使用lvgl库显示qmi8658的数据
lvgl_camera使用lvgl库显示摄像头图像
lvgl_battery使用lvgl库显示电池电压
lvgl_brightness使用lvgl库控制和显示屏幕亮度

sd_card_test


【程序说明】


本示例演示了如何使用 ESP32-S3-LCD-2 测试SD卡的读写功能。

【硬件连接】


  • 将板子接入电脑
  • 将Micro SD卡插入卡槽

【代码分析】


  • SPI初始化
    sdmmc_host_t host = SDSPI_HOST_DEFAULT();

    spi_bus_config_t bus_cfg = {
        .mosi_io_num = PIN_NUM_MOSI,
        .miso_io_num = PIN_NUM_MISO,
        .sclk_io_num = PIN_NUM_CLK,
        .quadwp_io_num = -1,
        .quadhd_io_num = -1,
        .max_transfer_sz = 4000,
    };
    ret = spi_bus_initialize(host.slot, &bus_cfg, SDSPI_DEFAULT_DMA);
    if (ret != ESP_OK) {
        ESP_LOGE(TAG, "Failed to initialize bus.");
        return;
    }
  • SD卡初始化,并挂载
    sdspi_device_config_t slot_config = SDSPI_DEVICE_CONFIG_DEFAULT();
    slot_config.gpio_cs = PIN_NUM_CS;
    slot_config.host_id = host.slot;

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

【注意事项】


  • SD卡需要格式化为FAT32


lvgl_example


【程序说明】


本示例演示了使用 ESP32-S3-LCD-2 运行lvgl示例程序

【硬件连接】


  • 将板子接入电脑

【代码分析】


  • 初始化
    lv_init();
    display_init();
    lv_port_disp_init();
    lvgl_tick_timer_init(EXAMPLE_LVGL_TICK_PERIOD_MS);
    bsp_brightness_init();
    bsp_brightness_set_level(80);
  • 选择要运行的lvgl示例
        lv_demo_widgets();
        // lv_demo_benchmark();
        // lv_demo_keypad_encoder();
        // lv_demo_music();
        // lv_demo_stress();

lvgl_qmi8658


【程序说明】


本示例演示使用 ESP32-S3-LCD-2 获取qmi8658的数据,并通过lvgl库将数据显示出来

【硬件连接】


  • 将板子接入电脑

【代码分析】


  • ui的初始化,并创建一个100ms的定时器,用于获取qmi8658的数据
lvgl_qmi8658_ui_init(lv_scr_act());

lvgl_camera


【程序说明】


本示例在 ESP32-S3-LCD-2 屏幕上使用 LVGL 库显示从摄像头获取的图像

【硬件连接】


  • 将板子接入电脑
  • 将Micro SD卡插入卡槽

【代码分析】


  • 创建一个任务专门获取摄像头图像的任务
xTaskCreatePinnedToCore(camera_task, "camera_task_task", 1024 * 3, NULL, 1, NULL, 0);
  • 获取摄像头图像并更新显示
    camera_fb_t *pic;
    lv_img_dsc_t img_dsc;
    img_dsc.header.always_zero = 0;
    img_dsc.header.w = 480;
    img_dsc.header.h = 320;
    img_dsc.data_size = 320 * 480 * 2;
    img_dsc.header.cf = LV_IMG_CF_TRUE_COLOR;
    img_dsc.data = NULL;
    // lv_img_set_src(img_camera, &pic);
    while (1)
    {
        pic = esp_camera_fb_get();

        if (NULL != pic)
        {
            img_dsc.data = pic->buf;
            if (lvgl_lock(-1))
            {
                lv_img_set_src(img_camera, &img_dsc);
                lvgl_unlock();
            }
        }
        esp_camera_fb_return(pic);
        vTaskDelay(pdMS_TO_TICKS(1));
    }

lvgl_battery


【程序说明】


本示例演示了如何使用 ESP32-S3-LCD-2 使用lvgl库在屏幕上显示电池电压以及ADC的值

【硬件连接】


  • 将板子接入电脑
  • 电池插入座子

【代码分析】


  • ui的初始化,并创建一个1000ms的定时器,用于获取adc的数据并将该数据转换成电压
lvgl_battery_ui_init(lv_scr_act());

lvgl_brightness


【程序说明】


本示例演示了如何使用 ESP32-S3-LCD-2 使用lvgl库在屏幕上显示屏幕亮度,通过滑动条可以控制屏幕亮度

【硬件连接】


  • 将板子接入电脑

【代码分析】


  • ui的初始化,并创建一个滑动条值更改回调,当滑动条的值发生改变时,修改屏幕亮度
lvgl_brightness_ui_init(lv_scr_act());

资料

原理图

示例程序

工程文件

数据手册

ESP32-S3

软件工具

Arduino

VScode

固件烧录工具

其他资料链接

FAQ

问题:模块下载程序后,重新下载,有时会出现无法连接串口,或者烧录失败的情况?

  • 可长按BOOT按键,同时插上USB,再松开BOOT按键,此时模块可进入下载模式,可解决大部分无法下载的问题。


问题:模块出现一直复位的情况,从设备管理器查看识别状况会一闪一闪的?

  • 这种情况可能是由于 Flash 空白导致 USB 口不稳定,可长按BOOT按键,同时按下RESET,然后松开RESET,再松开BOOT按键,此时模块可进入下载模式烧录固件(程序)即可解决该情况。


问题: 程序首次编译超级慢怎么处理?

  • 首次编译很慢属于正常情况,耐心等待即可


问题: ESP-IDF烧录成功串口显示“waiting for download...”怎么处理?

  • 若开发板有复位键则按下复位键;若没有复位键,请重新上电


问题: 找不到AppData文件夹怎么处理?

  • 部分AppData文件夹是默认隐藏的,可以设置为显示。
  • 英文系统:资源管理器->View->勾选“Hidden items”
  • 中文系统:文件资源管理器->查看->显示->勾选“隐藏的项目”


问题: 怎么查看自己使用的COM口?

  • Windows系统:

①通过设备管理器查看: 按下Windows + R键打开“运行”对话框; 输入devmgmt.msc并按回车键打开设备管理器; 展开“端口(COM和LPT)”部分,这里会列出所有的COM端口及其当前状态。
②使用命令提示符查看: 打开命令提示符(CMD); 输入mode命令,这将显示所有COM端口的状态信息。
③查看硬件连接: 如果你已经连接了外部设备到COM口,通常设备会占用一个端口号,可以通过查看连接的硬件来确定使用的是哪个端口。

  • Linux系统:

①使用dmesg命令查看: 打开终端。
②使用ls命令查看: 输入ls /dev/ttyS*或ls /dev/ttyUSB*来列出所有的串口设备。
③使用setserial命令查看: 输入setserial -g /dev/ttyS*来查看所有串口设备的配置信息。


问题:在使用 MAC 设备时,程序烧录失败?


问题:如何使用SquareLine Studio设计界面


技术支持

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

手机:13434470212

邮箱:services04@spotpear.cn

QQ:202004841