WiFi配网流程—BLE 配网

目录

📌 BLE 配网(Bluetooth Assisted Wi-Fi Provisioning)

📌BLE 配网流程(以桥接器hub为例)

👉 阶段 1:设备广播 BLE 信号(BLE Advertising)

👉 阶段 2:手机 App 发现设备并建立 BLE 连接

👉 阶段 3:BLE 传输 Wi-Fi 账号和密码

👉 阶段 4:Hub 连接 Wi-Fi

👉 阶段 5:验证配网成功

📌 BLE 配网流程完整架构


📌 BLE 配网(Bluetooth Assisted Wi-Fi Provisioning)

一般智能家居设备,比如桥接器Hub 采用的是 BLE 辅助配网,即 蓝牙发现设备 -> 选择 Wi-Fi -> 输入密码 -> 设备连接 Wi-Fi,这个过程可以分为 发现、配对、Wi-Fi 配置、连接、验证 五个阶段。


📌BLE 配网流程(以桥接器hub为例)

👉 阶段 1:设备广播 BLE 信号(BLE Advertising)

  • 设备上电后,进入 BLE 广播模式,开始发送 广播包(Advertising Packet),让手机 App 能够发现它。
  • 广播包通常包含以下信息:
    • 设备名称(Device Name)(如 BLE_Device_XXXX
    • 设备 UUID(用于唯一标识设备)(MAC 地址 / SN 号)
    • 设备类型(如智能窗帘电机、Hub)
    • 信号强度(RSSI)
    • 其他厂商自定义字段(可选,比如是否已经配网)

技术要点:

  • 广播模式采用 BLE GAP(Generic Access Profile)
  • 广播间隔一般在 100ms - 1s 之间,间隔越短,发现速度越快,但功耗更高。
  • 设备广播的数据包通常为 ADV_IND(可连接非定向广播),表示设备可被 App 连接。
  • 低功耗设计:BLE 广播时 CPU 处于低功耗模式,仅周期性广播数据,减少能耗。

👉 阶段 2:手机 App 发现设备并建立 BLE 连接

  1. App 开启 BLE 扫描(BLE Scanning),查找匹配的设备(如 BLE_Device_XXXX
  2. 匹配设备 UUID,确认设备身份(根据 MAC / SN 号匹配),过滤出目标设备,然后在 App 上显示可选设备列表。
  3. 用户选择设备,App 发送连接请求(BLE Connection Request)。
  4. Hub 进入已连接状态(Connected Mode),不再继续广播。

技术要点:

  • BLE 设备角色:
    • Hub 作为 BLE Peripheral(外设)
    • 手机作为 BLE Central(主设备)
  • 连接时使用 GATT(Generic Attribute Profile) 进行数据交互。
  • App 通过 GAP Central Mode 进行扫描,监听 BLE 设备广播数据。
  • BLE 设备的广播间隔(如 500ms)会影响发现速度,间隔越短,发现越快,但功耗越高。
  • 信号过滤:如果有多个 BLE 设备,App 可以根据 RSSI(信号强度) 选择最近的设备。

👉 阶段 3:BLE 传输 Wi-Fi 账号和密码

  1. App 发送 Wi-Fi 扫描请求(Scan Wi-Fi):

    • Hub 通过 Wi-Fi 扫描(Wi-Fi Scan) 搜索周围 Wi-Fi SSID 列表,并返回给 App。
    • App 在 UI 上展示 Wi-Fi 列表,供用户选择。
  2. 用户选择 Wi-Fi,并输入密码

    • App 将 Wi-Fi SSID + 密码 通过 BLE 发送到 Hub。
  3. Hub 接收 Wi-Fi 账号和密码,存储到 Flash(NVS)

    • 设备会将 SSID 和密码加密存储,以便重启后仍然可以连接 Wi-Fi。

📌 技术要点:

  • 设备使用 BLE GATT 传输数据
    • SSID 和密码通过 GATT Characteristic 传输。
    • 数据分包传输(BLE 单次最大传输 MTU 约为 20-512 字节,具体视芯片支持情况)。
    • App 作为 GATT Client,设备作为 GATT Server。
    • 设备信息存储在 GATT Service 中
      • 设备 ID(如 Device_Info_UUID)。
      • 设备 Wi-Fi 状态(是否已连接)。
    • 配对认证
      • 部分设备可能需要 BLE 加密配对(LE Secure Connections),防止非法接入。
  • 加密传输:
    • 通常使用 AES-128 / AES-256 加密,防止中间人攻击。

👉 阶段 4:Hub 连接 Wi-Fi

  1. Hub 关闭 BLE 连接,进入 Wi-Fi 连接模式(STA 模式)。

  2. Hub 尝试连接目标 Wi-Fi

    • 通过 Wi-Fi Station Mode 连接路由器(AP)。
    • 发送 DHCP 请求,获取 IP 地址
    • 成功连接后,Hub 会尝试访问互联网。
  3. 连接成功后,Hub 上报状态

    • 连接成功后,Hub 可能会:
      • 上报配网成功状态到 App(通过 MQTT、HTTP 等方式)。
      • 连接云服务器,完成设备注册(如 MQTT 认证)。
      • 继续执行设备初始化,如升级固件、同步时间等。

技术要点:

  • 设备连接 Wi-Fi 失败时,通常会:
    • 重新进入 BLE 配网模式。
    • 降低 Wi-Fi 连接重试间隔,避免过度功耗。
  • 设备连接 Wi-Fi 成功后,会定期发送心跳包,确保连接稳定。
  • 设备调用 Wi-Fi 驱动(如 ESP8266 / ESP32 / MTK Wi-Fi 模块) 进行 Wi-Fi 连接。
  • DHCP 过程
    • 设备向路由器发送 DHCP 请求,获取 IP 地址。
    • 设备可能会先尝试上次使用的 IP(DHCP Lease 续租)。

👉 阶段 5:验证配网成功

  1. App 轮询 Hub 状态,判断是否成功联网

    • 方式 1:Hub 通过 BLE 反馈连接状态(不推荐,Wi-Fi 连接成功后 BLE 可能关闭)。
    • 方式 2:App 通过 HTTP/MQTT 向服务器请求 Hub 状态,查看是否在线。
  2. 配网完成

    • 配网完成后,Hub 可正常使用 Wi-Fi 进行远程控制。
    • BLE 关闭,进入低功耗模式(如果支持)
    • App 通过设备唯一 ID(MAC / SN 号)在云端注册设备,完成用户绑定。

技术要点:

  • Wi-Fi 连接成功 = 设备能够成功 PING 互联网(如 8.8.8.8)。
  • 云端绑定:设备需要上传 设备 ID + Wi-Fi MAC 地址,以便后续远程控制。
  • 设备会定期上报 心跳包(Heartbeat),通知 App / 云端其在线状态。
  • 若 BLE 断开,App 仍可通过 Wi-Fi 或云端控制设备。
  • 设备切换到正常工作模式,BLE 连接断开,进入节能模式。

📌 BLE 配网流程完整架构

[ 设备(BLE 广播) ]
        ↓  (App 发现设备)
[ App 连接 BLE 设备 ]
        ↓  (App 发送 Wi-Fi 配置信息)
[ 设备解析 Wi-Fi,切换至 STA 模式 ]
        ↓  (设备连接 Wi-Fi)
[ 设备上线,App 绑定设备 ]
        ↓
[ 配网完成 ]

<think>好的,用户想了解如何置ESP32进行WiFi,需要教程和代码示例。首先,我需要回忆一下ESP32常见的方式,通常有SmartConfig、蓝牙(比如BlueIF)、AP模式手动等。用户提供的引用中提到了SmartConfig和BlueIF,以及AP模式,但用户提到AP模式的样例没找到。 用户的问题主要集中在教程和代码示例,所以我需要先整理这几种方法的步骤和代码。首先,SmartConfig是乐鑫提供的,使用手机APP发送WiFi信息,ESP32通过监听包获取。代码方面,可能需要用到WiFi库的smartconfig相关函数。然后是BlueIF,可能通过蓝牙传输WiFi信息,但用户引用里提到的是BlueIF方式,但具体实现可能需要BLE库的支持。还有AP模式,即ESP32作为热点,手机连接后通过页或TCP服务器输入信息。 接下来需要检查用户提供的引用内容,引用1提到了AP模式和SmartConfig,引用2是WiFi库的教程链接。需要确保代码示例正确,比如SmartConfig的流程:初始化WiFi为STA模式,启动smartconfig,等待获取SSID和密码,然后连接。同时要处理可能出现的错误,比如超时或连接失败。 另外,用户可能需要依赖库的信息,比如包含WiFi.h和SmartConfig.h,或者对于蓝牙需要BLE库。代码示例需要符合ESP-IDF或Arduino框架,用户可能用的是Arduino,所以示例代码可能需要基于Arduino框架编写。 可能还需要考虑生成的相关问题,比如如何选择方式、处理失败的情况、保存WiFi信息等。要确保回答结构清晰,步骤明确,代码可运行,并正确引用提供的资料。最后检查是否符合用户的要求,比如使用中文、LaTeX格式正确,但这个问题可能涉及较少的数学公式,主要关注代码和步骤。</think>### ESP32 WiFi教程及代码示例 ESP32WiFi常用方式包括**SmartConfig**、**AP模式手动**和**蓝牙辅助**(如BlueIF)。以下是具体实现方法: --- #### 一、SmartConfig **原理**:通过手机APP(如EspTouch)发送WiFi信息,ESP32监听无线包解析出SSID和密码[^1]。 ```cpp #include <WiFi.h> #include <SmartConfig.h> void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); // 设置为STA模式 // 启动SmartConfig WiFi.beginSmartConfig(); Serial.println("等待SmartConfig..."); while (!WiFi.smartConfigDone()) { delay(500); Serial.print("."); } // 连接WiFi WiFi.begin(); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("\n成功,IP地址:" + WiFi.localIP().toString()); } void loop() {} ``` --- #### 二、AP模式手动 **原理**:ESP32建立热点,用户通过页或TCP连接提交WiFi信息[^1]。 ```cpp #include <WiFi.h> #include <WebServer.h> WebServer server(80); const char* ap_ssid = "ESP32-AP"; // 热点名称 void handleRoot() { String html = "<form action='/connect' method='POST'>" "SSID:<input type='text' name='ssid'><br>" "密码:<input type='password' name='pass'><br>" "<input type='submit' value='连接'></form>"; server.send(200, "text/html", html); } void handleConnect() { String ssid = server.arg("ssid"); String pass = server.arg("pass"); WiFi.begin(ssid.c_str(), pass.c_str()); server.send(200, "text/plain", "尝试连接中..."); } void setup() { Serial.begin(115200); WiFi.softAP(ap_ssid); // 启动AP模式 server.on("/", handleRoot); server.on("/connect", handleConnect); server.begin(); } void loop() { server.handleClient(); } ``` --- #### 三、BlueIF蓝牙 **原理**:通过蓝牙协议(如BLE)传输WiFi信息,需依赖蓝牙库[^2]。 ```cpp #include <BLEDevice.h> #include <BLEUtils.h> BLEServer *pServer; BLECharacteristic *pCharacteristic; class MyCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pChar) { std::string value = pChar->getValue(); // 解析蓝牙数据中的SSID和密码 // 连接WiFi... } }; void setup() { BLEDevice::init("ESP32-BLE"); pServer = BLEDevice::createServer(); BLEService *pService = pServer->createService(SERVICE_UUID); pCharacteristic = pService->createCharacteristic(...); pCharacteristic->setCallbacks(new MyCallbacks()); pService->start(); BLEAdvertising *pAdvertising = pServer->getAdvertising(); pAdvertising->start(); } void loop() {} ``` --- ### 关键问题解析 1. **依赖库**:SmartConfig需`WiFi.h`和`SmartConfig.h`,蓝牙需`BLEDevice.h`[^2] 2. **错误处理**:需添加超时检测(如30秒未则重启) 3. **信息存储**:建议使用Preferences库保存WiFi凭证 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值