搭建 ESP32-CAM 开发环境
1 前言
自从去年入坑 NodeMCU 以来,这种只要十几块钱,却功能强大的硬件就深深吸引了我。
随着对单片机学习的深入,只是控制普通元器件已经无法满足我了,所以又剁手了 ESP32-CAM,并准备基于它做个小项目。
不同于 NodeMCU 基于 LUA 脚本的开发模式,开发 ESP32-CAM 的功能,主要基于 espressif 提供的 SDK —— “espidf”,使用 C/C++ 语言编写,因此就需要一个便利的集成开发环境。
本文将介绍开发环境的搭建过程,并且按照国际惯例编写了一个 Hello world
程序,在设备上运行。
2 硬件
2.1 清单
主板:
- ESP32-CAM
配件:
- 400 孔面包板
- 串口板
- 导线若干
因误操作而烧掉的电源降压模块(R.I.P.):
后使用 USB 线直连电脑,作为 5V 输入电源。
2.2 组装
以下是 ESP32-CAM 的针脚定义(摘自官网):
需要连接的几个接口如下:
主板针脚 | 对接针脚 |
---|---|
5V |
5V 电源正极。 |
GND (任意) |
5V 电源负极。 |
GPIO1 |
串口板的 RXI 针脚,有些串口板也标作 TXD 。 |
GPIO3 |
串口板的 TXO 针脚,有些串口板也标作 RXD 。 |
GND (任意) |
串口板的 GND 针脚。 |
GPIO0 |
烧录固件时,与主板任意 GND 针脚连接,其他时候悬空。 |
最终连接效果如下图:
3 软件
推荐在 macOS 或者 Linux 系统上开发,本文以 macOS 为例。
3.1 清单
这里列出本文涉及到的软件,及文中使用的版本。
- minicom v2.8: 串口通信工具,比系统自带的
cu
命令要好用,可通过brew
安装。 - platformio v5.1.1: 单片机开发工具包,整合了多种芯片平台的 SDK 和 Toolchain,可通过
brew
安装。 - VSCode (Visual Studio Code) v1.55.2: 代码编辑器。
- 插件: C/C++ v1.3.1
- 插件: PlatformIO IDE v2.3.2
虽然在 JetBrains CLion 中也有 platformio 的插件,但是与 espidf 的最新版(v4.X)不兼容,因此最终选择了 VSCode。
4 开发固件
4.1 创建项目
点击左边的工具栏的蚂蚁图标,或状态栏的”🏠” 图标,进入 PIO Home:
点击 “New Project” 新建项目,Board 选择 AI Thinker ESP32-CAM
,Framework 选择 Espressif IoT Development Framework
:
第一次创建项目需要等待一段时间,因为 platformio 会去下载必要的 SDK 和 Toolchian。创建完成后,会自动跳到文件目录界面。
打开 src 目录下的 “main.c”,这里的 app_main
函数就是整个项目的入口:
4.2 编写代码
在 espidf 中,也提供了 printf
函数,它会将字符串输出到串口中。
这里不止打印一句简单的”Hello”,也通过 espidf 的 API 检索一些系统信息,一并打印出来:
1 |
|
4.3 编译固件
点击 VSCode 状态栏中的✓
图标,编译固件:
第一次编译会比较费时,因此要对整个 SDK 进行编译,而后面每次构建只会编译变更的文件。
4.4 烧写固件
烧写固件前,首先需要将主板的 GPIO0
针脚与 GND
针脚连接,进入烧写模式,然后上电:
点击 VSCode 状态栏中的→
图标,烧写固件:
platformio 会自动检测主机上连接的串口接口。并默认使用找到的第一个端口。如需指定其他端口,可编辑项目根目录下的配置文件 “platformio.ini”,添加配置 upload_port
1 | [env:esp32cam] |
烧写完成后,断开供电,并断开 GPIO0
针脚与 GND
针脚的连接,然后按一下主板背面的 RST 按钮。
ESP32-CAM 并没有提供 RST 针脚(至少我没找到),所以每次烧录固件后,都需要要手工按一下 RST 按钮……
4.5 运行固件
首先在主机上执行如下命令,监控串口的输出:
1 | minicom -D /dev/tty.usbserial-gggggggg1 -b 115200 |
这里面的
/dev/tty.usbserial-gggggggg1
是我主机上的串口设备,使用其他串口板时,需要对照修改,一般是”/dev/“目录下,以”tty.usb” 开头的某个设备。
然后给主板上电,从 minicom 的界面中,将看到如下输出:
5 总结
整个搭建开发环境的过程没踩到什么坑(除了被我烧掉的变压模块),主要得益于 platformio 的强大。
其实网上搜到的针对 ESP 芯片的开发,大多是基于 Arduino IDE 的,我也不记得当初自己是怎么找到 platformio 的,不过一试之下 ——
真香!
在演示程序中,只调用了几个获取系统信息的 API,实际上 espidf 的功能非常丰富,而且提供了完善的文档和丰富的示例代码,对开发者非常友好。
主要功能的开发,基本上对照着文档即可完成,等后面踩到坑了,再写篇文章来记录吧。