ESP-IDF 物联网开发框架简介

Espressif 物联网开发框架

ESP-IDF 是乐鑫官方推出的物联网开发框架,支持 Windows、Linux 和 macOS 操作系统。
ESP-IDF 适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C++ 语言提供了一个自给自足的 SDK,方便用户在这些平台上开发通用应用程序。ESP-IDF 目前已服务支持数以亿计的物联网设备,并已开发构建了多种物联网产品,例如照明、消费电子大小家电、支付终端、工控等各类物联网设备。

免费开源

ESP-IDF 相关资源已在 GitHub 上免费开放。用户可在 Apache 2.0 许可下以源代码形式获取 ESP-IDF 的大多数组件,或通过兼容许可证获取第三方组件。

专业稳定

ESP-IDF 具有清晰、严格的发布流程和支持策略,确保用户选择使用稳定的发布版本,并可持续获得适用于其应用的重要修复程序。每个稳定的发布版本均经过严格的测试流程,以确保版本稳定,客户可快速实现量产。

功能丰富的软件组件

ESP-IDF 集成了大量的软件组件,包括 RTOS、外设驱动程序、网络栈、多种协议实现技术以及常见应用程序的使用助手。它提供了典型应用程序所需的大部分构建块,用户在开发应用时只需专注于业务逻辑即可。 ESP-IDF 不仅具有免费开源的开发工具,还支持 Eclipse 和 VSCode 等 IDE,确保其易于开发人员使用。

丰富的文档和示例资源

ESP-IDF 提供详尽的软件组件使用和设计文档,有助于开发人员充分理解 ESP-IDF 功能,并从中挑选最适合构建其应用程序的模块。ESP-IDF 包含 100 多个示例,详细说明了其组件及硬件外设的功能和用法。它们经过了严格的测试和维护,是用户开启应用开发的有效参考。

软件组件和功能

在这里插入图片描述

在这里插入图片描述

ESP-IDF 版本支持期限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AHY6r4G1-1690938877177)(https://dl.espressif.com/dl/esp-idf/support-periods.svg)]

ESP-IDF 与乐鑫芯片

下表总结了乐鑫芯片在 ESP-IDF 各版本中的支持状态,其中 ![alt text][supported] 代表已支持,![alt text][preview] 代表目前处于预览支持状态。预览支持状态通常有时间限制,而且仅适用于测试版芯片。请确保使用与芯片相匹配的 ESP-IDF 版本。

芯片v4.2v4.3v4.4v5.0v5.1
ESP32![alt text][supported]![alt text][supported]![alt text][supported]![alt text][supported]![alt text][supported]
ESP32-S2![alt text][supported]![alt text][supported]![alt text][supported]![alt text][supported]![alt text][supported]
ESP32-C3![alt text][supported]![alt text][supported]![alt text][supported]![alt text][supported]
ESP32-S3![alt text][supported]![alt text][supported]![alt text][supported]芯片发布公告
ESP32-C2![alt text][supported]![alt text][supported]芯片发布公告
ESP32-C6![alt text][supported]芯片发布公告
ESP32-H2![alt text][supported]芯片发布公告

[supported]: https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimg.shields.io%2Fbadge%2F-%25E6%2594%25AF%25E6%258C%2581-green&pos_id=img-svh00yuZ-1693891744657) “supported”
[preview]: https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimg.shields.io%2Fbadge%2F-%25E9%25A2%2584%25E8%25A7%2588-orange&pos_id=img-GfpOfGRh-1693891745390) “preview”

对于 2016 年之前发布的乐鑫芯片(包括 ESP8266 和 ESP8285),请参考 RTOS SDK

使用 ESP-IDF 进行开发

搭建 ESP-IDF 开发环境

关于不同芯片如何搭建 ESP-IDF 的开发环境,请参阅ESP-IDF快速入门部分。

注意: 不同系列芯片和不同 ESP-IDF 版本都有其对应的文档。请参阅版本部分,获得关于如何查找文档以及如何检出 ESP-IDF 的特定发行版的详细信息。

非 GitHub 分叉的 ESP-IDF 项目

ESP-IDF 中的子模块采用相对路径(详见 .gitmodules 文件),所以它们会指向 GitHub。 如果 ESP-IDF 被分叉到的仓库不在 GitHub 上,那么你需要在克隆结束后运行该脚本 tools/set-submodules-to-github.sh

这个脚本会为所有的子模块设置绝对路径,接着可以通过 git submodule update --init --recursive 完成子模块的更新。如果 ESP-IDF 是从 GitHub 上克隆得到,则不需要此步骤。

寻找项目

除了入门指南中提到的 esp-idf 模板项目,ESP-IDF 的 examples 目录下还带有很多其它示例项目。

一旦找到了需要的项目,便可以进入该目录,执行配置和构建操作。

如果要基于示例工程开始你自己的项目,请将示例工程复制到 ESP-IDF 目录之外。

快速参考

详细的使用方法请参考上面入门指南的链接,这里仅仅列举一些 ESP-IDF 项目开发中常用的命令:

设置构建环境

请参考入门指南中列出的详细步骤。

  • 在主机中安装入门指南中提到的构建所依赖的工具。
  • 运行安装脚本来设置构建环境。可为 Windows shell 选择 install.batinstall.ps1,为 Unix shell 选择 install.shinstall.fish
  • 在使用 ESP-IDF 之前,需要在 shell 中运行导出脚本。Windows 下可运行 export.bat,Unix 下可运行 source export.sh

1、安装python3.7.5

根据运行的系统环境选择性安装,如果python3的版本低于3.7,则需要重新安装高版本的python。
由于linux内部好多环境都是基于python运行的,所以不能盲目卸载系统自带的python版本。
我们可以在构建基础运行环境过程中指定python3的版本,具体命令参照“3、构建基础运行环境”。
查询python3版本的命令行:

python3 --version

2、安装Cmake3.16.8

为了避免后续编译过程出现版本过低无法通过编译的问题,需要确认自动中默认安装的Cmake版本。
查询Cmake版本的命令行:

cmake --version

如果Cmake版本低于3.16,则需要安装新的Cmake版本,依次执行以下命令行。

wget https://cmake.org/files/v3.16/cmake-3.16.8.tar.gz #下载cmake对应版本的源码
tar -xvzf cmake-3.16.8.tar.gz #解压文件到当前的文件夹下
cd ~/cmake-3.16.8 #进入解压目录
chmod 777 ./configure #修改configure文件的读取权限
./configure #执行配置文件
make #执行编译
sudo make install #安装cmake
sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force #构建一个软链接,更新cmake版本

3、构建基础运行环境

构建环境过程中系统会自动检查需要安装的软件环境,该过程需要在网络状态比较好的状态下完成。如果不需要更新python版本,可直接运行下面的命令行:

sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

如果有需要更新python版本到3.7或以上,可以运行下面的命令行:

sudo apt-get install git wget flex bison gperf python3.7 python3-pip python3.7-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

4、获取ESP-IDF远程仓库版本

由于远程仓库在个Github上,网络访问速度比较慢,可能会出现中断且无法续传的情况,建议优化Git Hosts。目前ESP-IDF的发行release版本V5.1,所以我们可以执行下面的命令行:

mkdir -p ~/esp #创建一个文件夹
cd ~/esp #转到文件夹下
git clone -b release/v5.1 --recursive https://github.com/espressif/esp-idf.git #克隆ESP-IDF远程仓库到本地文件夹下

该过程执行的速度完全取决于网络速度,建议耐心等待。

5、安装相关工具包

远程仓库同步完成后,直接在项目文件夹下安装相关工具,执行下列命令行即可:

cd ~/esp/esp-idf #转到文件夹下
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets" #优先选择Espressif下载服务器安装工具包
./install.sh #运行安装相关工具

6、构建环境变量

每一次退出终端想重新运行是,都需要重新构建环境变量,可直接执行下面的命令行:

. $HOME/esp/esp-idf/export.sh #创建环境变量

配置项目

  • idf.py set-target <chip_name> 可将项目的目标芯片设置为 <chip_name>。运行 idf.py set-target,不用带任何参数,可查看所有支持的目标芯片列表。
  • idf.py menuconfig 可打开一个基于文本的配置菜单,可以用来对项目进行配置。

下面举例说明相关命令行代码:

cd ~/esp/hello_world #切换到用户自己的工程文件夹下,我的工程文档是hello_world
idf.py set-target esp32s3 #设置esp32-s3为目标芯片,根据该目标执行编译和配置
idf.py menuconfig #进入图形配置菜单中(具体项目定义在应用中说明)

编译项目

编译应用程序,引导程序,并根据配置生成分区表。

idf.py build

烧写项目

当构建结束,终端会打印出一条命令行,告知如何使用 esptool.py 工具烧写项目到芯片中。但你也可以运行下面这条命令来自动烧写:

idf.py -p PORT flash

将其中的 PORT 替换为系统中实际串口的名字(比如 Windows 下的 COM3,Linux 下的 /dev/ttyUSB0,或者 macOS 下的 /dev/cu.usbserial-X。如果省略 -p 选项,idf.py flash 会尝试使用第一个可用的串口进行烧写。

这会烧写整个项目(包括应用程序,引导程序和分区表)到芯片中,此外还可以使用 idf.py menuconfig 来调整串口烧写相关的配置。

不必先运行 idf.py build 再运行 idf.py flashidf.py flash 会根据需要自动重新构建项目。

如果使用USB接口下载更新程序,首先需要确认USB接口名称,一般硬件连接完成后,按下Reset按键,然后按下Boot按键,抬起Reset按键,再抬起Boot按键,此时ESP32进入到Download模式。系统中会显示已经连接到该设备,设备名称为/dev/ttyACM0,按照下面的命令行执行焼写项目的动作。

idf.py -p /dev/ttyACM0 flash

在该过程中,如果仍然无法识别端口,则应该是端口权限的问题,需要将该端口添加在dialout用户组,需要执行下面的命令行即可。

ls -l /dev/ttyACM0 #先查看端口是否连接
sudo usermod -aG dialout michealqi #将用户添加到用户组内,确保对端口具备读写权限

注意:以上命令行中的michealqi需要改称自己的用户名。

观察串口输入

idf.py monitor 会调用 esp-idf-monitor 工具来显示乐鑫芯片的串口输出。esp-idf-monitor 还包含一系列的功能来解析程序崩溃后的输出结果并与设备进行交互。更多详细内容,请参阅文档.

输入 Ctrl-] 可退出监视器。

想要一次性执行构建、烧写和监视,可以运行如下命令:

idf.py flash monitor

仅编译并烧写应用程序

在第一次烧写过后,你可能只想构建并烧写你的应用程序,不包括引导程序和分区表:

  • idf.py app - 仅构建应用程序。
  • idf.py app-flash - 仅烧写应用程序。

idf.py app-flash 会自动判断是否有源文件发生了改变然后重新构建应用程序。

(在正常的开发中,即使引导程序和分区表没有发生变化,每次都重新烧写它们并不会带来什么危害。)

擦除 Flash

idf.py flash 并不会擦除 flash 上所有的内容,但是有时候我们需要设备恢复到完全擦除的状态,尤其是分区表发生了变化或者 OTA 应用升级时。要擦除整块 flash 请运行 idf.py erase-flash

这条命令还可以和其余命令整合在一起,idf.py -p PORT erase-flash flash 会擦除一切然后重新烧写新的应用程序、引导程序和分区表。

其它参考资源

  • 最新版的文档:https://docs.espressif.com/projects/esp-idf/ ,该文档是由本仓库 docs 目录 构建得到。

  • 可以前往 esp32.com 论坛 提问,挖掘社区资源。

  • 如果你在使用中发现了错误或者需要新的功能,请先查看 GitHub Issues,确保该问题没有重复提交。

  • 如果你有兴趣为 ESP-IDF 作贡献,请先阅读贡献指南

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值