ESP32 芯片和乐鑫官方的 Arduino 开发工具包
ESP32 芯片是由乐鑫开发的芯片。下图是基于 ESP32 芯片的开发板:
图 1:ESP32 DevKitC V4 开发板
ESP32 的多种应用开发方式
至少有四种方式可以选择:
- 乐鑫官方的 ESP-IDF[1]
- 乐鑫官方的 Arduino 开发工具包[2]
- MicroPython[3]
- TinyGo[4]
TinyGo 目前(2021-03-14)还未支持 ESP32 的 WiFi 和蓝牙
为了方便开发,通常选择 Arduino 开发工具包和 MicroPython。下文选择介绍前者。
Arduino core for the ESP32
官方提供 Arduino 开发工具包是为了使用 Arduino IDE 和 Arduino 的生态,并不是要求一定要再买一块 Arduino 板来连接。
其工具包在 GitHub 上:
要使用这个工具包进行开发,需要做好两个准备:
- 下载和安装 Arduino IDE
- 把 ESP32 开发工具包导入到 Arduino IDE
第一步简单,到官方网站下载即可。以下简要说明第二步。
安装和配置 Arduino IDE 的 ESP32 开发环境
导入方式有三种,根据情况选择。资料比较全,这里简单列举出来,不再过多重复。
最简单的配置和安装方式是使用 Arduino IDE 的开发板管理器:
https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md (Installation instructions using Arduino IDE Boards Manager)
前提是能访问 raw.githubusercontent.com 这个域名(被墙了)。
如果没法访问,那就自己用 Git 去 Clone GitHub 仓库:
https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/windows.md (Steps to install Arduino ESP32 support on Windows)
不过这种方式比较慢,因为要 Clone 整个仓库,比较大。
下载仓库的压缩文件:
https://www.cnblogs.com/codeit/p/14323836.html (Arduino配置ESP32开发环境)
不过由于不能执行 Git 方式的自动 Clone,需要自行下载 Git 子模块。即文章里已经有提到的 ESP32_AzureIoT_Arduino。这个是开发包的官方依赖,不用担心存在什么大问题,使用其他方式也得这样安装。
如果 GitHub 下载慢,试试 GitLab:
- https://gitlab.com/schaepher/arduino-esp32 (Arduino Esp32)
- https://gitlab.com/schaepher/ESP32_AzureIoT_Arduino (ESP32 AzureIoT Arduino)
选择哪块板
在 Arduino IDE 的 [ 工具 | 开发板 | ESP32 Arduino ]
菜单里面能够看到有多个选项,不同的选项对应着不同的配置。为了不影响后续开发,需要选择合适的板。
如果上面有和手头上相同名称的板,那么直接选择就可以了。如果没有相同名称或者不太确定,那么就需要根据一些内容来判断。
从已有信息中找到目标。
菜单的第一个选项是 ESP32 Dev Module。根据这个名称到工具包代码里搜索,找到 boards.txt 这个文件。里面就是各种板的配置。
大致对比了一下不同板的配置,基本都一样。部分区别列举如下:
- build.variant 选项
这个是跟引脚相关的配置。主要关注这个配置。 - build.flash_freq 选项
这个是 Flash 存储器的频率。默认的值有的是 40m 有的是 80m。 - menu.PSRAM.* 选项
有些板带了 PSRAM,就会多出这部分配置
其他选项在目前阶段看起来不太重要,因此这里主要关注 variant (变体)选项,确保选择的板的引脚对应正确。
以 build.variant=esp32
为例。在 variants 文件夹里面找到 esp32 文件夹,打开里面的 pins_arduino.h
。再结合仓库里的 README.md 底下的 PINMAP,就能知道 pins_arduino.h
里面配置的含义了。
图 2:引脚配置文件里的数字与开发板引脚的对应关系
从上图看出,数字不是乱选的。这些数字分别对应了通用输入/输出引脚(GPIO,General Purpose Input Output),其中有一部分引脚只能作为通用输入(GPI)。
不同的开发板可能会在设计的时候就占用了不同的 GPIO 引脚,因此需要在开发板剩余的 GPIO 中选择合适的引脚配置到 pins_arduino.h
里面。
在配置的时候,需要参考开发板的引脚文档。如果缺少文档,可以直接看板上的引脚数字。这些引脚表示对应数字的 GPIO 引脚。具体的 GPIO 引脚都可以用作哪些功能,可以参考芯片的数据手册[5]。
在选择开发板选项的时候,着重注意一下引脚文件的配置就行了。不要选择那种配置了已被开发板元器件占用的引脚。
引脚配置文件里面还有开头的几个宏定义,这些是固定的。例如:
|
|
表示芯片共有 40 个数字管脚。ESP 32 共有 49 个管脚,其中 9 个引脚的类型为 P,即 Power。剩下的要么是通用 I/O ,要么是独用的 I 或者 O。
SPI 通信
变体引脚配置文件里面跟 SPI 相关的引脚使用的是:
- SS = GPIO5
- MOSI = GPIO23
- MISO = GPIO19
- SCK = GPIO18
查询芯片的数据手册可以看到这些引脚的功能。
图 3:ESP32 数据手册里的管脚描述[5]
一个引脚有多个功能,但在使用的时候只选择一种。
ESP32 共有 3 组 SPI(SPI、HSPI、VSPI),这里是用到其中的 VSPI,没啥特别。
拿个例子过一遍开发和上传的流程
在官方的 Arduino 开发工具包里面找到 libraries/ESP32/examples
,里面有例子。
在将开发板连接到电脑之后,挑选一个例子的代码复制到 Arduino IDE 的编辑器里面,编译并上传。
例如选择 examples/ChipID/GetChipID/GetChipID.ino
文件里的代码:
|
|
然后编译,这个选项在 [ 项目 | 验证/编译 ]
,或者用快捷键 Ctrl+R
。
编译通过后上传,这个选项在 [ 项目 | 上传 ]
,或者用快捷键 Ctrl+U
。
以下是上传的日志:
|
|
这样就上传成功了。
接着验证结果。在 [ 工具 | 串口监视器 ]
里面,把波特率设置为 115200,就可以看到输出。例如:
|
|
接下来就可以发挥创造力了~
参考
|
|