esp32之配置自己的menuconfig
·
要让你自己的 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,你的项目就能像官方示例一样拥有图形化配置界面!
更多推荐

所有评论(0)