要让你自己的 ESP-IDF 项目支持 idf.py menuconfig 中配置参数(就像官方示例那样),你需要做三件事:

核心原理

ESP-IDF 使用 Kconfig 系统(源自 Linux 内核)来管理编译时配置。
你只需在项目中添加一个 Kconfig 文件,就能在 menuconfig 中出现自定义选项

🛠 步骤详解

第一步:在项目根目录创建 Kconfig.projbuild

📁 项目结构应类似:

your_project/
├── CMakeLists.txt
└── main/
   ├── CMakeLists.txt
   ├── main.c
   └── Kconfig    ← 新建这个文件!

第二步:编写 Kconfig(示例)

假设你想配置:

  • 扫描目标 SSID
  • 扫描间隔(ms)
  • 是否启用上传功能
    # Kconfig.projbuild
    
    menu "My WiFi Scanner Configuration"
    
        config TARGET_SSID
            string "Target SSID to scan for"
            default "MyHomeWiFi"
            help
                The SSID of the Wi-Fi network you want to monitor.
                Leave empty to scan all networks.
    
        config SCAN_INTERVAL_MS
            int "Scan interval (milliseconds)"
            default 5000
            range 1000 3600000
            help
                Time between each Wi-Fi scan. Minimum: 1000ms (1s)
    
        config ENABLE_UPLOAD
            bool "Enable upload to server"
            default y
            help
                If enabled, scanned results will be sent via HTTP/MQTT.
    
        if ENABLE_UPLOAD
    
        config SERVER_URL
            string "Server URL for upload"
            default "http://192.168.1.100:8080/wifi"
            depends on ENABLE_UPLOAD
    
        endif
    
    endmenu

    说明:

  • menu "...":在 menuconfig 中创建一个子菜单
  • string / int / bool:不同类型的配置项
  • default:默认值
  • range:整数范围限制
  • depends on:条件显示(如只有启用上传才显示 URL)

第三步:在代码中使用这些配置

  • 在你的 C 代码(如 main/main.c)中直接使用宏:
#include "sdkconfig.h"  // ← 必须包含!

// 使用配置
const char* target_ssid = CONFIG_TARGET_SSID;
int scan_interval_ms = CONFIG_SCAN_INTERVAL_MS;

if (CONFIG_ENABLE_UPLOAD) {
    upload_data(CONFIG_SERVER_URL, rssi);
}
  • 编译时,ESP-IDF 会自动生成 sdkconfig.h,其中包含:
#define CONFIG_TARGET_SSID "MyHomeWiFi"
#define CONFIG_SCAN_INTERVAL_MS 5000
#define CONFIG_ENABLE_UPLOAD 1

第四步:测试配置

  • 在项目根目录运行:
idf.py menuconfig
  • 你会看到新菜单(自己添加的在最下面):

Component config  --->

    My WiFi Scanner Configuration  --->
        (MyHomeWiFi) Target SSID to scan for
        (5000) Scan interval (milliseconds)
        [*] Enable upload to server
        (http://...) Server URL for upload
  • 修改后保存退出,编译项目:
idf.py build
  • 配置会自动生效!

📌 高级技巧

1. 只在特定芯片上显示选项

config BLINK_GPIO
    int "GPIO number for LED"
    default 2 if IDF_TARGET_ESP32
    default 8 if IDF_TARGET_ESP32C3
    default 7 if IDF_TARGET_ESP32C6
    range 0 48

2. 依赖其他配置

config USE_TLS
    bool "Use TLS for upload"
    depends on ENABLE_UPLOAD

3. 重载官方配置(谨慎)

一般不建议,但可通过 sdkconfig.defaults 文件预设默认值。

⚠️ 常见问题

问题解决
menuconfig 中看不到我的选项检查文件名是否为 Kconfig是否在main目录下
修改后配置没更新删除 build/ 目录或运行 idf.py fullclean
字符串包含空格出错用双引号包围:default "\"My Network\""

✅ 总结

步骤操作
1创建 Kconfig
2用 Kconfig 语法定义选项
3在 C 代码中通过 CONFIG_XXX 使用
4运行 idf.py menuconfig 配置

🎯 一句话:只要项目里有 Kconfig.projbuild,你的项目就能像官方示例一样拥有图形化配置界面!

    Logo

    北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

    更多推荐