跳到主要内容

Arduino 开发

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

Arduino 入门教程

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

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

配置开发环境

1. 安装和配置 Arduino IDE

  • ESP32 相关主板在 Arduino IDE 使用,须先安装“esp32 by Espressif Systems ”库。
  • 国内部分区域安装,一般推荐“在线安装 ”,若在线安装失败,则使用“离线安装 ”。
  • 安装 Arduino-ESP32 教程,详见:Arduino 板管理教程

ESP32-S3-Touch-LCD-4 开发板安装说明

板名称板安装要求版本号要求
ESP32-S3-Touch-LCD-4“离线”安装/“在线”安装3.0.7

2. 安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装离线安装若库安装要求离线安装,则必须使用提供的库文件
    对于大多数库,可以通过 Arduino 软件的在线库管理器搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,只能通过离线方式手动安装这些库。
  • 库安装教程,详见:Arduino 库管理教程
  • ESP32-S3-Touch-LCD-4 库文件存放于示例程序中,点击此处跳转:ESP32-S3-Touch-LCD-4 示例程序

ESP32-S3-Touch-LCD-4 库文件安装说明

库名称说明版本库安装要求
ESP32_Display_PanelST7701、GT911 驱动库v0.1.8可“在线”或“离线”安装
ESP32_IO_ExpanderTCA9554 IO 拓展芯片驱动库v0.0.4“离线”安装(更改了 IOExpander_Library 的返回值)
lvglLVGL 图形化库v8.4.0“在线”安装后需复制 demos 文件夹至 src,建议使用“离线”安装
lv_conf.hLVGL 配置文件——“离线”安装

示例程序

Demo-flow-01

ESP32-S3-Touch-LCD-4 示例程序

示例程序基础例程说明依赖库
01_PanelTest测试 RGB 屏幕GFX_Library_for_Arduino
02_LVGL_Porting测试 RGB 触摸屏幕GFX_Library_for_Arduino,Arduino DriveBus
03_Rotation测试屏幕旋转GFX_Library_for_Arduino
04_RS485_Test测试 RS-485 座子GFX_Library_for_Arduino
05_TWAIreceive测试 CAN 卡座GFX_Library_for_Arduino
06_TWAItransmit测试 CAN 卡座SensorLib,GFX_Library_for_Arduino
07_SD_Test测试 SD 卡座LVGL
  • ESP32-S3-Touch-LCD-4 支持直接选择型号

    • 以 ESP32-S3-LCD-1.69 为例

ESP32-S3-LCD-1

Arduino 工程参数配置

  • 需要使用屏幕的示例程序需要配置如下

    • **PSRAM** 使能,部分版本设置为 OPI PSRAM

ESP32-S3-Touch-LCD-4-demo-07

  • 接入电脑后,按下 BAT_PWR 进行开机,开机状态下双击 BAT_PWR 可以关机

01_PanelTest

【硬件连接】

  • 使用 USB 线把板子接入电脑

ESP32-S3-Touch-LCD-4-demo-02

【代码分析】

  • setup()

    • 初始化串口并打印开始信息;
    • 创建ESP_Panel对象并初始化面板;
    • 获取面板的各个组件指针(LCD、触摸、背光);
    • 根据组件是否存在进行相应操作,如关闭和打开背光、设置 LCD 的刷新完成回调函数并进行颜色条测试。
  • loop()

    • 如果触摸组件存在,读取触摸点信息;
    • 根据读取结果进行不同处理,成功则打印触摸点信息,失败则打印错误消息;
    • 若触摸中断未启用,延迟一段时间避免频繁读取;
    • 如果触摸组件不存在,则延迟 1000 毫秒并打印“IDLE loop”。

【运行效果】

  • 烧录代码后,可观察屏幕显示蓝色、绿色、红色的色带(若烧录代码后,屏幕无反应,可查看是否有在 Arduino IDE -> Tools 正确配置:使能 PSRAM(8MB OPI))

02_LVGL_Porting

【硬件连接】

  • 使用 USB 线把板子接入电脑

【代码分析】

  • setup()
    • 扩展器初始化:
      • 使用特定参数创建一个扩展器对象,初始化并尝试启动扩展器。如果初始化失败,使用备用参数再次尝试。如果成功,通过串口输出成功信息
    • 串口及引脚设置:
      • 设置引脚 16 为输出并初始化为低电平,初始化串口并设置波特率为 115200,打印标题和“start”信息
    • 面板设备初始化:
      • 创建ESP_Panel对象并初始化面板设备,开始面板设备,如果启用避免撕裂功能,根据 LVGL 配置设置 RGB 总线参数
    • LVGL 初始化及用户界面创建:
      • 初始化 LVGL,传入面板的 LCD 和触摸对象,打印信息并锁定 LVGL 的互斥锁(因为 LVGL 的 API 不是线程安全的);创建一个简单的标签并设置文本为标题,将其居中显示在屏幕上,调用函数展示 LVGL 的小部件示例,解锁互斥锁

【运行效果】

  • 烧录代码后,可进行一系列触屏操作,提供 LVGL 移植的例程(若烧录代码后,屏幕无反应,可查看是否有在 Arduino IDE -> Tools 正确配置:使能 PSRAM(8MB OPI))。

ESP32-S3-Touch-LCD-4-demo-06

03_Rotation

【硬件连接】

  • 使用 USB 线把板子接入电脑

【代码分析】

  • setup()
    • 负责初始化 IO 扩展器、配置硬件和串口通信、初始化面板设备和 LVGL,以及创建用户界面,是整个程序的初始化入口
  • rotateDisplay()
    • 这个函数用于旋转显示界面。它接收一个 lv_disp_t 类型的指针和一个旋转角度参数
    • 锁定 LVGL 的互斥锁,以确保在修改显示设置时的线程安全
    • 使用 lv_disp_set_rotation 函数设置 LVGL 显示的旋转角度
    • 使用 lv_label_set_text_fmt 函数更新显示旋转角度的标签文本,以显示当前的旋转角度
    • 解锁互斥锁,允许其他部分的程序继续访问 LVGL API
  • onRightBtnClickCallback()
    • 按钮的点击回调函数,用于响应对左右按钮的点击操作,以实现显示的旋转控制
    • 当右按钮被点击时,这个函数会检查当前的旋转状态。如果当前旋转角度为 LV_DISP_ROT_270 ,则将旋转角度设置为 LV_DISP_ROT_NONE (无旋转);否则,将旋转角度增加一个单位
    • 调用 rotateDisplay 函数来实际执行显示的旋转操作
  • onLeftBtnClickCallback()
    • 当左按钮被点击时,这个函数同样检查当前的旋转状态。如果当前旋转角度为 LV_DISP_ROT_NONE ,则将旋转角度设置为 LV_DISP_ROT_270 ;否则,将旋转角度减少一个单位
    • 也会调用 **rotateDisplay **函数来更新显示的旋转角度

【运行效果】

ESP32-S3-Touch-LCD-4-demo-08

04_RS485_Test

【硬件连接】

ESP32-S3-Touch-LCD-4-demo-04

【代码分析】

  • setup()
    • Serial2.begin(115200, SERIAL_8N1, 43, 44); :初始化 UART2,设置波特率为 115200,数据格式为 8 位数据位、无校验位、1 位停止位,并指定使用 GPIO43(RXD)和 GPIO44(TXD)作为收发引脚
  • loop()
    • 通过**Serial2.available()** 检查 UART2 是否有数据可读,使用**Serial2.read()** 读取数据,当满足特定条件时,通过**Serial2.println(buffer)** 将缓冲区中的数据发送出去,实现对 UART2 数据的接收和发送处理

【运行效果】

  • 打开串口调试助手向 ESP32-S3-Touch-LCD-4 发送消息,该设备会将收到的消息返回给串口调试助手

ESP32-S3-Touch-LCD-7-demo-04

不同硬件版本的 CAN 引脚

本页的 05_TWAIreceive06_TWAItransmit 示例对应 V1 示例程序。V2/V3 示例程序使用 TX(GPIO48)和 RX(GPIO47);V4.0 原理图使用 TX(GPIO6)和 RX(GPIO0)。请按照对应版本的示例程序和原理图配置。

05_TWAIreceive

【硬件连接】

  • 使用 USB 线把板子接入电脑
  • 开发板连接 USB-CAN-A,如图

ESP32-S3-Touch-LCD-4-demo-05

【代码分析】

  • 功能概述:
    • 初始化串口通信用于输出信息
    • 通过 TWAI 驱动配置 CAN 通信
    • 安装和启动 CAN(Controller Area Network)总线驱动(TWAI),连接到指定的 RX_PIN(0)和 TX_PIN(6)引脚,并设置为监听模式
    • 在主循环中,如果 CAN 驱动已安装,检查是否有警报触发,处理各种警报情况,如错误被动状态、总线错误、接收队列满等。如果有接收数据警报,处理接收到的 CAN 消息
  • 重要接口和引脚说明:
    • RX_PIN(0)和 TX_PIN(6):用于连接到 CAN 总线收发器的引脚
    • 05_TWAIreceive 示例未定义或使用 GPIO_OUTPUT_PIN_SEL;实际 CAN 引脚由 twai.h 定义为 TX GPIO6、RX GPIO0

【运行效果】

  • ESP32-S3-Touch-LCD-4 等待 USB-CAN-A_TOOL 发送消息,如果接收成功,会将其打印到串口上。

ESP32-Arduino-CN-2 ESP32-Arduino-23 ESP32-S3-Touch-LCD-7-demo-15

06_TWAItransmit

【硬件连接】

  • 使用 USB 线把板子接入电脑
  • 开发板连接 USB-CAN-A,如图

ESP32-S3-Touch-LCD-4-demo-05

【代码分析】

  • 功能概述:
    • 初始化串口通信用于输出信息
    • 配置特定的 GPIO 引脚(RX_PIN 和 TX_PIN)为输出模式
    • 安装和启动 CAN(Controller Area Network)总线驱动(TWAI),连接到指定的 RX_PIN(0)和 TX_PIN(6)引脚,并设置为无应答模式
    • 重新配置 CAN 警报以检测特定状态,包括发送相关警报和总线错误警报
    • 在主循环中,如果 CAN 驱动已安装,检查是否有警报触发并处理各种警报情况,同时按照一定时间间隔发送 CAN 消息
  • 重要接口和引脚说明:
    • RX_PIN(0)和 TX_PIN(6):用于连接到 CAN 总线收发器的引脚
    • GPIO_OUTPUT_PIN_SELRX_PINTX_PIN 组成,即 GPIO0 和 GPIO6;示例使用它将这两个引脚配置为输出模式

【运行效果】

  • 串口打印 CAN 消息发送成功,配置 USB-CAN-A_TOOL 后启动可看到 ESP32-S3-Touch-LCD-4 发送的 CAN 消息。

ESP32-S3-Touch-LCD-7-demo-14

  • 再观察 USB-CAN-A_TOOL,即可看到 ESP32-S3-Touch-LCD-4 发送的 CAN 消息

ESP32-S3-Touch-LCD-7-demo-16

07_SD_Test

【硬件连接】

  • 使用 USB 线把开发板接入电脑
  • 将 SD 卡插入开发板

ESP32-S3-Touch-LCD-4-demo-03

【代码分析】

  • SD 卡初始化与检测
    • 初始化 SD 卡
      • 通过设置 SDMMC 引脚(SDMMC_CLKSDMMC_CMDSDMMC_DATA )来初始化 SD 卡。如果初始化失败,程序会进入死循环,确保在没有成功挂载 SD 卡的情况下不继续执行其他操作。
    • 检测 SD 卡类型和大小
      • 检测 SD 卡的类型(如 MMC、SDSC、SDHC 等)并打印信息,了解所连接的 SD 卡的具体规格。同时获取 SD 卡的大小并以 MB 为单位打印,方便了解存储容量
    • 列出 SD 卡目录内容
      • 通过调用listDir函数,列出 SD 卡根目录下的文件和目录,提供对 SD 卡存储内容的了解,方便进行后续的文件操作和管理

【运行效果】

  • ESP32-S3-Touch-LCD-4 会识别 SD 卡的类型和大小,再对进行文件的增删改查

ESP32-S3-Touch-LCD-7-demo-09