ESP32开发方法
文章目录
1. ESP32概述
ESP32是一款用于物联网设备开发的芯片。一般esp32包括芯片、模组、开发板三个级别的开发。
- 芯片级别开发:使用esp32的芯片进行开发,能够实现最高的定制化开发,但是需要自己设计射频电路
- 模组级别开发:esp32芯片集成在了模组上,内置了最小系统、存储器、天线等部件,但是使用的时候需要自己设计供电
- 开发板级别开发:定制化等级最低,但是所有的部分都被集成进去了。
有以下特点:
- 双核cpu
- 内置free-rtos实时操作系统
- 32bit MCU
- 芯片集成了wifi和蓝牙功能
- 睡眠模式工作电流小于5uA
功能模块
2. 开发方法概述
esp32既可以作为核心芯片进行开发,也可以作为协助的模块进行开发。
2.1 作为主机开发
2.1.1 使用官方工具链进行开发
这种开发方法就是使用官方的sdk进行开发,主要的开发工作流是:使用vscode写代码,使用configuratioin menu 配置编译的一些属性,使用openOCD调试代码,最后使用windows命令行或者powershell进行代码的上传。
使用该方法开发的优点在于,能够实现对esp32最底层的开发控制,缺点是开发不是非常的方便。而且windows上编译上传速度很慢。linux系统上比较快。windows用户通过安装虚拟机的方法,用linux环境进行开发。
该方法配置开发环境的教程看官方资料
2.1.1.1 安装windows开发环境
从官方网站上下载并安装esp-idf。教程
2.1.1.2 创建esp-idf项目
(1)安装必要软件
需要在扩展组件中搜索esp-idf,并且进行安装。会自动安装依赖的组件C/C++,安装完成以后是这样的
(2) 创建项目
打开esp-idf 的cmd界面
输入创建项目命令
npx create-esp32-app
输入项目名称
选择esp-idf所在目录。上下键进行选择,tab键选中。
选择esp tools所在目录。上下键进行选择,tab键选中。
选择用c还是c++
选择创建项目的选项,按sapce选中
就在esp32-idf目录下创建好了项目
(3) 编写代码
在创建好的项目路径下输入code. 就可以打开vscode进行代码书写了
2.1.1.3 编译下载
可以使用esp-idf创建的powshell和cmd进行,也可以在vscode中进行
在vscode中,按f1,打开终端,然后输入指令
idf.py -p COMn flash monitor
第一次编译会很慢
发现一个很奇怪的问题,如果引入外部文件,是没有办法编译通过的。但是如果在这个外部cpp某个函数前,加上extern “C”,编译一次会失败。然后把这个extern "C"去掉,再编译,就能够成功了。不知道为什么
2.1.1.4 编译下载存在问题的解决
有时候会出现编译以后,找不到头文件中的函数的问题。比如会报 undefined function等错误,究其原因,发现是因为该文件的cpp文件并没有编译的原因
要解决这个问题,我们先看一个esp32项目是怎么组成的,以hello_world为例,文件目录如下(这部分文本来自乐鑫)
- hello_world/
- Makefile
- main/ - hello_world_main.c
- component.mk
- README.md
- sdkconfig(编译生成或者自己添加)
- build/(编译生成)
- makefile
项目 Makefile 会设置 PROJECT_NAME 变量,编译生成的用户 BIN 文件名即为此文件名;然后还会包含 ESP_IDF 的核心 Makefile : $(IDF_PATH)/make/project.mk,注意的是只有包含此 Makefile 文件才会最终链接到 ESP-IDF 上去,否则会无法使用所有的 components。一般简单的 demo 只需要包含这两项即可,但也可以另外设置本项目需要编译和配置的 make 功能。
- main
main 目录包含了程序的源代码以及一个 component.mk 文件,其中 component.mk 会把用户项目编译集成到 ESP-IDF 中,里面可以为空,也可以只包含一些变量定义控制 component 的编译过程。如果没有 component.mk 文件, ESP-IDF 不会编译此目录,在运行时会报出无法找到 app_main 的错误。component.mk文件记录的main文件中需要编译的源文件
- sdkconfig
sdkconfig 文件会在编译后自动生成,里面主要包含用户的项目配置信息,这个文件可以通过使用 make menuconfig 进行更改, 配置信息会对所有的 component 生效(包括 ESP-IDF),一般用户可以创建 sdkconfig.defaults 文件来保存本项目必须的配置项,这样可以防止其他使用者胡乱修改配置导致编译出错
- build
build 目录在编译时生成,是放置编译输出的文件夹,里面包含每个 component的中间结果以及最后的二进制执行文件。
因此,我们知道了,esp32项目是通过main目录中的component.mk确定要编译的文件,因此只要在该目录下增加要编译的源文件即可,然后就会生成正确的build目录了
2.1.2 使用arduino工具链进行开发
这种方法开发速度比较快,arduino ide把所有实现细节都隐藏了。可以直接在一个软件上写代码、编译运行,非常的简单
该方法的缺点在于:
- arduino对于代码追溯能力很差,不方便看代码
- arduino开发不够底层,无法掌控编程的细节
该方法配置开发环境教程点击这里
用arduino配置esp32开发环境大致是两种方案
- 一种是官网下载arduino-esp32的包,然后拷贝到arduino-hardware-espressif-esp32路径下的方法,然后在运行get.exe
- 另外一种是arduino-ide上,先添加esp32的json路径,再搜索开发板,在线下载的方法
这两种方法都需要注意一个细节,就是不论是法1运行exe的时候,还是法2在线下载的时候,其实都是从github上下载的,所以务必注意你的电脑能够连接到github,否则安装不成功。
2.1.3 使用micropython进行开发
该方法我还没用尝试过
2.1.4 使用visual studio 进行开发
该方法的开发思路是,把arduino开发环境部署到visual studio上进行。
优点:
- 能够使用idf的库进行开发
- 可以利用visual studio 的代码追溯、代码补全等功能,更加便捷
- 可以利用arduino的编译下载环境,快
- 可以在一个软件上完成所有的工作
缺点:
- 相比于官方工具链,不能配置编译选项,不能调试
- 不能配置编译选项就比如,无法关闭中断看门狗,如果在中断服务函数中需要进行阻塞,系统会在中断看门狗的作用下不断重启
该种开发方法只需要在arduino ide中配置好esp32开发环境后,再移到visual studio即可,教程
2.2 作为从机开发
esp32可以通过串口,利用AT指令作为从机进行开发。
3. idf开发资料
- esp32技术规格书:对芯片一些概要性的描述
- esp32技术参考指南: 具体原理、相关的寄存器
- esp32硬件设计指南: 硬件设计
- esp32软件编程指南: api手册、软件配置流程
- esp32-idf带的例程: 具体api该怎么使用。