蓝牙配网全流程解析:从进入配网模式到业务落地

217 阅读7分钟

在智能设备开发中,蓝牙配网是一个非常常见且关键的环节。本文将完整梳理蓝牙配网的流程与注意点,从进入配网模式开始,一直到设备联网并进入业务操作,逐步讲解。

关注我微信公众号:IT技术生活圈


目录

  1. 配网前置说明
  2. 蓝牙扫描
  3. 输入 Wi-Fi 信息(或选择 Wi-Fi)
  4. 发送数据(Wi-Fi 与配置信息)
  5. 设备联网(Wi-Fi、MQTT)
  6. 联网后业务操作
  7. 小结与开发注意要点

1. 配网前置说明

这是配网的第一步,目的是在用户端/APP 提示用户如何把设备置为可配网状态,以及要打开哪些权限。

  • 进入配网模式的方式
    • 常见:长按电源键或 RESET 键 5 秒。
    • 也可能是按某个专用按键或通过外部按键组合触发。
  • APP 权限/设置
    • 要提醒用户在 APP 中打开蓝牙开关并授予必要权限(定位权限、蓝牙权限等,视系统版本而定)。
  • 是否必须
    • 如果设备仅在按键触发后开始蓝牙广播,该步骤是必须的;
    • 如果设备蓝牙一直开启、随时可配网,则可以省略此交互提示。

⚠️ 提示用户尽量远离强电磁干扰环境、靠近路由器以提高首次配网成功率。


2. 蓝牙扫描

APP 通过操作系统蓝牙 API 扫描广播的设备并筛选目标设备。

  • 广播与过滤策略
    • 常用根据广播名称(或广播数据中的 SN)过滤目标设备;
    • 建议设备广播采用统一规范,例如:XX-DID-SN,其中 XX 为公司前缀,DID 为设备类型编号,SN 为序列号。
  • 二维码替代方案
    • 若包装上或设备上有 SN 的二维码,可直接扫码获取 SN 并连接蓝牙,跳过扫描列表页,提升用户体验。
  • 扫描与连接优化
    • 分轮次扫描:例如每轮 3 秒,循环若干轮以覆盖环境变化。
    • 连接超时:设置合理超时并在超时后回调到业务层提示用户。
    • 防重连逻辑:正在连接时直接 return;发现目标设备已连接则直接返回 success。
  • 跨平台注意
    • Android/iOS 的蓝牙 API 和权限模型不同,扫描策略需兼容两端差异。

3. 输入 Wi-Fi 信息(或获取附近 Wi-Fi 列表并选择)

蓝牙连接成功后,APP 需要获取并传递 Wi-Fi SSID 与密码给设备。

  • 频段限制
    • 大多数模组仅支持 2.4GHz Wi-Fi,APP 必须显著提示用户仅支持 2.4G。
  • 自动填充当前 Wi-Fi
    • Android 可以读取当前系统连接的 Wi-Fi 名称并自动填充(若为 2.4G)。这在用户体验上很重要。
    • iOS 不支持直接读取当前系统 Wi-Fi 名称(受系统限制)。
  • 获取 Wi-Fi 列表的两种方案
    1. APP 调用系统 API(Android):直接获取附近 Wi-Fi 列表 —— iOS 不支持。
    2. 由设备硬件扫描并通过蓝牙返回列表(推荐):
      • 优点:iOS/Android 一致;设备端能获得更真实的信号强度信息。
      • 缺点:当 Wi-Fi 列表很多时,需要考虑蓝牙 MTU 限制,做拆包/组包处理。
  • 交互细节
    • 建议轮询检测手机侧 Wi-Fi 切换(避免用户在该页通过通知栏切换 Wi-Fi 後界面未更新)。
    • 明确提示用户输入密码的最低长度/字符规则(如某些路由有特殊字符限制)。

4. 发送数据(把 Wi-Fi 与配置信息传给设备)

发送阶段是整个配网流程中最核心也是最复杂的部分,牵涉协议设计与加密传输。

  • 要发送的内容
    • 最少:SSID密码
    • 可选/推荐:设备启动后需要的其他配置信息(如 MQTT 域名、端口、用户名/密码、设备特定参数等)。
    • 也可让设备在联网后自行通过 HTTPS 向云端拉取配置(硬件端实现更复杂)。
  • 协议形式(两类常见)
    1. JSON 格式(对前端/后端更友好):
      {
        "cmd": "wifi_config",
        "cmdId": 0,
        "ssid": "MyHomeWiFi",
        "pwd": "12345678"
      }
      
    2. 字节数组/二进制协议(嵌入式常用):
      [0xAA][0x55][CMD][LEN][DATA...][CRC]
      
  • 加密/安全
    • 必要时对敏感字段(如 Wi-Fi 密码、MQTT 密码)做加密处理,常见算法:AES、TEA 等。
    • 需要约定密钥协商方式或在设备出厂时植入密钥。
  • 分包/组包
    • 当单次数据长度超出蓝牙 MTU(或为了可靠性)时,需要拆包发送并在设备端做组包、校验(例如 CRC 或序号)。
  • 错误处理
    • 发送失败或校验失败时应有重传策略并及时告知用户(或在界面展示重试按钮)。

5. 设备联网(Wi-Fi 连接与后端连接)

设备接收并解析 APP 发送的配网信息后,开始联网流程,并将结果回传给 APP。

  • 常见联网步骤
    1. 模组连接 Wi-Fi(基站认证、获取 IP 等)。
    2. 连接云端协议(常见 MQTT、也可能是 WebSocket 或 HTTP)。
    3. 保存 Wi-Fi 与云端连接信息到持久存储(以便断电重启后自动重连)。
  • 配网成功的判定
    • 有的设计:只要 Wi-Fi 连上即返回成功。
    • 更推荐:Wi-Fi 成功 + MQTT(或业务层)连接成功 后才返回配网成功。
      • 优点:用户能立刻看到正常业务数据,减少“连接成功但无法访问云端”的误判。
      • 缺点:MQTT 连接可能增加配网耗时(通常是几百毫秒到几秒)。
  • 返回给 APP 的常用 JSON(示例)
    {
      "cmdId": 0,
      "errCode": "0"
    }
    
    
  • errCode = "0" 表示成功。
  • 非零代码表示失败及原因(例如:Wi-Fi 名称不存在、密码错误、Wi-Fi 连接失败、MQTT 连接失败等)。

细粒度进度回传

  • 有些方案会把每一步的状态分阶段返回,例如:已连接 Wi-Fi / 已连接 MQTT / 保存成功
  • APP 可据此在界面显示进度条或步骤提示,显著提升用户体验。

弱网与模组差异

  • 在弱网络环境下,模组可能无法精确区分错误原因(例如只返回“连接失败”)。
  • APP 需要设计通用的交互提示与重试策略(如:重试、切换 Wi-Fi、手动输入或联系客服等),并记录足够日志以便排查。

6. 联网后的业务操作

设备联网成功后,后续业务流程通常由产品/业务需求决定,常见处理逻辑如下:

  • APP 收到失败(errCode ≠ 0

    • 根据错误码弹出对应提示(例如“Wi-Fi 密码错误”或“设备连接云端失败,请检查网络”)。
    • 提供重试、手动输入或返回上一步的入口,必要时引导用户靠近路由器或检查路由器设置。
  • APP 收到成功(errCode = 0

    • 常见后续动作:
      • 调用后端 添加设备 / 绑定设备 接口,将设备与用户账号/房间/场景绑定。
      • 下发设备初始化参数(若业务需要)。
      • 决定是否断开蓝牙连接(多数情况下断开以节省电量)。
      • 跳转到设备首页或设备详情页,展示设备实时状态并引导用户完成首次配置。
  • 设备初始化

    • 某些业务场景会在配网后继续执行:下发初始场景、固件版本检查、权限配置等,以确保设备处于可用且安全的状态。

7. 小结与开发注意要点

配网流程概括

进入配网模式 → 蓝牙扫描 → 输入/选择 Wi-Fi → 发送配置信息 → 设备联网(Wi-Fi + MQTT 等) → 业务绑定与初始化

核心难点

  • 协议设计(可读性、扩展性、序列化格式选择)。
  • 数据安全(密码与敏感信息的加密、密钥管理)。
  • 跨平台兼容(iOS 与 Android 在 Wi-Fi 与蓝牙权限、API 上存在差异)。
  • 蓝牙可靠传输(MTU、拆包/组包、重传策略、连接超时)。
  • 用户体验(自动填充、清晰错误提示、进度回传)。

工程实践建议

  • 采用统一且易解析的广播格式,便于 APP 侧过滤。
  • 推荐硬件端提供 Wi-Fi 扫描接口并通过蓝牙回传(减少 iOS 限制带来的差异)。
  • 在协议中设计明确的 cmdId / seqerrCode,便于定位问题与日志追踪。
  • 对敏感数据做加密,并建立版本兼容策略(协议升级时向后兼容)。
  • 在 APP 端考虑各种失败场景(弱网、密码错误、路由器限制、双频路由设置等),并提供友好引导与可执行操作(重试、手动输入、联系客服)。