esp32开发笔记

Ubuntu下espidf开发环境配置 官方链接

第一步:安装准备

  • ubuntu

    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
    

第二步:获取esp-idf

  • 克隆远程仓库至 ~/esp目录
    mkdir -p ~/esp
    cd ~/esp
    git clone -b v4.3 --recursive https://github.com/espressif/esp-idf.git
    

第三步:设置工具

  • 除了 ESP-IDF 本身,您还需要安装 ESP-IDF 使用的各种工具,比如编译器、调试器、Python 包等。

    cd ~/esp/esp-idf
    ./install.sh
    

    ESP-DIF 实例工程结构

    乐鑫espidf开发入门
    pdf资源

    ESP-IDF 示例工程结构

  • CMakeList.txt: 根目录的 CMakeList 描述了项目的构建行为,每个component中的CMakeList描述了组件的构建行为,例如指定编译哪些 .c 文件,包含哪些 .h 文件.

  • sdkconfig: 保存了项目宏定义,在使用 menuconfig 时自动生成.

  • components:用户组件目录,可自定义组件,也可对IDF_PATH 下的同名组件进行覆盖.

  • main: “伪组件”,与 components 中的组件遵循相同的编译规则,其中的app_main函数为默认的执行入口.

  • build:编译时自动保存的文件,无需修改

myProject/
│── CMakeLists.txt
│── sdkconfig
│── components/
│   ├── component1/
│   │   ├── CMakeLists.txt
│   │   ├── Kconfig
│   │   ├── src1.c
│   ├── component2/
│   │   ├── CMakeLists.txt
│   │   ├── Kconfig
│   │   ├── src1.c
│   │   ├── include/
│   │   │   ├── component2.h
│── main/
│   ├── CMakeLists.txt
│   ├── src1.c
│   ├── src2.c
│── build/

idf.py 常用指令

  • idf.py help: 将输出指令列表和使用说明。
  • idf.py set-target <target>: 设置编译目标,<target> 请替换为 esp32s3 等。
  • idf.py menuconfig: 运行 menuconfig 终端图像化配置工具,可以选择修改配置选项,配置结果将保存在 sdkconfig 文件。
  • idf.py build: 开始编译代码,编译产生的中间文件和最终的可执行程序,将默认保存在项目 build 目录。编译过程是增量式的,如果仅对一个源文件进行修改,下次编译时只重新编译该文件。
  • idf.py fullclean: 删除整个 build 目录下的内容,包括所有 CMake 的配置输出文件。下次构建项目时,CMake 会从头开始配置项目。请注意,该命令会递归删除构建目录下的所有文件,请谨慎使用。
  • idf.py flash: 将 build 生成的可执行程序二进制文件烧录进目标 ESP32-C3 设备中。
    -p <port_name>-b <baud_rate> 选项可分别设置串口的设备名和烧录时的波特率,如果不指定将自动搜索串口,并使用默认波特率。
  • idf.py monitor: 用于显示目标 ESP32-C3 设备的串口输出。同样 -p 选项可用于设置主机端串口的设备名,串口打印期间,可按 Ctrl+] 退出监视器。
  • unset IDF_TARGET: 清除当前项目工程目录下的Target设置,项目编译时根据Target设置选择编译器,编译环境,以及sdkconfig配置生成。

esp32实践笔记

esp32工程项目构建逻辑

全局构建逻辑

构建入口
↓
项目顶层 CMakeLists.txt //通知cmake 该工程为esp32工程,按esp32工程组织main目录.components目录
↓
读取 sdkconfig //这里保存了idf.py menuconfig配置好的工程选项 
↓
找 main/ 代码 //找main/目录下的 CMakeLists.txt告诉构建系统主函数有哪些源文件
↓
找 components/ 模块 //寻找自定义模块集合每个模块有自己小的编译规则。
↓
build/ 生成中间文件 //CMake开始工作,在 `my_project/build/` 里生成大量中间文件
↓
最终生成 .bin/.elf 固件文件

分区表(partitions.csv)的介入规则

  • 第1步:在 sdkconfig 中,指定要用哪个分区表
    CONFIG_PARTITION_TABLE_CUSTOM=y                              //CUSTOM=y ➔ 说明你想用自定义分区表
    CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv"    //自定义分区表路径
    

idf_component.yml的介入规则

  • idf_componet.yml目录结构

    components/组件名/idf_component.yml
    //main/目录也是特殊组件       main/idf_component.yml
    
  • 'idf_component.yml' 作用阈:

    • 自动下载缺失的外部托管组件(到 managed_components/
    • 生成和锁定组件依赖关系(写入 .dependencies.lock
    • 加载本地依赖(override_path:)可以覆盖外部托管组件地址,用本地组件地址替换

工程文件配置方法及注意事项

分区表(partitions.csv)配置

分区名称 类型 (Type) 子类型 (SubType) 必要性 说明
nvs data nvs ✅ 必须 非易失性存储,保存 Wi-Fi、蓝牙配对、用户配置等
phy_init data phy ✅ 必须 PHY 初始化参数,Wi-Fi 启动时加载
factory app factory ✅ 必须(无 OTA) 主程序启动入口,无 OTA 时系统默认从这里运行应用程序
ota_data data ota ✅ 必须(OTA) OTA 状态记录,指示当前运行的是 ota_0 还是 ota_1
ota_0 app ota_0 ✅ 必须(OTA) 第一个 OTA 应用程序存储分区
ota_1 app ota_1 ✅ 必须(OTA) 第二个 OTA 应用程序分区,供轮流升级使用

📌 注:

  • OTA用于远程固件升级;必要分区名称不可随意更改;
  • 如果不启用 OTA 功能,只需要 nvs, phy_init, factory 三个分区即可;
  • 启用 OTA 功能时,必须添加 ota_data, ota_0, ota_1
  • spiffs, fatfs, storage 等是可选的,根据项目需求添加。