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

相关推荐
QN1幻化引擎1 小时前
把 意识评测做成了一场"非侵入实验":不碰生产代码,分数反而更真了
人工智能·算法·架构
冻柠檬飞冰走茶2 小时前
PTA基础编程题目集 7-17 爬动的蠕虫(C语言实现)
c语言·开发语言·数据结构·算法
会编程的土豆2 小时前
LeetCode 热题 HOT100(一):哈希表与双指针入门(Go 实现)
算法·leetcode·职场和发展
学习中.........2 小时前
并行 BPE 训练 与 手写 `Tokenizer`
人工智能·算法·机器学习·语言模型
科学实验家3 小时前
动态规划2
算法·动态规划
imuliuliang12 小时前
关于数据结构在算法设计中的核心作用解析7
算法
2401_8949155314 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
普通网友15 小时前
共识算法实现:从工作量证明到权益证明的演进
算法·区块链·共识算法