跳到主要内容

Arduino 开发

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

Arduino 入门教程

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

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

配置开发环境

1. 安装和配置 Arduino IDE

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

  • ESP32-S3-LCD-1.28 所需开发板安装说明
板名称板安装要求版本号要求
esp32 by Espressif Systems“离线”安装/“在线”安装2.0.12

2. 安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装离线安装若库安装要求离线安装,则必须使用提供的库文件

  • 对于大多数库,可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。

  • 库安装教程,详见:安装和配置 Arduino IDE 教程 当中关于库安装的部分

  • ESP32-S3-LCD-1.28 库文件存放于示例程序中,点击此处跳转:ESP32-S3-LCD-1.28 示例程序

  • ESP32-S3-LCD-1.28 库文件安装说明

    库名称说明版本库安装要求
    LVGL图形库v8.3.10“离线”安装
    TFT_eSPILCD 库v2.5.34“离线”安装
    TFT_eSPI_Setups自定义库--“离线”安装

示例程序

Demo-flow-01

  • ESP32-S3-LCD-1.28 示例程序
示例程序基础例程说明依赖库
ESP32-S3-LCD-1.28-Test测试板载设备功能---
LVGL_Arduino显示 LVGL benchmark,music 等LVGL,TFT_eSPI ,TFT_eSPI_Setups
LVGL_Chinese_Font显示 LVGL 内置的 1000 个常用中文字体LVGL,TFT_eSPI ,TFT_eSPI_Setups
LVGL_Chinese_7500_Char显示 LVGL 内置的 7500 个中文字体LVGL,TFT_eSPI ,TFT_eSPI_Setups

Arduino 工程参数设置

ESP32-S3-Touch-LCD-1

ESP32-S3-LCD-1.28-Test

【程序说明】

  • 该程序用于测试屏幕、六轴传感器、BAT 的使用

【硬件连接】

  • 将开发板接入电脑

ESP32-S3-LCD-1

【代码分析】

  • setup()
    • 进行串口初始化,设置波特率为 115200
    • 初始化外部 PSRAM(如果可用),并为图像分配内存空间
    • 初始化 LCD 显示屏,包括设置为水平显示模式、清屏为白色、创建新的图像缓存并设置相关参数
    • 进行一系列图形绘制操作,包括绘制点、线、矩形、圆形、数字和字符串等,并将图像显示在 LCD 上
    • 读取 QMI8658 传感器的数据并显示在 LCD 上,每次先使用 Paint_Clear(WHITE) 清除图像缓存,然后重新绘制图形并显示传感器数据和 ADC 转换后的电压值

【运行效果】

  • 上电后,屏幕先间隔 2 秒显示白,红,绿,蓝四种颜色,检查屏幕有无漏光和黑点,若屏幕太快未看清,请按 RESET 按键重新复位开始

  • 接着进入传感器测试环节,颜色显示完毕后,将会在屏幕上显示传感器数据,ACC_X、ACC_Y 和 ACC_Z 数值随着设备角度偏转会随之变化,GYR_X ,GYR_Y ,GYR_Z 数值会随着设备移动加速度的变化随之变化

  • 此时接上 3.7V 锂电池,正常情况下,BAT(V)数值会降低

  • 直接烧录代码即可,LCD 屏幕如图所示

    ESP32-S3-Touch-LCD-1 ESP32-S3-Touch-LCD-1 ESP32-S3-Touch-LCD-1

  • 若出现错误请确保 esp32 开发板版本号为 2.0.12

    ESP32-S3-LCD-1

LVGL_Arduino

【程序说明】

  • 该程序用于显示 LVGL benchmark,music 等

【硬件连接】

  • 将开发板接入电脑

【代码分析】

  • void my_disp_flush() :将 LVGL 中的图像数据刷新到 TFT 显示屏上。它接收 LVGL 显示驱动结构体指针、显示区域和颜色数据指针作为参数

    • 首先计算要刷新区域的宽度 w 和高度 h ,通过获取传入的显示区域的坐标差值并加 1 得到
    • 接着调用 tft.startWrite() 开始向 TFT 显示屏写入数据,然后使用 tft.setAddrWindow 设置 TFT 显示屏的显示区域为传入的 area 指定的区域
    • 之后调用 tft.pushColors 将颜色数据(指向 color_p 的颜色数据转换为 uint16_t 类型)推送到 TFT 显示屏上进行显示,其中参数 w * h 表示要推送的像素数量, true 表示在推送完成后进行数据传输的结束操作
    • 最后调用 lv_disp_flush_ready(disp_drv) 通知 LVGL 刷新完成,以便 LVGL 可以进行后续的操作
  • setup() :负责初始化串口通信、LVGL 库、TFT 显示屏以及设置 LVGL 的显示驱动等

    • 首先初始化串口通信,设置波特率为 115200,打印 LVGL 和 Arduino 的版本信息
    • 初始化 LVGL 库,初始化 TFT 显示屏,并设置为横向显示、翻转,初始化 LVGL 的显示缓冲区和显示驱动,将 my_disp_flush 函数注册为 LVGL 的刷新回调函数
    • 创建一个 LVGL 的图像对象,并设置图像源为 test1_240_240_4
    • 创建两个定时器,一个用于定时增加 LVGL 的时间滴答,另一个用于定时执行 example_increase_reboot 函数
    • 最后打印 “Setup done” 表示设置完成

【运行效果】

ESP32-S3-LCD-1ESP32-S3-LCD-1

  • 若出现错误请确保 esp32 开发板版本号为 2.0.12

    ESP32-S3-LCD-1

LVGL_Chinese_Font

【程序说明】

  • 该程序用于显示 LVGL 内置的 1000 个常用中文字体

【硬件连接】

  • 将开发板接入电脑

【代码分析】

  • my_disp_flush()
    • 这个函数是 LVGL 显示驱动的刷新回调函数
    • 根据传入的显示区域参数 area 计算出要刷新的宽度 w 和高度 h
    • 调用 TFT 显示屏的相关函数 tft.startWrite()tft.setAddrWindow()tft.pushColors() 来将 LVGL 中的颜色数据 color_p 写入到 TFT 显示屏的特定区域
    • 最后调用 lv_disp_flush_ready() 通知 LVGL 刷新完成

【运行效果】

ESP32-S3-Touch-LCD-1

  • 若出现错误请确保 esp32 开发板版本号为 2.0.12

    ESP32-S3-LCD-1

LVGL_Chinese_7500_Char

【程序说明】

  • 该程序用于显示 LVGL 的 7500 个中文字体,字体文件较大,下载固件时间比较长

【硬件连接】

  • 将开发板接入电脑

【代码分析】

  • setup()
    • 首先开启串口通信,设置波特率为 115200,为可能的串口调试做准备
    • 初始化 LVGL(Light and Versatile Graphics Library),包括设置版本信息输出、注册日志打印回调函数(如果启用了日志功能)
    • 初始化 TFT 显示屏 tft 和触摸传感器 touch ,包括设置显示屏的旋转方向和可能的触摸校准数据
    • 初始化 LVGL 的显示缓冲区 draw_buf 和显示驱动 disp_drv ,设置显示分辨率、刷新回调函数等,并将显示驱动注册到 LVGL
    • 初始化输入设备驱动 indev_drv ,设置为指针类型并指定触摸读取回调函数,然后注册输入设备驱动
    • 创建一个标签 label ,设置文本字体、文本内容(支持颜色重绘),并将其居中显示在屏幕上
    • 可以选择性地调用 LVGL 的示例或演示函数,展示不同的功能效果
  • loop()
    • 调用 lv_timer_handler() 函数,让 LVGL 图形库处理其内部的定时任务和事件
    • 使用 delay(5) 函数引入一个小的延迟,避免程序过度占用 CPU 资源

【运行效果】

ESP32-S3-Touch-LCD-1

  • 若出现错误请确保 esp32 开发板版本号为 2.0.12

    ESP32-S3-LCD-1