跳到主要内容

Arduino 开发

本章节包含以下部分,请按需阅读:

Arduino 入门教程

初次接触 Arduino ESP32 开发,想要快速上手?我们为您准备了一套通用的 入门教程

请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。

配置开发环境

1. 安装和配置 Arduino IDE

2. 选择开发板和端口

  • 在 Arduino IDE 中,安装好 ESP32 开发板库后,在开发板类型中选择:Waveshare ESP32S3 XIP
  • 连接 ESP32-S3-Touch-LCD-7B 到电脑后,在“工具”菜单中选择对应的串口号。

3. 示例程序包与库

  • ESP32-S3-Touch-LCD-7B 的 Arduino 示例程序与所需库文件包含在示例程序包中。
  • 可从以下地址下载示例程序包:
    • ESP32-S3-Touch-LCD-7B-BOX-Demo.zip(路径与 ESP-IDF 示例包相同)
  • 解压后,Arduino 示例位于 Arduino/examples 目录,库文件位于 Arduino/libraries 目录,可按照通用 Arduino 教程将库添加到 Arduino IDE 中。

示例程序

Arduino 示例程序位于示例程序包的 Arduino/examples 目录中,下面给出每个示例的功能说明与运行效果。

示例程序基础例程说明
01_GPIO测试 GPIO 输出控制 LED
02_UART测试 UART 串口回环
03_I2C测试 I2C 与 IO 扩展控制背光
04_CAN测试 CAN 接口收发及告警
05_RS485测试 RS485 数据回环
06_LCD测试 RGB LCD 显示与旋转
07_SD测试 SD 卡挂载与信息显示
08_TOUCH测试电容触摸屏多点触控
09_DISPLAY_BMP从 SD 卡读取并切换 BMP 图片
10_WIFI_SCAN扫描附近 WiFi 并显示列表
11_WIFI_STA作为 STA 连接指定 WiFi 并显示 IP
12_WIFI_AP建立 AP 热点并显示连接设备
13_LVGL_TRANSPLANT运行 LVGL Demo,展示图形界面
14_LVGL_BTN使用 LVGL 按钮控制 LED 亮灭
15_LVGL_SLIDER使用滑动条调节亮度并显示电压

代码烧录通用步骤(适用于所有示例):

使用 USB 线将开发板 USB TO UART Type-C 接口连接电脑,完成供电与串口下载。

  1. 在 Arduino IDE 中选择开发板类型为 Waveshare ESP32S3 XIP
  2. 选择正确的串口号。
  3. 根据需要调整示例中的参数(如 WiFi SSID/密码 等)。
  4. 点击“上传”按钮,等待编译和烧录完成。

下面分别介绍每个示例的硬件连接、代码结构和运行效果。


01_GPIO

硬件连接

  • 使用 USB 线将开发板接入电脑。

  • 将 LED 模块连接到指定 GPIO 引脚(示例使用 GPIO6)。

    ESP32-S3-Touch-LCD-7B-IDF-example-01

代码分析

  • setup()
    • 初始化 GPIO6,设置为输出模式。
  • loop()
    • 在循环中交替输出高低电平,控制 GPIO 引脚,进而控制 LED 的亮灭,实现约 1 Hz 的闪烁效果。

代码烧录

  • 按“代码烧录通用步骤”选择 Waveshare ESP32S3 XIP 与对应串口后,点击上传即可。

运行效果

  • 屏幕无显示。
  • 外接 LED 以约 1 Hz 的频率亮灭。

02_UART

硬件连接

  • 使用 USB 线连接板子的 UART 口,接入电脑。

代码分析

  • setup()
    • 使用 Serial.begin() 初始化串口,设置波特率、数据格式以及接收/发送引脚。
    • 通过循环检查确保串口初始化成功。
  • loop()
    • 在主循环中检查串口是否有数据可读。
    • 若有数据,则读取一个字节并立即发送回去,实现 UART 数据回环。

代码烧录

  • 步骤与 01_GPIO 相同,选择板卡和串口后上传示例。

运行效果

  • 打开串口调试助手,向 ESP32-S3-Touch-LCD-7B 发送消息。

  • 开发板会将收到的消息原封不动返回到串口调试助手。

    ESP32-S3-Touch-LCD-7B-IDF-example-02


03_I2C

硬件连接

  • 使用 USB 线连接板子的 UART 口,将开发板接入电脑。

代码分析

  • setup()
    • 调用 DEV_I2C_Init() 初始化 I2C 总线。
    • 调用 IO_EXTENSION_Init() 初始化 IO 扩展芯片。
  • DEV_I2C_Init():负责初始化 I2C 设备。
  • IO_EXTENSION_Init():负责初始化 IO 扩展芯片。
  • IO_EXTENSION_Output(uint8_t pin, uint8_t value):控制 IO 扩展芯片指定引脚输出高/低电平。
  • loop()
    • 在主循环中通过 IO 扩展芯片周期性地拉高或拉低 DISP 引脚,使屏幕背光周期性亮灭。

代码烧录

运行效果

  • 屏幕背光以约 1 Hz 的频率亮灭。

04_CAN

硬件连接

  • 使用 USB 线将开发板接入电脑。

  • 使用 USB-CAN-A 工具板,将其与开发板的 CAN 接口连接。

    ESP32-S3-Touch-LCD-7B-IDF-example-04

代码分析

  • setup()
    • 初始化 I2C、IO 扩展以及 CAN 接口。
    • 在初始化 CAN 前,将 IO_EXTENSION_IO_5 设置为高电平,否则 CAN 接口无法工作。
    • 调用 can_init(twai_timing_config_t, twai_filter_config_t, twai_general_config_t) 完成 TWAI(CAN 控制器)初始化。
  • loop()
    • 调用 can_read_alerts() 读取触发的 CAN 警报,并获取 TWAI 状态信息到 alerts_triggered 中。
    • 根据不同警报类型(错误被动、总线错误、传输失败、传输成功等)打印对应的日志和状态信息,例如总线错误计数、待发送消息数量、传输错误计数器等。
    • 当接收到有效数据帧时,将其原封不动地回发,实现 CAN 回环测试。

代码烧录

运行效果

  • 屏幕不显示内容。

  • 配置并启动 USB-CAN-A_TOOL 后,向 ESP32-S3-Touch-LCD-7B 发送 CAN 消息,可看到设备返回相同的 CAN 消息(配图:ESP32-S3-Touch-LCD-7B-Arduino-01.png、ESP32-S3-Touch-LCD-7B-Arduino-02.png)。

    ESP32-S3-Touch-LCD-7B-IDF-example-04-01

    ESP32-S3-Touch-LCD-7B-IDF-example-04-02


05_RS485

硬件连接

  • 使用 USB 线将开发板接入电脑。

  • 使用 USB 转 RS485 转换器连接开发板的 RS485 接口。

    ESP32-S3-Touch-LCD-7B-IDF-example-05

代码分析

  • setup()
    • 使用 RS485.begin() 初始化 Serial1 串口,设置波特率、数据格式以及收发引脚。
    • 通过循环检查确保串口初始化成功。
  • loop()
    • 在主循环中检查 RS485 是否有数据可用。
    • 若有数据,则读取一个字节并立即回传,实现 RS485 数据回环。

代码烧录

运行效果

  • 打开串口调试助手(RS485 模式),向 ESP32-S3-Touch-LCD-7B 发送带换行的数据。
  • 设备会将收到的数据原封不动返回到串口调试助手。

    ESP32-S3-Touch-LCD-7B-IDF-example-05-01


06_LCD

硬件连接

  • 使用 USB 线将开发板接入电脑。

代码分析

  • setup()
    • 依次初始化 I2C、IO 扩展和 RGB LCD,并打开背光。
    • 创建缓存区用于存放图像数据。
    • 初始化 GUI 图像数据,设置图像格式与旋转角度(可在示例中修改旋转角度)。
    • 控制屏幕依次显示颜色条、图案、文本和图片,用于测试 LCD 显示。
  • waveshare_esp32_s3_rgb_lcd_init():对 RGB LCD 进行初始化。
  • waveshare_rgb_lcd_bl_on():打开 LCD 背光。

代码烧录

运行效果

  • ESP32-S3-Touch-LCD-7B 会先显示 RGB565 颜色框,然后显示图案和文本,最后显示图片。


07_SD

硬件连接

  • 使用 USB 线将开发板接入电脑。
  • 将 Micro SD 卡插入 ESP32-S3-Touch-LCD-7B 的 SD 卡座。

代码分析

  • setup()
    • 完成一系列初始化操作并对 SD 卡进行测试,在屏幕上显示相关信息。
  • sd_mmc_init()
    • 初始化 SD 卡并挂载文件系统。
  • read_sd_capacity(uint64_t *total_capacity, uint64_t *available_capacity)
    • 读取 SD 卡的容量信息(总容量与可用容量)。

代码烧录

运行效果

  • 运行后,ESP32-S3-Touch-LCD-7B 会显示 SD 卡信息;

  • 若挂载失败或无卡,则显示 "SD Card Fail!"。


08_TOUCH

硬件连接

  • 使用 USB 线将开发板接入电脑。

代码分析

  • setup()
    • 完成一系列初始化操作并对触摸屏进行测试,在屏幕上显示触摸点。
  • touch_gt911_init()
    • 对 GT911 触摸芯片进行初始化。
  • touch_gt911_read_point(uint8_t max_touch_cnt)
    • 读取当前触摸坐标点,最多可识别 5 点触摸。

代码烧录

运行效果

  • 触摸屏幕时会在屏幕上显示触摸点;

  • 同时触摸五个位置,将显示五个不同颜色的点。


09_DISPLAY_BMP

硬件连接

  • 使用 USB 线将开发板接入电脑。
  • 将示例目录下的图片拷贝到 Micro SD 卡,再插入 ESP32-S3-Touch-LCD-7B。

代码分析

  • setup()
    • 完成一系列初始化操作并读取 SD 卡中的 BMP 图像文件。
    • 在屏幕上绘制左右箭头,通过触摸箭头实现图片切换显示。
  • list_files(const char *base_path)
    • 读取指定路径下的 BMP 图像文件名,并保存到 BmpPath 中。
  • GUI_ReadBmp(UWORD Xstart, UWORD Ystart, const char *path)
    • 从 SD 卡中读取 BMP 图像数据写入缓冲区,XstartYstart 决定显示位置。

代码烧录

运行效果

  • 如果挂载成功,会在屏幕上显示左右箭头;

  • 点击箭头即可显示图片,再次点击可进行左右切换。


10_WIFI_SCAN

硬件连接

  • 使用 USB 线将开发板接入电脑。

代码分析

  • setup()
    • 完成一系列初始化操作,并扫描附近 WiFi;
    • 将扫描到的 WiFi 名称显示在屏幕上(目前字库不完全,可能无法显示中文 SSID)。
  • wifi_scan()
    • 执行实际的 WiFi 扫描,并将结果写入缓冲区。

代码烧录

运行效果

  • 运行后开始扫描附近 WiFi;

  • 扫描结束后,屏幕显示扫描到的 WiFi 名称列表。


11_WIFI_STA

硬件连接

  • 使用 USB 线将开发板接入电脑。

代码分析

  • setup()
    • 完成一系列初始化操作,连接指定的 2.4 GHz WiFi;
    • 连接成功后,在屏幕上显示 WiFi 分配的 IP 地址。

代码烧录

  • 步骤与 01_GPIO 相同,需在代码中配置正确的 SSID 和密码。

运行效果

  • 烧录运行后,开发板连接到设定的 WiFi;

  • 连接成功后,在屏幕上打印 IP 地址。


12_WIFI_AP

硬件连接

  • 使用 USB 线将开发板接入电脑。

代码分析

  • setup()
    • 完成一系列初始化操作,创建名为 ESP32-S3-Touch-LCD-7B 的热点;
    • 在屏幕上显示当前连接到该热点的设备 MAC 地址。

代码烧录

运行效果

  • 烧录成功后,开发板作为 AP 热点工作;

  • 屏幕显示连接设备的 MAC 地址列表。


13_LVGL_TRANSPLANT

硬件连接

  • 使用 USB 线将开发板接入电脑。

代码分析

  • setup()
    • 完成一系列初始化操作,并运行 LVGL Demo;
    • 使用 LVGL 8.4 版本的 lv_demo_widgets 示例展示常用控件和基础交互。

代码烧录

运行效果

  • 运行后自动进入 lv_demo_widgets 界面,可通过触摸进行交互操作。

其他说明

  • 使用过程中若出现屏幕“漂移”等现象,可参考 ESP 官方 FAQ 进行排查。
  • 在使用自定义 UI 程序时,如出现内存不足,可在 Arduino IDE 的“工具 (Tools)”菜单中选择更大的分区表。

14_LVGL_BTN

硬件连接

  • 使用 USB 线将开发板接入电脑。
  • 连接 LED 模块到指定 GPIO 引脚(示例使用与 01_GPIO 相同的引脚)。

    ESP32-S3-Touch-LCD-7B-IDF-example-14-01

代码分析

  • setup()
    • 完成一系列初始化操作并初始化 LVGL。
    • 创建一个按钮控件,并绑定点击回调函数。
    • 在回调中切换目标 GPIO 的电平,从而控制 LED 亮灭。

代码烧录

  • 步骤与 01_GPIO 相同,选择 Waveshare ESP32S3 XIP 与正确串口后上传示例。

运行效果

  • 屏幕上显示一个按钮。

  • 点击按钮时,改变 GPIO 引脚状态,从而控制外接 LED 灯的亮灭。


15_LVGL_SLIDER

硬件连接

  • 使用 USB 线将开发板接入电脑。

  • 连接 LED 模块到指定 GPIO 引脚。

    ESP32-S3-Touch-LCD-7B-IDF-example-15-01

代码分析

  • setup()
    • 完成一系列初始化操作并初始化 LVGL。
    • 创建一个滑动条控件和一个文本控件,用于显示电池电压等信息。
    • 在滑动条事件回调中,根据滑动位置调节 LED 亮度与屏幕背光亮度,并更新文本显示。

代码烧录

运行效果

  • 屏幕显示滑动条和当前电池电压。

  • 拖动滑动条时,可同时调节 LED 和屏幕背光的亮度,文本区域动态更新电池电压等信息。