admin管理员组

文章数量:1130349

ESP32 SoftAP配网:让设备“自己开热点”,用户一键连上家Wi-Fi 🌐

你有没有试过给一个没屏幕的小设备配网?比如买了一个智能插座,说明书上写着:“长按5秒进入配网模式”——然后呢?接下来就是一头雾水:它不发光、不说话、也不弹窗。你打开手机Wi-Fi列表,看到个叫 ESP32_Config_Mode 的陌生名字,心里打鼓:“这玩意儿真的是我家那个新买的吗?”

别急,这就是我们今天要聊的主角—— ESP32 的 SoftAP 配网模式 。它的核心思路特别简单粗暴又聪明:

“我自己当个热点,你连上来告诉我你家Wi-Fi密码,完事我就去连你家路由器。” 💡

听起来是不是有点像“先借你的热点上网,再让我连你家宽带”?没错!这种“反向操作”的设计,在无屏嵌入式设备中简直是救星般的存在。


为啥SoftAP这么香?🔥

在物联网世界里,不是每个设备都能装屏幕和键盘的。想象一下,给100个温湿度传感器一个个输密码?那画面太美不敢看 😵‍💫。

而 ESP32 这颗芯片,天生自带 Wi-Fi + 蓝牙双模能力,还支持一种叫 SoftAP(软件接入点) 的模式——也就是说,它不仅能当“客户端”去连别人的Wi-Fi,还能摇身一变,变成一个“迷你路由器”,对外广播自己的SSID,等你来连接。

这样一来,配网过程就变成了:
1. 设备上电 → 自动开启热点;
2. 手机连上这个热点;
3. 浏览器访问 http://192.168.4.1
4. 输入家里Wi-Fi的账号密码;
5. 提交!设备保存信息并尝试联网;
6. 成功后自动关闭热点,恢复正常工作。

整个过程完全不需要额外App、二维码扫描或蓝牙辅助,纯靠标准浏览器搞定,跨平台兼容性拉满 ✅。

而且更妙的是:如果以后断网了,设备还能自动重启SoftAP,让用户重新配置——相当于自带“失联自救”功能,系统鲁棒性直接起飞 🚀。


技术拆解:它是怎么做到的?🔧

先搞清楚角色切换:AP vs STA

ESP32 的 Wi-Fi 支持多种工作模式,其中两个最常用的是:

  • Station (STA) 模式 :作为客户端,去连接外部Wi-Fi网络(比如你家的路由器);
  • SoftAP 模式 :作为服务端,自己创建一个Wi-Fi热点,别人来连我。

SoftAP配网的本质,就是让设备先当“老板”(AP),等人把Wi-Fi信息交给它;然后再切回“打工人”身份(STA),拿着凭证去连真正的主网。

它们可以独立运行,也可以共存(AP+STA同时启用),不过一般配网阶段只需要单独开AP就够了。


核心流程走一遍 🔄

整个配网链路其实很清晰,就像一场精心编排的“交接仪式”:

  1. 启动SoftAP
    - 初始化Wi-Fi模块;
    - 设置热点名称(SSID)、密码、信道;
    - 开启DHCP服务器,给连进来的手机分配IP地址(通常是 192.168.4.x );
    - 绑定固定IP 192.168.4.1 ,方便用户访问。

  2. 用户连接 & 访问网页
    - 手机搜到名为 ESP32_Config_Mode 的热点,输入密码连上;
    - 打开浏览器访问 http://192.168.4.1
    - ESP32 内置轻量级HTTP服务器返回一个HTML页面,让你填SSID和密码。

  3. 提交配置 & 切换模式
    - 用户点击“连接”,表单数据通过POST发送到ESP32;
    - 解析出目标Wi-Fi信息,写入NVS(非易失存储);
    - 关闭AP模式,切换为STA模式,尝试连接家庭网络;
    - 成功则退出配网状态,失败则提示重试或保持热点开放。

  4. 反馈结果
    - 页面显示“正在连接…”;
    - 可配合LED指示灯:快闪=等待配置,常亮=已联网,红灯闪烁=密码错误。

整个过程形成闭环,用户体验接近“傻瓜式操作”。


动手实现:代码怎么写?💻

下面这段基于 ESP-IDF 的代码,展示了如何用 C 实现完整的 SoftAP 配网逻辑。

#include "esp_wifi.h"
#include "esp_event.h"
#include "nvs_flash.h"
#include "esp_http_server.h"

// 存储Wi-Fi配置
static wifi_config_t sta_config;

// 启动SoftAP模式
void start_softap() {
    // 初始化NVS(用于保存Wi-Fi密码)
    nvs_flash_init();

    // 网络初始化
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_ap();

    // Wi-Fi初始化
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);

    // 配置AP参数
    wifi_config_t ap_config = {
        .ap = {
            .ssid = "ESP32_Config_Mode",
            .ssid_len = strlen("ESP32_Config_Mode"),
            .channel = 1,
            .password = "config1234",         // 至少8位
            .max_connection = 4,
            .authmode = WIFI_AUTH_WPA2_PSK,  // 推荐使用WPA2加密
            .pmf_cfg = {.required = false},
        },
    };

    // 启动AP
    esp_wifi_set_mode(WIFI_MODE_AP);
    esp_wifi_set_config(WIFI_IF_AP, &ap_config);
    esp_wifi_start();

    printf("✅ SoftAP已启动 | SSID: %s | 密码: %s\n", 
           ap_config.ap.ssid, ap_config.ap.password);
}

📌 小贴士:
- 如果不想设密码,可以把 authmode 改成 WIFI_AUTH_OPEN ,但会降低安全性⚠️;
- 建议设置合理的最大连接数(如4个),避免资源耗尽;
- 使用静态IP 192.168.4.1 是行业惯例,用户容易记住。


加个网页界面?安排!🌐

光有热点还不够,得让人能输入Wi-Fi信息才行。这时候就得请出 esp_http_server 组件,搭个微型Web服务。

httpd_handle_t server = NULL;

// 主页处理器:返回HTML表单
esp_err_t root_handler(httpd_req_t *req) {
    const char* html = 
        "<h2>📶 ESP32 Wi-Fi 配置</h2>"
        "<form method='POST' action='/connect'>"
        "  <label>SSID:</label><br>"
        "  <input type='text' name='ssid'><br><br>"
        "  <label>Password:</label><br>"
        "  <input type='password' name='password'><br><br>"
        "  <input type='submit' value='🚀 连接'>"
        "</form>";

    httpd_resp_send(req, html, HTTPD_RESP_USE_STRLEN);
    return ESP_OK;
}

// 处理提交请求
esp_err_t connect_handler(httpd_req_t *req) {
    char ssid[32] = {0}, password[64] = {0};
    size_t len = MIN(req->content_len, sizeof(ssid) - 1);

    // 读取POST数据(简化处理)
    httpd_req_recv(req, ssid, len);

    // 简单解析密码字段(生产环境建议用form parser)
    char *pw_pos = strstr(ssid, "password=");
    if (pw_pos) {
        sscanf(pw_pos, "password=%[^&]", password);
    }

    // 切换到STA模式并连接
    esp_netif_create_default_wifi_sta();
    esp_wifi_set_mode(WIFI_MODE_STA);

    memset(&sta_config, 0, sizeof(sta_config));
    snprintf((char*)sta_config.sta.ssid, 32, "%s", ssid);
    snprintf((char*)sta_config.sta.password, 64, "%s", password);

    esp_wifi_set_config(WIFI_IF_STA, &sta_config);
    esp_wifi_connect();

    // 返回响应
    httpd_resp_send(req, 
        "<p>🔄 正在连接...请查看串口日志确认状态。</p>"
        "<a href='/'>⬅️ 返回重试</a>", 
        HTTPD_RESP_USE_STRLEN);

    return ESP_OK;
}

// 启动HTTP服务器
void start_webserver() {
    httpd_config_t config = HTTPD_DEFAULT_CONFIG();
    httpd_start(&server, &config);

    // 注册路由
    httpd_uri_t uri_get = {
        .uri       = "/",
        .method    = HTTP_GET,
        .handler   = root_handler,
        .user_ctx  = NULL
    };
    httpd_register_uri_handler(server, &uri_get);

    httpd_uri_t uri_post = {
        .uri       = "/connect",
        .method    = HTTP_POST,
        .handler   = connect_handler,
        .user_ctx  = NULL
    };
    httpd_register_uri_handler(server, &uri_post);

    printf("🌍 Web服务器已启动,访问 http://192.168.4.1\n");
}

✨ 进阶建议:
- 可结合 mDNS 实现域名访问,比如 http://esp32-config.local ,比记IP友好多了;
- 添加 /status 接口返回当前连接状态,便于前端轮询;
- 使用 HTTPS 或 Token 认证提升安全性(尤其在公共场合);


实际应用场景与优化技巧 🧰

典型架构图 🖼️

+------------------+     +---------------------+
|   手机/PC用户      |<--->| ESP32 (SoftAP模式)   |
| 浏览器访问网页     |     | - AP热点: 192.168.4.1|
| 输入Wi-Fi凭证      |     | - HTTP Server       |
+------------------+     +----------+----------+
                                    |
                                    v
                           +--------+---------+
                           | 存储配置 -> 切换STA |
                           | 连接家庭Wi-Fi       |
                           +---------------------+

实战中的坑与对策 🛠️

问题 解决方案
多台设备同名冲突 在SSID后加MAC地址尾段,如 ESP32_Config_8A2F
用户忘记关闭Wi-Fi 设置超时机制(3~5分钟未配置自动关AP)
配网失败怎么办 LED慢闪提示错误,支持长按重置
断网后无法恢复 检测心跳包丢失,自动重启SoftAP进入配网态
安全性不足 启用WPA2密码保护,限制连接时间

最佳实践 checklist ✅

  • ✅ 使用 NVS 持久化存储 Wi-Fi 凭证;
  • ✅ 上电先检查是否有有效配置,避免频繁进配网模式;
  • ✅ 提供明确的状态指示(LED、蜂鸣器等);
  • ✅ 支持“一键复位”功能(长按按键清除NVS);
  • ✅ 结合 OTA 升级,实现固件与配置分离更新;
  • ✅ 日志输出详细连接过程,便于调试。

和其他配网方式比,谁更强?🥊

现在市面上还有不少配网方案,比如:

  • SmartConfig(一键配网) :手机APP发UDP广播,设备监听抓取;
  • 蓝牙辅助配网 :通过BLE传Wi-Fi信息;
  • 二维码扫码配网 :设备显示二维码,手机扫后传输信息;
  • 声波/光闪编码 :冷门但有趣……

相比之下,SoftAP的优势非常明显:

对比项 SoftAP SmartConfig BLE配网
是否需要App ❌ 不需要 ✅ 需要 ✅ 需要
兼容性 ⭐⭐⭐⭐⭐(任何浏览器) ⭐⭐(部分安卓机型失效) ⭐⭐⭐(需蓝牙支持)
安全性 ⭐⭐⭐⭐(可加密热点) ⭐⭐(明文传输风险) ⭐⭐⭐
用户体验 ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
开发难度 ⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐

所以结论很明确:
👉 如果你追求稳定、免App、跨平台通用,SoftAP依然是首选方案

虽然它多了一步“手动连热点”的操作,但换来的是极高的成功率和广泛的设备兼容性,尤其是在工业部署、批量调试场景下,简直不要太香。


写在最后:小功能,大价值 🎯

SoftAP配网看似只是个小功能,但它背后解决的是物联网落地的关键一环—— 如何让用户轻松地把设备接入网络

它不炫技,不依赖特定生态,也不怕系统升级导致协议失效。正因如此,哪怕在今天各种“黑科技配网”层出不穷的时代,SoftAP仍然是许多成熟产品的标配方案。

未来,我们可以进一步融合:
- mDNS 实现 .local 域名访问;
- OTA 自动升级固件;
- HTTPS 加密通信防止中间人攻击;
- WebSocket 实现实时状态推送;
- 甚至结合微信小程序做引导页美化体验……

但无论怎么演进, 核心思想不变:让用户用最熟悉的方式,完成最复杂的底层配置

而这,正是优秀嵌入式设计的魅力所在 ❤️。

🔦 温馨提示:下次你看到一个默默发光的小盒子,不妨试试连它的热点看看——说不定,它正等着你帮它“回家”呢 😉

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

ESP32 SoftAP配网:让设备“自己开热点”,用户一键连上家Wi-Fi 🌐

你有没有试过给一个没屏幕的小设备配网?比如买了一个智能插座,说明书上写着:“长按5秒进入配网模式”——然后呢?接下来就是一头雾水:它不发光、不说话、也不弹窗。你打开手机Wi-Fi列表,看到个叫 ESP32_Config_Mode 的陌生名字,心里打鼓:“这玩意儿真的是我家那个新买的吗?”

别急,这就是我们今天要聊的主角—— ESP32 的 SoftAP 配网模式 。它的核心思路特别简单粗暴又聪明:

“我自己当个热点,你连上来告诉我你家Wi-Fi密码,完事我就去连你家路由器。” 💡

听起来是不是有点像“先借你的热点上网,再让我连你家宽带”?没错!这种“反向操作”的设计,在无屏嵌入式设备中简直是救星般的存在。


为啥SoftAP这么香?🔥

在物联网世界里,不是每个设备都能装屏幕和键盘的。想象一下,给100个温湿度传感器一个个输密码?那画面太美不敢看 😵‍💫。

而 ESP32 这颗芯片,天生自带 Wi-Fi + 蓝牙双模能力,还支持一种叫 SoftAP(软件接入点) 的模式——也就是说,它不仅能当“客户端”去连别人的Wi-Fi,还能摇身一变,变成一个“迷你路由器”,对外广播自己的SSID,等你来连接。

这样一来,配网过程就变成了:
1. 设备上电 → 自动开启热点;
2. 手机连上这个热点;
3. 浏览器访问 http://192.168.4.1
4. 输入家里Wi-Fi的账号密码;
5. 提交!设备保存信息并尝试联网;
6. 成功后自动关闭热点,恢复正常工作。

整个过程完全不需要额外App、二维码扫描或蓝牙辅助,纯靠标准浏览器搞定,跨平台兼容性拉满 ✅。

而且更妙的是:如果以后断网了,设备还能自动重启SoftAP,让用户重新配置——相当于自带“失联自救”功能,系统鲁棒性直接起飞 🚀。


技术拆解:它是怎么做到的?🔧

先搞清楚角色切换:AP vs STA

ESP32 的 Wi-Fi 支持多种工作模式,其中两个最常用的是:

  • Station (STA) 模式 :作为客户端,去连接外部Wi-Fi网络(比如你家的路由器);
  • SoftAP 模式 :作为服务端,自己创建一个Wi-Fi热点,别人来连我。

SoftAP配网的本质,就是让设备先当“老板”(AP),等人把Wi-Fi信息交给它;然后再切回“打工人”身份(STA),拿着凭证去连真正的主网。

它们可以独立运行,也可以共存(AP+STA同时启用),不过一般配网阶段只需要单独开AP就够了。


核心流程走一遍 🔄

整个配网链路其实很清晰,就像一场精心编排的“交接仪式”:

  1. 启动SoftAP
    - 初始化Wi-Fi模块;
    - 设置热点名称(SSID)、密码、信道;
    - 开启DHCP服务器,给连进来的手机分配IP地址(通常是 192.168.4.x );
    - 绑定固定IP 192.168.4.1 ,方便用户访问。

  2. 用户连接 & 访问网页
    - 手机搜到名为 ESP32_Config_Mode 的热点,输入密码连上;
    - 打开浏览器访问 http://192.168.4.1
    - ESP32 内置轻量级HTTP服务器返回一个HTML页面,让你填SSID和密码。

  3. 提交配置 & 切换模式
    - 用户点击“连接”,表单数据通过POST发送到ESP32;
    - 解析出目标Wi-Fi信息,写入NVS(非易失存储);
    - 关闭AP模式,切换为STA模式,尝试连接家庭网络;
    - 成功则退出配网状态,失败则提示重试或保持热点开放。

  4. 反馈结果
    - 页面显示“正在连接…”;
    - 可配合LED指示灯:快闪=等待配置,常亮=已联网,红灯闪烁=密码错误。

整个过程形成闭环,用户体验接近“傻瓜式操作”。


动手实现:代码怎么写?💻

下面这段基于 ESP-IDF 的代码,展示了如何用 C 实现完整的 SoftAP 配网逻辑。

#include "esp_wifi.h"
#include "esp_event.h"
#include "nvs_flash.h"
#include "esp_http_server.h"

// 存储Wi-Fi配置
static wifi_config_t sta_config;

// 启动SoftAP模式
void start_softap() {
    // 初始化NVS(用于保存Wi-Fi密码)
    nvs_flash_init();

    // 网络初始化
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_ap();

    // Wi-Fi初始化
    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);

    // 配置AP参数
    wifi_config_t ap_config = {
        .ap = {
            .ssid = "ESP32_Config_Mode",
            .ssid_len = strlen("ESP32_Config_Mode"),
            .channel = 1,
            .password = "config1234",         // 至少8位
            .max_connection = 4,
            .authmode = WIFI_AUTH_WPA2_PSK,  // 推荐使用WPA2加密
            .pmf_cfg = {.required = false},
        },
    };

    // 启动AP
    esp_wifi_set_mode(WIFI_MODE_AP);
    esp_wifi_set_config(WIFI_IF_AP, &ap_config);
    esp_wifi_start();

    printf("✅ SoftAP已启动 | SSID: %s | 密码: %s\n", 
           ap_config.ap.ssid, ap_config.ap.password);
}

📌 小贴士:
- 如果不想设密码,可以把 authmode 改成 WIFI_AUTH_OPEN ,但会降低安全性⚠️;
- 建议设置合理的最大连接数(如4个),避免资源耗尽;
- 使用静态IP 192.168.4.1 是行业惯例,用户容易记住。


加个网页界面?安排!🌐

光有热点还不够,得让人能输入Wi-Fi信息才行。这时候就得请出 esp_http_server 组件,搭个微型Web服务。

httpd_handle_t server = NULL;

// 主页处理器:返回HTML表单
esp_err_t root_handler(httpd_req_t *req) {
    const char* html = 
        "<h2>📶 ESP32 Wi-Fi 配置</h2>"
        "<form method='POST' action='/connect'>"
        "  <label>SSID:</label><br>"
        "  <input type='text' name='ssid'><br><br>"
        "  <label>Password:</label><br>"
        "  <input type='password' name='password'><br><br>"
        "  <input type='submit' value='🚀 连接'>"
        "</form>";

    httpd_resp_send(req, html, HTTPD_RESP_USE_STRLEN);
    return ESP_OK;
}

// 处理提交请求
esp_err_t connect_handler(httpd_req_t *req) {
    char ssid[32] = {0}, password[64] = {0};
    size_t len = MIN(req->content_len, sizeof(ssid) - 1);

    // 读取POST数据(简化处理)
    httpd_req_recv(req, ssid, len);

    // 简单解析密码字段(生产环境建议用form parser)
    char *pw_pos = strstr(ssid, "password=");
    if (pw_pos) {
        sscanf(pw_pos, "password=%[^&]", password);
    }

    // 切换到STA模式并连接
    esp_netif_create_default_wifi_sta();
    esp_wifi_set_mode(WIFI_MODE_STA);

    memset(&sta_config, 0, sizeof(sta_config));
    snprintf((char*)sta_config.sta.ssid, 32, "%s", ssid);
    snprintf((char*)sta_config.sta.password, 64, "%s", password);

    esp_wifi_set_config(WIFI_IF_STA, &sta_config);
    esp_wifi_connect();

    // 返回响应
    httpd_resp_send(req, 
        "<p>🔄 正在连接...请查看串口日志确认状态。</p>"
        "<a href='/'>⬅️ 返回重试</a>", 
        HTTPD_RESP_USE_STRLEN);

    return ESP_OK;
}

// 启动HTTP服务器
void start_webserver() {
    httpd_config_t config = HTTPD_DEFAULT_CONFIG();
    httpd_start(&server, &config);

    // 注册路由
    httpd_uri_t uri_get = {
        .uri       = "/",
        .method    = HTTP_GET,
        .handler   = root_handler,
        .user_ctx  = NULL
    };
    httpd_register_uri_handler(server, &uri_get);

    httpd_uri_t uri_post = {
        .uri       = "/connect",
        .method    = HTTP_POST,
        .handler   = connect_handler,
        .user_ctx  = NULL
    };
    httpd_register_uri_handler(server, &uri_post);

    printf("🌍 Web服务器已启动,访问 http://192.168.4.1\n");
}

✨ 进阶建议:
- 可结合 mDNS 实现域名访问,比如 http://esp32-config.local ,比记IP友好多了;
- 添加 /status 接口返回当前连接状态,便于前端轮询;
- 使用 HTTPS 或 Token 认证提升安全性(尤其在公共场合);


实际应用场景与优化技巧 🧰

典型架构图 🖼️

+------------------+     +---------------------+
|   手机/PC用户      |<--->| ESP32 (SoftAP模式)   |
| 浏览器访问网页     |     | - AP热点: 192.168.4.1|
| 输入Wi-Fi凭证      |     | - HTTP Server       |
+------------------+     +----------+----------+
                                    |
                                    v
                           +--------+---------+
                           | 存储配置 -> 切换STA |
                           | 连接家庭Wi-Fi       |
                           +---------------------+

实战中的坑与对策 🛠️

问题 解决方案
多台设备同名冲突 在SSID后加MAC地址尾段,如 ESP32_Config_8A2F
用户忘记关闭Wi-Fi 设置超时机制(3~5分钟未配置自动关AP)
配网失败怎么办 LED慢闪提示错误,支持长按重置
断网后无法恢复 检测心跳包丢失,自动重启SoftAP进入配网态
安全性不足 启用WPA2密码保护,限制连接时间

最佳实践 checklist ✅

  • ✅ 使用 NVS 持久化存储 Wi-Fi 凭证;
  • ✅ 上电先检查是否有有效配置,避免频繁进配网模式;
  • ✅ 提供明确的状态指示(LED、蜂鸣器等);
  • ✅ 支持“一键复位”功能(长按按键清除NVS);
  • ✅ 结合 OTA 升级,实现固件与配置分离更新;
  • ✅ 日志输出详细连接过程,便于调试。

和其他配网方式比,谁更强?🥊

现在市面上还有不少配网方案,比如:

  • SmartConfig(一键配网) :手机APP发UDP广播,设备监听抓取;
  • 蓝牙辅助配网 :通过BLE传Wi-Fi信息;
  • 二维码扫码配网 :设备显示二维码,手机扫后传输信息;
  • 声波/光闪编码 :冷门但有趣……

相比之下,SoftAP的优势非常明显:

对比项 SoftAP SmartConfig BLE配网
是否需要App ❌ 不需要 ✅ 需要 ✅ 需要
兼容性 ⭐⭐⭐⭐⭐(任何浏览器) ⭐⭐(部分安卓机型失效) ⭐⭐⭐(需蓝牙支持)
安全性 ⭐⭐⭐⭐(可加密热点) ⭐⭐(明文传输风险) ⭐⭐⭐
用户体验 ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
开发难度 ⭐⭐⭐ ⭐⭐ ⭐⭐⭐⭐

所以结论很明确:
👉 如果你追求稳定、免App、跨平台通用,SoftAP依然是首选方案

虽然它多了一步“手动连热点”的操作,但换来的是极高的成功率和广泛的设备兼容性,尤其是在工业部署、批量调试场景下,简直不要太香。


写在最后:小功能,大价值 🎯

SoftAP配网看似只是个小功能,但它背后解决的是物联网落地的关键一环—— 如何让用户轻松地把设备接入网络

它不炫技,不依赖特定生态,也不怕系统升级导致协议失效。正因如此,哪怕在今天各种“黑科技配网”层出不穷的时代,SoftAP仍然是许多成熟产品的标配方案。

未来,我们可以进一步融合:
- mDNS 实现 .local 域名访问;
- OTA 自动升级固件;
- HTTPS 加密通信防止中间人攻击;
- WebSocket 实现实时状态推送;
- 甚至结合微信小程序做引导页美化体验……

但无论怎么演进, 核心思想不变:让用户用最熟悉的方式,完成最复杂的底层配置

而这,正是优秀嵌入式设计的魅力所在 ❤️。

🔦 温馨提示:下次你看到一个默默发光的小盒子,不妨试试连它的热点看看——说不定,它正等着你帮它“回家”呢 😉

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

本文标签: 快速模式SoftAP