《ESP32 物联网全栈实战-02》ESP-IDF 工程结构

第 2 篇:ESP-IDF 工程结构------别再用 Arduino 了

ESP-IDF 的工程结构和 Keil/IAR 完全不同。如果上来就用 Arduino IDE 写完这个专栏,量产时你会后悔。这篇帮你一次性理解 ESP-IDF 的组件系统和构建流程。


1. 工程目录结构

bash 复制代码
my_iot_project/
├── CMakeLists.txt           # 顶层 CMake
├── sdkconfig                # menuconfig 生成的配置
├── main/
│   ├── CMakeLists.txt       # idf_component_register(SRCS "main.c")
│   └── main.c               # app_main() 入口
├── components/
│   ├── sht30/               # 温湿度传感器驱动
│   │   ├── CMakeLists.txt
│   │   ├── sht30.h
│   │   └── sht30.c
│   ├── wifi_manager/        # WiFi 管理组件
│   │   ├── CMakeLists.txt
│   │   ├── wifi_manager.h
│   │   └── wifi_manager.c
│   └── mqtt_client/         # MQTT 客户端组件
│       ├── CMakeLists.txt
│       ├── mqtt_client.h
│       └── mqtt_client.c
└── partitions.csv           # 分区表

组件(Component)= 独立的 .c/.h + CMakeLists.txt = 可复用的软件模块。


2. app_main() 不是 main()

c 复制代码
// ESP-IDF 中你的入口是 app_main(),不是 main()
void app_main(void)
{
    // 1. 初始化 NVS(非易失存储,WiFi 凭据存这里)
    nvs_flash_init();

    // 2. 初始化网络
    wifi_init_sta();

    // 3. 初始化传感器
    sht30_init();

    // 4. 创建任务
    xTaskCreate(sensor_task, "sensor", 4096, NULL, 5, NULL);
    xTaskCreate(mqtt_task,   "mqtt",   8192, NULL, 4, NULL);
}

底层 main() 已经被 ESP-IDF 框架实现了------初始化 FreeRTOS、启动第二核心、加载分区表、然后才调你的 app_main()。


bash 复制代码
idf.py menuconfig
# → 图形界面配置:
#   - WiFi SSID / Password
#   - CPU 频率 (80/160/240 MHz)
#   - Flash 大小
#   - FreeRTOS tick rate
#   - 堆大小
#   - 日志级别

所有配置保存在 sdkconfig 文件中,make menuconfig 自动生成 sdkconfig.h 供代码使用:

c 复制代码
#include "sdkconfig.h"
printf("CPU freq: %d MHz\n", CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ);

4. 构建与烧录

bash 复制代码
idf.py set-target esp32c3      # 选择芯片
idf.py menuconfig              # 配置
idf.py build                   # 编译
idf.py -p COM3 flash           # 烧录
idf.py -p COM3 monitor         # 串口监视(Ctrl+] 退出)

下一篇:GPIO + 传感器驱动------让 ESP32 感知世界

相关推荐
yuniko-n4 小时前
【算法】约瑟夫环问题
java·算法
l1t5 小时前
测试DuckDB v2.1.0-alpha49002的bignum乘法
数据库·sql·算法·duckdb
Nil2085 小时前
LeetCode 283移动零
数据结构·算法·leetcode
CQU_JIAKE5 小时前
10.18【A】
算法
LMT流氓兔5 小时前
第五单元——第4课:给工具参数加校验
java·前端·算法·ai·langchain
物联网软硬件开发-轨物科技6 小时前
【轨物方案】深度解读开关柜智能感知及一键顺控专家系统
大数据·运维·网络·人工智能·算法·机器人
行者全栈架构师6 小时前
我用 TRAE Work 把桌游之夜搬进了浏览器:一个计分器的从创意到上线
前端·算法·架构
YFJ_mily6 小时前
【10-12月优质学术会议合集】会议覆盖人工智能、大数据、高端装备、软件与网络安全 、计算机视觉技术等热门方向
算法·安全·web安全·网络安全·软件·rdlink研发家
库玛西7 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法
库玛西7 小时前
计算机网络第三章:数据链路层
服务器·网络·计算机网络·考研·算法·面试