跳到主要内容

Arduino 开发

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

Arduino 入门教程

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

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

配置开发环境

1. 安装和配置 Arduino IDE

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

2. 安装库

  • 在安装 Arduino 库时,通常有两种方式可供选择:在线安装 和 离线安装。若库安装要求离线安装,则必须使用提供的库文件。
  • 对于大多数库,用户可以通过 Arduino 软件的在线库管理器轻松搜索并安装。然而,一些开源库或自定义库未被同步到 Arduino 库管理器中,因此无法通过在线搜索获取。在这种情况下,用户只能通过离线方式手动安装这些库。
  • 可从 该处 下载 ESP32-S3-AMOLED-1.91 开发板的示例程序包。包内的 Arduino\libraries 目录已包含本教程所需的全部库文件。
库或文件名称说明版本安装方式
LVGL图形库v8.4.0"离线安装"
版本兼容性说明

LVGL 及其驱动库的版本之间存在较强的依赖关系。例如,为 LVGL v8 编写的驱动可能不兼容 LVGL v9。为确保示例能够稳定复现,推荐使用上表列出的特定版本。混合使用不同版本的库可能导致编译失败或运行时异常。

3. Arduino 工程参数设置

示例程序

Arduino 示例程序位于 示例程序包Arduino/examples 目录中。

示例程序基础例程说明依赖库
01_ADC_Test获取锂电池的电压值-
02_I2C_QMI8658打印 QMI 芯片的原始姿态数据-
03_LVGL_V8_TestLVGLV8 例程LVGL V8.4.0
04_SD_Card加载显示 SD 卡的信息-
05_WIFI_STA设置为 STA 模式,可接入 WiFi 获取 IP 地址-
06_WIFI_AP设置为 AP 模式,可获取接入设备的 IP 地址-
07_Arduino_Playablity可玩性DIY示例-

01_ADC_Test

【程序说明】

  • 通过 GPIO 连接的模拟量电压经过 ADC 转换成数字量,然后通过计算得到实际的锂电池电压,并打印到终端。

【硬件连接】

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

【代码分析】

  • adc_bsp_init(void):初始化 ADC1,包括创建 ADC 单次触发单元并配置 ADC1 的通道 0。
  • adc_get_value(float *value,int *data):读取 ADC1 通道 0 的值,并根据参考电压和分辨率计算出对应的电压值存储在传入的指针指向的位置,如果读取失败则存储 0。
  • adc_example(void* parmeter):初始化 ADC 后,在一个无限循环中通过读取GPIO1上的ADC通道的值,并打印出原始 ADC 值和计算得到的系统电压值,每 1 秒执行一次。

【运行效果】

  • 程序编译下载完成,打开串口监控可以看到打印输出的 ADC 的值和电压,如下图所示:

02_I2C_QMI8658

【程序说明】

  • 通过 I2C 协议,分别对 QMI8658 芯片进行初始化、间隔读取姿态数据,然后打印到终端。

【硬件连接】

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

【代码分析】

  • qmi8658c_example(void* parmeter):该函数初始化 QMI8658 设备,在无限循环中读取并打印加速度计、陀螺仪数据和温度数据,每 1 秒执行一次,旋转板子的过程中陀螺仪数据随着旋转越快而越大,加速度计会根据当前的位置计算出对应的加速度。

【运行效果】

  • 程序编译下载完成,打开串口监控可以看到 QMI 发出来的姿态数据(欧拉角需要自己转换),如下图所示:

03_LVGL_V8_Test

【程序说明】

  • 基于 LVGL 8 适配开发,让用户快速上手 LVGL V8 。

【硬件连接】

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

【代码分析】

/*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 32 (ARGB8888)*/
#define LV_COLOR_DEPTH 16//Color depth, a macro definition that must be concerned with porting LVGL

#define LV_MEM_CUSTOM 0
#if LV_MEM_CUSTOM == 0
/*Size of the memory available for `lv_mem_alloc()` in bytes (>= 2kB)*/
#define LV_MEM_SIZE (48U * 1024U) /*[bytes]*/

/*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/
#define LV_MEM_ADR 0 /*0: unused*/
/*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/
#if LV_MEM_ADR == 0
#undef LV_MEM_POOL_INCLUDE
#undef LV_MEM_POOL_ALLOC
#endif

#else /*LV_MEM_CUSTOM*/
#define LV_MEM_CUSTOM_INCLUDE <stdlib.h> /*Header for the dynamic memory function*/
#define LV_MEM_CUSTOM_ALLOC malloc
#define LV_MEM_CUSTOM_FREE free
#define LV_MEM_CUSTOM_REALLOC realloc
#endif /*LV_MEM_CUSTOM*/
//The above section is mainly for LVGL memory allocation,
//which defaults to lv_mem_alloc() versus lv_mem_free().

【代码兼容性说明】

  • 不带触摸的板子需要在main函数所在的文件找到EXAMPLE_USE_TOUCH把1改成0 。
  • 带触摸的板子需要在main函数所在的文件找到EXAMPLE_USE_TOUCH把0改成1 。
    #define EXAMPLE_USE_TOUCH  0

【运行效果】

  • 程序编译烧录完成,如图:

04_SD_Card

【程序说明】

  • 通过 SDMMC 方式驱动 SD 卡,成功挂载之后把 SD 卡信息打印到终端。

【硬件连接】

  • 上电之前先给板子装上 FatFs 格式的 SD 卡

【代码分析】

  • SD_card_Init(void):该函数根据不同的配置来初始化 SD 卡,包括配置挂载参数、主机和卡槽参数,然后尝试挂载 SD 卡,若成功则打印卡信息和容量大小。

【代码兼容性说明】

  • 如果是V1板子需要注释宏定义VersionControl_V2,默认开启。
    #define VersionControl_V2
    #define SDlist "/sd_card" // Directory, acting as a standard path
    #ifdef VersionControl_V2
    #define PIN_NUM_D0 (gpio_num_t)8
    #define PIN_NUM_CMD (gpio_num_t)42
    #define PIN_NUM_CLK (gpio_num_t)9
    #else
    #define PIN_NUM_MISO (gpio_num_t)8
    #define PIN_NUM_MOSI (gpio_num_t)42
    #define PIN_NUM_CLK (gpio_num_t)47
    #define PIN_NUM_CS (gpio_num_t)9
    #define SD_SPI SPI3_HOST
    #endif

【运行效果】

  • 点击串口监控设备,可以看到输出的SD卡的信息,practical_size是SD卡的实际容量,如下图所示:

05_WIFI_STA

【程序说明】

  • 该示例可将开发板配置为 STA 设备,以连接路由器,从而接入系统网络。

【硬件连接】

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

【代码分析】

  • 05_WIFI_STA.ino 文件找到 ssid password,然后将其修改为当前环境中可用路由器的 SSID 和 Password。

    const char *ssid = "you_ssid";
    const char *password = "you_password";

【运行效果】

  • 烧录完程序,打开串口终端,如果设备连接成功热点之后,会输出所获取的 IP 地址,如图:

06_WIFI_AP

【程序说明】

  • 该示例可将开发板设置为热点,允许手机或其他处于 STA 模式的设备连接到开发板。

【硬件连接】

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

【代码分析】

  • 01_WIFI_AP.ino 文件找到 ssidpassword,然后手机或其他处于 STA 模式的设备即可使用该 ssid 和 password 连接到开发板。

    const char *ssid = "ESP32_AP";
    const char *password = "12345678";

【运行效果】

  • 烧录完程序,打开串口终端,如果设备连接热点成功之后,会输出该设备的MAC地址,如图:

07_Arduino_Playablity

【程序说明】

  • 该示例可玩性、扩展性比较强。

【硬件连接】

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

【代码兼容性说明】

  • 基于ESP32_Arduino版本低于V3.0
  • 目前测试的环境是V2.0.9
  • 相关示例代码可点击前往Arduino_Playablity

【运行效果】

  • RGBpalette

  • AnimationDemo

  • SliderControl