1. ESP-IDF概述
- 提供一套库函数,在此基础上可以快捷开发我们的应用。
2 .ESP-IDF SDK目录总览
3. 安装开发环境
- 以下环境命令基于Linux,可以使用vm虚拟机安装Ubuntu系统。
- 更换Linux镜像源
- 安装详细教程:https://docs.espressif.com/projects/esp-idf/zh_CN/v4.3.2/esp32c3/get-started/index.html#get-started-get-prerequisites
- 安装依赖软件包
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
- 在 Linux 中添加用户到 dialout,当前登录用户应当可以通过 USB 对串口进行读写操作。在多数 Linux 版本中,您都可以通过以下命令,将用户添加到 dialout 组,从而获许读写权限:
sudo usermod -a -G dialout $USER
- 下载ESP-IDF包代码,新建一个目录存放,其中可以下载指定版本的ESP-IDF。
mkdir -p ~/esp
cd ~/esp
git clone -b v4.3.4 --recursive https://github.com/espressif/esp-idf.git
- 由于GitHub下载较慢,我们可以转到gitee下载。
git clone -b v4.3.4 https://gitee.com/EspressifSystems/esp-idf.git
git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git
cd esp-gitee-tools
export EGT_PATH=$(pwd)
cd ~/esp/esp-idf
$EGT_PATH/submodule-update.sh
- 安装ESP-IDF开发工具链,但由于访问GitHub缓慢,需要更换源地址访问下载。
cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
pip --version
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
pip config set global.trusted-host mirrors.aliyun.com
./install.sh
- 设置环境变量,刚刚安装的工具尚未添加至 PATH 环境变量,无法通过“命令窗口”使用这些工具。因此,必须设置一些环境变量,这可以通过 ESP-IDF 提供的另一个脚本完成。
. ./export.sh
- IDF环境是基于python虚拟环境的,所以每次打开终端都需要运行export.sh脚本才能正常使用idf.py命令, 因此通过以下的设置,在需要IDF的终端中输入
get_idf
就导入了IDF的编译环境!
- 至此,开发环境配置完成。
- 试验一下,我们可以复制esp-idf/examples/get-started/blink工程出来,并打开终端运行以下命令来试验。
get_idf
idf.py set-target esp32c3
idf.py menuconfig
idf.py -p /dev/ttyUSB0 flash
idf.py -p /dev/ttyUSB0 monitor
- 从上面的环境设置中,包括下载,编译调试代码都是使用终端工具的,不利于我们开发,因此可以安装VS Code,并安装插件,实现ESP-IDF代码的编译调试和运行,是非常方便的,以下方式可适用于window下vscode。
4. ESP-IDF编译系统
- 工程基本目录架构
main
目录:仅可包含一个main目录,定义了用户入口函数app_main
。sdkconfig
:配置文件,由编译系统自动生成。build
目录:编译产生的中间件。CMakeLists.txt
:重要的编译脚本,用户不仅需要编写源代码,还需要编写工程和组件中的CMakeLists.txt
文件,CMakeLists.txt
文件用于描述编译设置等,这需要我们了解一些cmake的用法。- ESP-IDF是默认运行freeRTOS的,即是基于多任务编程,包括入口函数
app_main
其实是属于main()线程的回调。 - 路径
5. 实现一个自定义vscode模板工程
-
从3章节可知,如果用命令行开发是非常繁琐的,特别是不熟悉Linux命令的同学,而使用vscode开发就是一个不错的方法,但随着要实现的功能增多,通常会将ESP-IDF的多个组件组合在一起,也会添加更多的逻辑代码,为了能够代码复用和目录架构清晰,我们需要一个模板工程来进行简单的操作管理,而且该模板工程同时也应该支持命令行的编译调试方法。
-
按照3章节的开发环境搭建后,创建了一个VScode工程,我们将该工程复制一份到其他位置(重要),并命名为esp32_project。
-
确认根目录下的
CMakeLists.txt
文件是否存在。
-
确认根目录下的
Makefile
文件是否存在。
-
确认
main
目录下的CMakeLists.txt
文件是否存在。
-
指定taget目标,指定后会自动生成
sdkconfig
文件。
-
此时先清除一下工程,然后编译工程并下载到目标板试验一下。
-
在工程根目录添加一个目录存放我们自定义的文件。
-
接下来修改顶层
CMakeLists.txt
文件,告知构建系统自定义组件的位置所在。
-
使用自定义组件并编译运行。
-
至此,一个标准的模板工程创建成功,按照这样目录分类,便于代码复用,也方便添加所需的自定义组件。
6. 配置文件
- 通常,我们会把一些经常修改的设置定义为宏,然后修改宏,就能够实现设置的全局更改,在这里我们可以使用菜单的方式,通过图形化来配置,需要创建
Kconfig.projbuild
文件。
- 使用定义
- 使用图形配置
- 其实图形化配置跟代码中宏定义设置差不多,最终目的都是修改宏定义来达到全局修改代码。
引用
- 本文引用了《ESP32-C3 物联网工程开发实战》,仅作笔记学习交流,侵删。
- 本文引用乐鑫官网文档https://idf.espressif.com 。