《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 感知世界

相关推荐
辰烨chenye1 小时前
LeetCode Hot 100 题解 · 普通数组篇
算法·leetcode·职场和发展
hqyjzsb4 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
辰烨chenye4 小时前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode
微功夫信息技术4 小时前
分层多智能体强化学习驱动的非急救转运公平 - 效率统一调度系统研究与实践
人工智能·学习·算法·动态规划
sanjiaomao3335 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
乐迪信息5 小时前
如何通过AI防爆摄像机精准判断船舶超速?
大数据·人工智能·算法·安全·目标跟踪
大圣编蚕6 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
小玮看世界7 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法
黎阳之光7 小时前
数字孪生赋能全域水网,实现水资源管控与节水降碳双向提升
人工智能·物联网·算法·安全·数字孪生
随意起个昵称7 小时前
【BFS】冰面滑行
算法·宽度优先