Arduino 开发
本章节包含以下部分,请按需阅读:
Arduino 入门教程
初次接触 Arduino ESP32 开发,想要快速上手?我们为您准备了一套通用的 入门教程。
- 第0节 认识 ESP32
- 第1节 安装和配置 Arduino IDE
- 第2节 Arduino 基础知识
- 第3节 数字输出/输入
- 第4节 模拟输入
- 第5节 脉冲宽度调制 (PWM)
- 第6节 串行通信 (UART)
- 第7节 I2C 通信
- 第8节 SPI 通信
- 第9节 Wi-Fi 基础用法
- 第10节 网页服务器
- 第11节 蓝牙 (Bluetooth)
- 第12节 LVGL 图形界面开发
- 第13节 综合项目
请注意:该教程使用 ESP32-S3-Zero 作为教学示例,所有硬件代码均基于其引脚布局。在动手实践前,建议您对照手中的开发板引脚图,确认引脚配置无误。
配置开发环境
1. 安装和配置 Arduino IDE
请参考 安装和配置 Arduino IDE 教程 下载安装 Arduino IDE 并添加 ESP32 支持。
2. 安装 ESP32 开发板
-
ESP32 相关主板在 Arduino IDE 使用,须先安装 "esp32 by Espressif Systems" 开发板的软件包
-
根据板安装要求进行安装,一般推荐 "在线安装" , 若在线安装失败,则使用 "离线安装"
-
安装教程,详见:Arduino 板管理教程
-
ESP32-C6-Touch-AMOLED-2.06 所需开发板安装说明
板名称 板安装要求 版本号要求 esp32 by Espressif Systems "离线"安装/"在线"安装 ≥3.2.0
3. 安装库
-
在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装。若库安装要求离线安装,则必须使用提供的库文件
-
对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
-
ESP32-C6-Touch-AMOLED-2.06 库文件存放于示例程序中,点击此处下载:ESP32-C6-Touch-AMOLED-2.06 示例程序
-
库安装教程,详见:Arduino 库管理教程
-
ESP32-C6-Touch-AMOLED-2.06 库文件说明
库或文件名称 说明 版本 安装方式 Arduino_DriveBus FT3168 触摸芯片驱动库 —— "离线"安装 GFX_Library_for_Arduino 适配 CO5300 的 GFX 图形化库 v1.6.0 可“在线”或“离线”安装 lvgl LVGL 图形化库 v9.3.0 “在线”安装后需复制 demos 文件夹至 src,建议使用“离线”安装 SensorLib PCF85063、QMI8658 传感器驱动库 v0.3.1 可“在线”或“离线”安装 XPowersLib AXP2101 电源管理芯片驱动库 v0.2.6 可“在线”或“离线”安装 Mylibrary 开发板引脚宏定义 —— “离线”安装 lv_conf.h LVGL 配置文件 —— “离线”安装
LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。
示例程序
-
ESP32-C6-Touch-AMOLED-2.06 示例程序
示例程序 基础例程说明 依赖库 01_HelloWorld 展示了基本的图形库功能,也可以用于测试显示屏的基础性能以及随机文本显示效果 GFX_Library_for_Arduino 02_GFX_AsciiTable 根据屏幕尺寸,在显示屏上按行列打印 ASCII 字符 GFX_Library_for_Arduino 03_LVGL_PCF85063_simpleTime LVGL 库显示当前时间 LVGL,SensorLib 04_LVGL_QMI8658_ui LVGL 绘制加速度折线图 LVGL,SensorLib 05_LVGL_AXP2101_ADC_Data LVGL 显示 PMIC 数据 LVGL,XPowersLib 06_LVGL_Arduino_v9 LVGL 演示 LVGL,Arduino_DriveBus
01_HelloWorld
程序说明
- 本示例演示了如何使用 Arduino GFX 库控制 CO5300 显示屏,通过动态变化的文本展示了基本的图形库功能。该代码也可以用于测试显示屏的基础性能以及随机文本显示效果
硬件连接
- 将开发板接入电脑
代码分析
-
显示初始化:
if (!gfx->begin()) {
USBSerial.println("gfx->begin() failed!");
} -
清屏并显示文本:
gfx->fillScreen(BLACK);
gfx->setCursor(10, 10);
gfx->setTextColor(RED);
gfx->println("Hello World!"); -
动图显示:
gfx->setCursor(random(gfx->width()), random(gfx->height()));
gfx->setTextColor(random(0xffff), random(0xffff));
gfx->setTextSize(random(6), random(6), random(2));
gfx->println("Hello World!");
运行效果

02_GFX_AsciiTable
程序说明
- 本示例通过使用 Arduino GFX 库在 ESP32 上展示了如何在 CO5300 显示屏上显示一个基本的 ASCII 字符表格。代码的核心功能是初始化显示屏,并根据屏幕尺寸,在显示屏上按行列打印 ASCII 字符
硬件连接
- 将开发板接入电脑
代码分析
-
数据总线和图形显示对象的创建
- 这里创建了一个用于与显示屏通信的数据总线对象 bus,使用特定的引脚配置进行初始化。然后创建了一个图形显示对象 gfx,传入数据总线、复位引脚、旋转角度、是否为 IPS 屏以及显示屏的宽度和高度等参数
Arduino_DataBus *bus = new Arduino_ESP32QSPI(
LCD_CS /* CS */, LCD_SCLK /* SCK */, LCD_SDIO0 /* SDIO0 */, LCD_SDIO1 /* SDIO1 */,
LCD_SDIO2 /* SDIO2 */, LCD_SDIO3 /* SDIO3 */);
Arduino_GFX *gfx = new Arduino_CO5300(bus, -1 /* RST */,
0 /* rotation */, false /* IPS */, LCD_WIDTH, LCD_HEIGHT); -
绘制行列编号和字符表
- 首先设置文本颜色为绿色,在显示屏上逐个打印行号。然后设置文本颜色为蓝色,打印列号。接着使用循环逐个绘制字符,组成字符表,每个字符使用白色前景和黑色背景
gfx->setTextColor(GREEN);
for (int x = 0; x < numRows; x++) {
gfx->setCursor(10 + x * 8, 2);
gfx->print(x, 16);
}
gfx->setTextColor(BLUE);
for (int y = 0; y < numCols; y++) {
gfx->setCursor(2, 12 + y * 10);
gfx->print(y, 16);
}
char c = 0;
for (int y = 0; y < numRows; y++) {
for (int x = 0; x < numCols; x++) {
gfx->drawChar(10 + x * 8, 12 + y * 10, c++, WHITE, BLACK);
}
}
运行效果

03_LVGL_PCF85063_simpleTime
程序说明
- 本示例演示了使用 PCF85063 RTC 模块在 CO5300 显示屏上显示当前时间,每秒检索时间并仅在时间发生变化时更新显示
硬件连接
- 将开发板接入电脑
代码分析
setup:进行程序的初始化设置- 串口初始化,为输出错误信息提供通道
- 初始化实时时钟芯片,包括连接检查和设置初始时间,确保时间的准确性
- 初始化图形显示设备,设置背景颜色和亮度,为时间显示提供可视化界面
loop:在程序运行过程中不断检查时间变化并更新显示屏上的时间显示- 定期检查时间是否变化,通过比较当前时间和上一次更新时间的差值来确定是否需要更新时间显示
- 获取实时时钟的时间信息并格式化,以便在显示屏上正确显示
- 如果时间发生变化,清除上一次的时间显示区域,设置文本颜色和大小,计算居中位置,并在显示屏上显示新的时间。最后保存当前时间作为上一次时间,以便下次比较
运行效果
04_LVGL_QMI8658_ui
程序说明
- 本示例演示了使用 LVGL 进行图形显示,与 QMI8658 IMU 通信以获取加速度计和陀螺仪数据
硬件连接
- 将开发板接入电脑
代码分析
setup:负责初始化各种硬件设备和 LVGL 图形库环境- 串口初始化:
USBSerial.begin(115200)为串口调试做准备 - 触摸控制器初始化:不断尝试初始化触摸控制器
FT3168,如果初始化失败则打印错误信息并延迟等待,成功后打印成功信息 - 图形显示初始化:初始化图形显示设备
gfx,设置亮度,并打印 LVGL 和 Arduino 的版本信息。接着初始化 LVGL,包括注册打印回调函数用于调试,初始化显示驱动和输入设备驱动。创建并启动 LVGL 的定时器,最后创建一个标签并设置初始文本为 “Initializing...” - 创建图表:创建一个图表对象
chart,设置图表的类型、范围、数据点数量等属性,并为加速度的三个轴添加数据系列 - 加速度传感器初始化:初始化加速度传感器
qmi,配置加速度计和陀螺仪的参数,启用它们,并打印芯片 ID 和控制寄存器信息
- 串口初始化:
looplv_timer_handler():这是 LVGL 图形库中的一个重要函数,用于处理图形界面的各种定时器事件、动画更新、输入处理等任务。在每个循环中调用这个函数可以确保图形界面的流畅运行和及时响应交互操作- 读取加速度传感器数据:如果加速度传感器数据准备好,读取加速度数据并通过串口打印出来,同时更新图表显示加速度数据。如果陀螺仪数据准备好,读取陀螺仪数据并通过串口打印出来。最后添加一个小的延迟,增加数据 polling 的频率
运行效果

05_LVGL_AXP2101_ADC_Data
程序说明
- 本示例演示了 LVGL 下使用 XPowers 库进行电源管理,并且提供 PWR 自定义按钮控制亮屏、熄屏动作
硬件连接
- 将开发板接入电脑
代码分析
-
亮屏熄屏实现函数
void toggleBacklight() {
USBSerial.println(backlight_on);
if (backlight_on) {
for (int i = 255; i >= 0; i--) {
gfx->Display_Brightness(i);
delay(3);
}
} else {
for (int i = 0; i <= 255; i++) {
gfx->Display_Brightness(i);
delay(3);
}
}
backlight_on = !backlight_on;
}
运行效果
-
显示参数:芯片温度,是否正在充电,是否放电,是否待机状态,Vbus 是否连接,Vbus 是否良好,充电器状态,电池电压,Vbus 电压,系统电压,电池百分比

06_LVGL_Arduino_v9
程序说明
- 本示例演示了 LVGL Widgets 示例,动态状态下帧率可达 10~15 帧
硬件连接
- 将开发板接入电脑
代码分析
setup:负责初始化各种硬件设备和 LVGL 图形库环境- 串口初始化:
USBSerial.begin(115200)为串口调试做准备 - I²C 总线初始化:
Wire.begin(IIC_SDA, IIC_SCL); 初始化 I²C 总线,用于与其他 I²C 设备通信 - 扩展芯片初始化:创建并初始化扩展芯片
expander,设置引脚模式为输出,并进行一些初始的引脚状态设置 - 触摸控制器初始化:不断尝试初始化触摸控制器
FT3168,如果初始化失败则打印错误信息并延迟等待,成功后打印成功信息 - 图形显示初始化:初始化图形显示设备
gfx,设置亮度,并获取屏幕的宽度和高度。然后初始化 LVGL,包括注册打印回调函数用于调试,设置触摸控制器的电源模式为监控模式,初始化显示驱动和输入设备驱动。创建并启动 LVGL 的定时器,创建一个标签并设置文本,最后调用lv_demo_widgets()展示 LVGL 的示例小部件
- 串口初始化:
looplv_timer_handler():这是 LVGL 图形库中的一个重要函数,用于处理图形界面的各种定时器事件、动画更新、输入处理等任务。在每个循环中调用这个函数可以确保图形界面的流畅运行和及时响应交互操作delay(5):添加一个小的延迟,避免过度占用 CPU 资源
运行效果
