资讯动态

esp-adf Wi-Fi Service 例程全解析:从加密 Profile 存储、HTTP/BluFi 配网到网络选择与 MCP 远程管理

发布时间:2026/10/15 17:11:16 来源:尧图企业网站定制
音视频音频处理嵌入式物联网语音【免费下载链接】esp-adfEspressif Advanced Development Framework for Multimedia Applications项目地址https://gitcode.com/gh_mirrors/es/esp-adf点击查看免费下载导读本文基于 esp-adf 仓库中 wifi_service_example 例程系统讲解 ADFesp_wifi_service组件的完整落地方式如何将 Wi-Fi 凭据加密保存到 NVS、通过 HTTP SoftAP / BluFi 多通道配网、使用 selector 做多网络自动选择与质量监测并通过esp_cli_serviceUART REPL 与 MCP 工具远程管理。读完本文你将能够独立编译、烧录、配置并深度定制这个面向量产 IoT 设备的 Wi-Fi 服务示例同时理解其背后的服务化架构与关键源码实现。例程概览一个服务化的 Wi-Fi 应用骨架wifi_service_example是一个难度 ⭐⭐ 的 Regular Example它演示了 ADFesp_wifi_service组件的完整用法。与传统的裸 Wi-Fi 事件回调写法不同本例程把 Wi-Fi 能力封装成 ADF 的 service 形态创建 Wi-Fi service、将 Wi-Fi profile 加密保存到 NVS、启动配网流程、监听 service 事件并通过 CLI service 提供 profile 与配网控制命令。在一个基于 ADF service 的应用中本例程组合了以下组件依赖关系见 main/idf_component.ymlesp_serviceservice 生命周期与事件总线adf_event_hub统一事件分发esp_config_manager可加密的配置存储层HTTP SoftAP 配网内置 Web UI可选 BluFi 配网profile 存储与网络选择selector网络质量监测Internet 探测、延迟与吞吐退化检测。典型场景需要现场配网、持久化保存 Wi-Fi 凭据、自动重连并通过统一 service 接口获取连接状态与配网事件的 IoT 设备。运行机制八步启动流程根据 README.md 的Run Flow例程按以下顺序启动初始化 NVS启用 BluFi 时同时初始化 Bluetooth host对应 app_main.c 中的nvs_flash_init()与init_bt()创建 HTTP 配网 agent可选创建 BluFi 配网 agent配置加密 NVS 作为 Wi-Fi profile 存储配置 selector 触发条件RSSI、Internet 访问探测、延迟退化、吞吐退化创建并启动esp_wifi_service订阅 service 事件并启动esp_cli_serviceUART REPL当CONFIG_ESP_MCP_ENABLE与CONFIG_WIFI_SERVICE_MCP_ENABLE同时启用时注册 Wi-Fi MCP 工具若选择了 UART transport则启动 MCP UART 服务若没有可用 profile则启动配网流程若已有 profile则使用这些 profile 进行连接选择。这套流程在 app_main.c 的app_main()中逐行落地后文将结合源码逐段展开。环境配置硬件要求ESP-IDF 支持的任意 Espressif 开发板用于配网和连接测试的 Wi-Fi AP用于 HTTP 配网的手机仅在测试 BluFi 配网时才需要安装 Espressif BluFi APP 的手机。默认 IDF 分支例程支持 ESP-IDF release/v5.5 及以后分支ADF 仓库默认使用 ESP-IDF release/v5.5。软件要求用于 HTTP 配网的浏览器测试 BluFi 配网时的 Espressif BluFi 手机 APP。编译与烧录编译准备若尚未配置 ESP-IDF 环境先在 ESP-IDF 根目录执行./install.sh . ./export.sh然后进入例程工程目录cd $ADF_PATH/components/esp_wifi_service/examples/wifi_service_example项目配置目标芯片与关键开关编译前先设置目标芯片。例程为 ESP32 和 ESP32-S3 提供了目标相关默认配置idf.py set-target esp32或idf.py set-target esp32s3重要配置项这些开关的定义与依赖关系可在 Kconfig 中逐条核对配置项作用说明Wi-Fi Service→Provisioning agents→Enable HTTP provisioning agent启用 HTTP 配网 agent对应CONFIG_WIFI_SERVICE_PROV_HTTP_ENABLE默认y仅用非 HTTP 配网时可关闭Wi-Fi Service→Provisioning agents→Embed default HTTP provisioning Web UI内置 HTTP 配网 Web UI对应CONFIG_WIFI_SERVICE_PROV_HTTP_DEFAULT_WEBUI_ENABLE默认y关闭后须由应用提供web_ui.dataWi-Fi Service→Provisioning agents→Enable BLUFI provisioning agent启用 BluFi 配网 agent对应CONFIG_WIFI_SERVICE_PROV_BLUFI_ENABLE依赖 ESP-IDF 的BT_BLE_BLUFI_ENABLE或BT_NIMBLE_BLUFI_ENABLEWIFI_SERVICE_SELECTOR_PROBE_ENABLE启用 selector HTTP probe monitor默认n用于 Internet 连通性检查与延迟退化事件WIFI_SERVICE_SELECTOR_THROUGHPUT_ENABLE启用 selector throughput monitor默认n用于吞吐退化检查与事件ESP_MCP_ENABLE启用共享 MCP server 和 transport属于esp_service的全局 MCP 支持WIFI_SERVICE_MCP_ENABLE编译 Wi-Fi MCP tool 支持依赖ESP_MCP_ENABLE默认nESP_MCP_TRANSPORT_UART通过例程的 UART transport 暴露 MCP tools启用后在例程中启动内置 UART MCP server目标相关的 BluFi 默认配置BluFi 依赖 ESP-IDF Bluetooth 选项例程通过两个目标专属 defaults 文件区分蓝牙协议栈sdkconfig.defaults.esp32启用 Bluedroid 协议栈CONFIG_BT_BLUEDROID_ENABLEDy与CONFIG_BT_BLE_BLUFI_ENABLEysdkconfig.defaults.esp32s3启用 NimBLE 协议栈CONFIG_BT_NIMBLE_ENABLEDy与CONFIG_BT_NIMBLE_BLUFI_ENABLEy。如果当前目标未启用 BluetoothHTTP 配网仍可独立使用。此外 sdkconfig.defaults 还预置了CONFIG_ESP_MCP_ENABLEy、CONFIG_WIFI_SERVICE_MCP_ENABLEy、自定义分区表partitions.csv以及必要的 mbedTLS DH 配置BluFi 安全握手依赖CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA/CONFIG_MBEDTLS_DHM_C。覆盖配网 SoftAP 名称与密码默认 HTTP agent 使用内置 Web UI配网 SoftAP SSID 形如ESP_SVC_XXXXXX其中XXXXXX来自设备 SoftAP MAC 地址见esp_wifi_service_prov_softap_config_t在 esp_wifi_service_prov_http.h 中的定义SSID 为 NULL 时使用默认名。如需固定 AP 名称和密码可在 main/app_main.c 中设置http_cfg.softapesp_wifi_service_prov_http_config_t http_cfg { .name http, .softap { .ssid ESP_SVC_DEMO, .password 12345678, .channel 3, .max_connection 4, }, };其中channel为 0 时保持默认/当前信道max_connection为 0 时保持默认最大连接数。编译与烧录命令编译idf.py build烧录并运行串口 monitor将PORT替换为实际端口idf.py -p PORT flash monitor退出 monitor 使用Ctrl-]。提示例程使用自定义分区表 partitions.csv包含nvsdata/nvs0x6000、phy_initdata/phy和factoryapp/factory分区保证 NVS 有充足空间存放加密 profile。如何使用例程UART REPL 与 CLI 命令启动后例程启动esp_wifi_service并打开提示符为wifi的esp_cli_serviceUART REPL实现见 wifi_service_console.c。常用命令help wifi profile list wifi profile add ssid password [priority 0..20] wifi profile del ssid wifi profile clear wifi connect ssid password|- 表示开放 AP [priority 0..20] [wait_sec] wifi prov start wifi prov stop wifi reeval reboot对照 wifi_service_console.c 的实现细节wifi profile list会先打印last_working最近一次成功连接的 SSID来自esp_wifi_service_profile_mgr_get_last_working()再逐条打印ssid... pri... en0/1en 为 profile 的 enabled 标志wifi profile add默认 priority 为10超出ESP_WIFI_SERVICE_PROFILE_PRIORITY_MAX20会被钳制SSID 超过 32 字节、密码超过 64 字节会报错常量定义见 esp_wifi_service_profile_mgr.hwifi profile del ssid按 SSID 删除wifi profile clear清空全部wifi prov start|stop分别调用esp_wifi_service_start_provisioning()/esp_wifi_service_stop_provisioning()wifi reeval调用esp_wifi_service_request_reeval()请求一次 selector 扫描与重评估reboot通过esp_restart()重启设备。测试 HTTP 配网启动例程等待 HTTP agent 启动使用手机或 PC 连接设备的配网 SoftAP打开 captive portal 页面如果系统没有自动弹出页面可手动访问设备网关地址选择或输入目标 AP 的 SSID填写密码并提交设备会尝试连接连接成功后保存 profile并在串口日志中上报 service 事件。HTTP 配网通道在组件层面还暴露了一组 REST API详见 esp_wifi_service 组件 READMEGET /prov/status查询状态、GET /prov/scan_result获取缓存扫描结果按 RSSI 排序、按 SSID 去重、POST /prov/profiles提交凭据、DELETE /prov/profiles?ssid...删除、POST /prov/profiles/enabled启停 profile、POST /prov/stop结束配网。默认内置 Web UI 提供从扫描、填表、提交到 profile 管理与停止配网的完整浏览器交互。直接演示 request_connect如需直接演示esp_wifi_service_request_connect()可执行wifi connect ssid password [priority 0..20] [wait_sec]开放 AP 的密码参数传-wifi_service_console.c 会将其转为空字符串。该命令会保存或更新 profile、请求 selector 驱动连接并等待最多wait_sec秒直到 STA 获取 IP。默认 priority 为10默认等待时间为30秒wait_sec设为0时命令在连接请求被接受后立即返回。其底层语义对应 esp_wifi_service.h 的esp_wifi_service_request_connect(service, ssid, password, prio, wait_sec)保存/更新 profile、按需停止配网并启动 selector然后跳过扫描/重评估直接连接指定 SSID。MCP 远程管理Wi-Fi 工具集启用 MCP 后CONFIG_ESP_MCP_ENABLE与CONFIG_WIFI_SERVICE_MCP_ENABLE同时为y例程向 service manager 注册以下 Wi-Fi 工具注册逻辑见 app_main.c 的wifi_svc_example_start_mcp()esp_wifi_service_get_status esp_wifi_service_list_profiles esp_wifi_service_add_profile esp_wifi_service_set_profile_enabled esp_wifi_service_delete_profile esp_wifi_service_clear_profiles esp_wifi_service_prov_start esp_wifi_service_prov_stop esp_wifi_service_request_reeval值得注意的几点同时见于 esp_wifi_service 组件 READMEMCP 状态与 profile 查询工具不会返回已保存的 Wi-Fi 密码——这是刻意设计add_profile的响应只回显 SSID 与 index不回显 password冒烟测试脚本对此有专门断言工具描述 JSON 由esp_wifi_service_mcp_schema_get()提供工具分发入口为esp_wifi_service_tool_invoke()见 esp_wifi_service_mcp.h若应用把 MCP transport 暴露到不可信的调试通道之外应自行增加认证与传输安全策略。MCP UART 接线与冒烟测试设置CONFIG_ESP_MCP_TRANSPORT_UARTy后本例程启动内置 UART MCP server使用UART_NUM_1波特率 115200宏定义见 app_main.cMCP TXGPIO25连接到 USB-UART 转接器 RXMCP RXGPIO26连接到 USB-UART 转接器 TXGND开发板 GND 与转接器 GND 共地注意README 中的接线描述为 GPIO25/GPIO26而源码宏WIFI_SVC_EX_MCP_UART_TX_IO 17/WIFI_SVC_EX_MCP_UART_RX_IO 18给出了编译期的默认管脚值实际使用以你烧录的固件配置为准可通过 Kconfig 或源码调整。在例程目录下运行 Wi-Fi MCP UART 冒烟测试python3 scripts/test_wifi_service_mcp_uart.py /dev/ttyUSB1 115200该脚本test_wifi_service_mcp_uart.py是一个基于 pyserial 的 JSON-RPC 2.0 行协议客户端会依次校验tools/list是否包含全部 9 个脚本中还额外校验了esp_wifi_service_request_connect共 10 个Wi-Fi 工具、调用esp_wifi_service_get_status断言返回service_state/connected/provisioning_running/profile_count字段、esp_wifi_service_list_profiles、esp_wifi_service_request_reeval加--mutating参数还会执行 add_profile、set_profile_enabled、prov_start/prov_stop 等状态变更操作加--negative参数会校验非法参数返回错误。日志输出解读以下日志片段展示 HTTP agent 启动后的 service 流程I (642) WIFI_SVC_EXAMPLE: Create Wi-Fi service skeleton with 1 agents I (652) WIFI_SERVICE: Init wifi default: station mode started I (672) WIFI_SERVICE: Init wifi_service: agent http ready I (682) WIFI_SERVICE: Init wifi_service: done with 1 agent(s) I (692) WIFI_SVC_EXAMPLE: Start Wi-Fi service I (742) WIFI_SERVICE_HTTP: HTTP server started: port80 ctrl_port32769 I (752) WIFI_SVC_EXAMPLE: Event received: domainwifi_service id4 namePROV_STARTED I (752) WIFI_SVC_EXAMPLE: Payload: namehttp I (762) WIFI_SERVICE_HTTP: HTTP agent started I (772) WIFI_SERVICE: Start provisioning: agent http started (index0) I (782) WIFI_SERVICE: Start wifi_service: all agents started I (792) WIFI_SVC_CONSOLE: CLI service: type help, wifi ... or reboot提交 Wi-Fi 凭据并获取 IP 后关键日志如下I (15432) WIFI_SERVICE_HTTP: HTTP station connect begin: ssidOffice, password_len8, timeout15000ms I (17342) WIFI_SERVICE_HTTP: HTTP station connect success: ssidOffice I (17362) WIFI_SVC_EXAMPLE: Event received: domainwifi_service id8 namePROV_CREDENTIAL_RECEIVED I (17362) WIFI_SVC_EXAMPLE: Payload: namehttp ssidOffice priority10 password_len8 I (17402) WIFI_SVC_EXAMPLE: Event received: domainwifi_service id3 nameSTA_GOT_IP I (17402) WIFI_SVC_EXAMPLE: Payload: ip192.168.1.123 netmask255.255.255.0 gw192.168.1.1 ip_changed0id3/id4/id8对应 esp_wifi_service.h 中的ESP_WIFI_SERVICE_EVENT_STA_GOT_IP111 之前的编号段由底层事件换算、ESP_WIFI_SERVICE_EVENT_PROV_STARTED、ESP_WIFI_SERVICE_EVENT_PROV_CREDENTIAL_RECEIVED等事件标识事件名由esp_service_get_event_name()解析。日志中的Payload:行由例程自己的事件处理函数打印app_main.c它会按事件类型解析不同 payload 结构如wifi_event_sta_connected_t、ip_event_got_ip_t、esp_wifi_service_prov_event_t等。源码级深度解析1. 加密 NVS Profile 存储例程将 Wi-Fi 凭据加密后存入 NVS核心在 app_main.cstatic esp_config_storage_nvs_t s_wifi_profile_store { .nvs_namespace wifi_svc_ex, .key_primary prof_p, .key_backup prof_b, };随后通过esp_config_storage_init_nvs()创建存储句柄再以esp_config_crypto_ops_t挂接 AES-128-CBC 加密/解密回调wifi_svc_ex_profile_encrypt/wifi_svc_ex_profile_decrypt见 app_main.c。加密格式为[IV(16B) | CIPHERTEXT]IV 由esp_fill_random()生成明文中用 PKCS7 方式补齐到 16 字节块crypto_extra_size设置为16*2字节以容纳 IV 与最坏情况的填充膨胀。profile manager 初始化配置WIFI_SVC_EX_PROFILE_MAX_NUM 8esp_wifi_service_profile_mgr_cfg_t profile_cfg { .max_profiles WIFI_SVC_EX_PROFILE_MAX_NUM, .storage s_wifi_profile_storage, .crypto s_profile_crypto_ops, .crypto_extra_size WIFI_SVC_EX_AES_BLOB_OVERHEAD, }; esp_wifi_service_profile_mgr_t profile_manager NULL; ESP_ERROR_CHECK(esp_wifi_service_profile_mgr_init(profile_cfg, profile_manager));从源码结构看若不配置cryptoprofile 将以明文记录存储配置了crypto则每次写入前加密、读取后解密。这正是现场配网 凭据持久化产品最需要的能力之一。2. 双配网 agent 的创建HTTP 与 BluFi agent 都基于统一的esp_wifi_service_prov_t句柄数组agents[2]创建编译期由 Kconfig 裁剪#if CONFIG_WIFI_SERVICE_PROV_HTTP_ENABLE esp_wifi_service_prov_http_config_t http_cfg { .name http, .profile_manager profile_manager, }; ret esp_wifi_service_prov_http_create(http_cfg, agents[agent_count]); ... #if CONFIG_WIFI_SERVICE_PROV_BLUFI_ENABLE esp_wifi_service_prov_blufi_config_t blufi_cfg { .name blufi, .device_name k_blufi_device_name, // BLUFI_DEVICE .profile_manager profile_manager, }; ret esp_wifi_service_prov_blufi_create(blufi_cfg, agents[agent_count]);BluFi 创建返回ESP_ERR_NOT_SUPPORTED时被当作正常分支跳过蓝牙栈不可用其余错误才打印告警。两个 agent共享同一个 profile_manager 句柄保证配网写入与 selector 读取使用同一份凭据存储——这是 esp_wifi_service.h 明确要求的使用约定。3. 自定义 selector 策略例程在 app_main.c 中展示了一套自定义 selector 策略配置字段与 esp_wifi_service_selector.h 一一对应esp_wifi_service_selector_cfg_t selector_policy { .triggers_mask ESP_WIFI_SERVICE_SELECTOR_TRIGGER_RSSI_LOW | ESP_WIFI_SERVICE_SELECTOR_TRIGGER_PROBE_FAILED | ESP_WIFI_SERVICE_SELECTOR_TRIGGER_LATENCY_DEGRADED | ESP_WIFI_SERVICE_SELECTOR_TRIGGER_THROUGHPUT_DEGRADED, .select_order { ESP_WIFI_SERVICE_SELECTOR_CRITERION_PRIORITY, ESP_WIFI_SERVICE_SELECTOR_CRITERION_QUALITY, ESP_WIFI_SERVICE_SELECTOR_CRITERION_PROBE_TRUSTED, }, .rssi { .threshold_dbm -75, // RSSI 低于 -75 dBm 可触发重评估 .check_period_ms 5000, // 5 秒周期 }, .probe { .url http://connectivitycheck.gstatic.com/generate_204, .check_period_min 5, .timeout_ms 5000, .expected_status 204, .blocked_seconds 15, // 探测失败后临时黑名单时长 .latency_check true, .latency_max_ms 1500, .latency_degraded_consecutive 3, .task { .task_core -1, .task_stack 8192, .task_prio 5, .task_ext_stack false }, }, .throughput { .url https://httpbin.org/bytes/4096, .check_period_min 5, .min_kbps 256, // 最低吞吐 256 kbps .max_bytes 4096, .timeout_ms 5000, .blocked_seconds 15, .throughput_degraded_consecutive 3, .task { .task_core -1, .task_stack 8192, .task_prio 5, .task_ext_stack false }, }, };关键设计点可对照组件 README 的 WiFi Selection and Switching 一节触发条件RSSI 过低、Internet 探测失败、延迟连续退化、吞吐连续退化四者通过triggers_mask位或组合排序准则select_order数组决定候选 AP 的排名优先级——先按用户配置的 profile priority如优先办公室网络再按信号质量RSSI最后按最近一次探测可信度HTTP-OK 历史防抖策略延迟/吞吐采用连续 N 次退化才触发事件latency_degraded_consecutive/throughput_degraded_consecutive 3避免一次抖动导致频繁切换临时黑名单探测失败或质量退化的 BSSID 会被暂时避开blocked_seconds 15防止反复重连到不可用的 AP重试行为selector_policy.retry未设置时使用内置扫描退避表1000, 5000, 10000, 20000, 30000msmax_connect_retry 0表示连接失败后持续重试内置默认策略把selector_policy置为NULL则使用内置策略——低 RSSI 时重评估再按探测可信度、信号质量、profile 优先级依次选择候选。4. service 创建、事件订阅与 STA 配置回调esp_wifi_service_config_t cfg { .name wifi_service, .profile_manager profile_manager, .prov_list agent_count 0 ? agents : NULL, .prov_num agent_count, .selector_policy selector_policy, }; ESP_ERROR_CHECK(esp_wifi_service_create(cfg, wifi_service)); esp_service_t *service_base (esp_service_t *)wifi_service; adf_event_subscribe_info_t sub_info ADF_EVENT_SUBSCRIBE_INFO_DEFAULT(); sub_info.event_id ADF_EVENT_ANY_ID; sub_info.handler wifi_event_handler; sub_info.handler_ctx service_base; ESP_ERROR_CHECK(esp_service_event_subscribe(service_base, sub_info)); ESP_ERROR_CHECK(esp_service_start(service_base));事件处理函数wifi_event_handler()对几乎所有 service 事件做了 payload 解析打印其中两个值得关注的业务用法ESP_WIFI_SERVICE_EVENT_PROV_PEER_DISCONNECTED配网对端断开后如果 profile 管理器中已存在 profileesp_wifi_service_profile_mgr_count() 0例程会自动调用esp_wifi_service_stop_provisioning()把流程切换到 selector 连接阶段ESP_WIFI_SERVICE_EVENT_STA_CONFIG在配网通道或 selector 调用esp_wifi_set_config()之前发布例程在同步回调中把info-config-sta.listen_interval设为3统一作用于 HTTP 配网、BluFi 配网、selector 切换和直接连接请求WIFI_SVC_EX_STA_LISTEN_INTERVAL。5. MCP 注册与 UART transportwifi_svc_example_start_mcp()展示了将 Wi-Fi service 挂到 MCP server 的标准姿势esp_service_manager_config_t mgr_cfg ESP_SERVICE_MANAGER_CONFIG_DEFAULT(); esp_service_manager_create(mgr_cfg, mgr); esp_wifi_service_mcp_schema_get(wifi_schema); // 内嵌工具描述 JSON esp_service_registration_t wifi_reg { .service (esp_service_t *)wifi_service, .category network, .tool_desc wifi_schema, .tool_invoke esp_wifi_service_tool_invoke, }; esp_service_manager_register(mgr, wifi_reg);随后在CONFIG_ESP_MCP_TRANSPORT_UART下创建 UART transport 与 MCP serverserver_name wifi-service-example并启动。这样外部主机即可通过串口以 JSON-RPC 行协议调用 Wi-Fi 工具实现无网络状态下的远程配网与管理。6. 自动化测试佐证例程配套的 pytest_esp_wifi_service_example.py 会在 esp32 / esp32s3 双目标上验证启动日志先匹配Create Wi-Fi service skeleton with \d agents再匹配Start Wi-Fi service。组件级测试位于 esp_wifi_service/test_apps覆盖 profile manager、provisioning、selector、MCP 与存储等单元逻辑可作为深入研读的入口。故障排除BluFi agent 未创建BluFi 只有在启用对应 ESP-IDF Bluetooth BluFi 选项时才会被编译进工程对应CONFIG_WIFI_SERVICE_PROV_BLUFI_ENABLE及其依赖。请使用idf.py set-target esp32或idf.py set-target esp32s3让目标相关 defaults 生效然后检查Wi-Fi Service配网菜单与 ESP-IDF Bluetooth 菜单。找不到配网 SoftAP当前例程没有设置http_cfg.softapHTTP agent 会使用默认的ESP_SVC_XXXXXXSoftAP 名称。测试时如需固定 AP 名称和密码请在 main/app_main.c 中配置http_cfg.softap.ssid和http_cfg.softap.password。HTTP 配网页面没有自动弹出部分操作系统不会稳定弹出 captive portal 页面。连接配网 SoftAP 后可手动打开浏览器访问设备网关地址默认网关通常为192.168.4.1以实际日志为准。重新烧录后 profile 仍然存在profile 保存在 NVS 中普通应用烧录不会清除。可使用以下任一方式清除wifi profile clear或idf.py erase-flash总结wifi_service_example是理解 ADFesp_wifi_service组件的最佳入口它以服务化方式把凭据加密存储、多通道配网、自动选择、质量监测与远程管理整合进一个统一的 service 接口天然适合需要现场配网、持久化凭据、自动重连与集中事件管理的量产 IoT 设备。通过本文的编译配置、CLI 操作、MCP 冒烟测试与源码级解析你可以快速把该例程跑起来并在此基础上按产品需求定制 SoftAP、selector 策略、STA 参数乃至自定义配网通道。相关阅读组件完整 API 与 HTTP REST 接口详见 esp_wifi_service 组件 README单元测试见 esp_wifi_service/test_apps。赞分享音视频音频处理嵌入式物联网语音【免费下载链接】esp-adfEspressif Advanced Development Framework for Multimedia Applications项目地址https://gitcode.com/gh_mirrors/es/esp-adf点击查看免费下载相关推荐esp-adf Wi-Fi Service 全解析多通道配网、Profile 管理与智能网络选择esp adf Wi Fi Service 全解析多通道配网、Profile 管理与智能网络选择 esp adf 的 Wi Fi Service 将设备联网流音视频音频处理嵌入式物联网语音小智xiaozhi-esp32BluFi 配网完全指南基于 esp-wifi-connect 的 BLE Wi-Fi 配网实战小智xiaozhi esp32BluFi 配网完全指南基于 esp wifi connect 的 BLE Wi Fi 配网实战 本文档面向使用小智xia人工智能大模型语音交互助手嵌入式物联网智能硬件MCP 服务Ventoy 字体手把手教程3 分钟换掉启动菜单模糊字Ventoy 字体手把手教程3 分钟换掉启动菜单模糊字 半夜重装系统U 盘一插屏幕上的启动菜单字号小得像蚂蚁看两分钟眼睛就酸。读完这篇 Ventoy 字操作系统固件开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑