在智能设备开发中,蓝牙配网是一个非常常见且关键的环节。本文将完整梳理蓝牙配网的流程与注意点,从进入配网模式开始,一直到设备联网并进入业务操作,逐步讲解。
关注我微信公众号:IT技术生活圈
目录
- 配网前置说明
- 蓝牙扫描
- 输入 Wi-Fi 信息(或选择 Wi-Fi)
- 发送数据(Wi-Fi 与配置信息)
- 设备联网(Wi-Fi、MQTT)
- 联网后业务操作
- 小结与开发注意要点
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 列表的两种方案:
- APP 调用系统 API(Android):直接获取附近 Wi-Fi 列表 —— iOS 不支持。
- 由设备硬件扫描并通过蓝牙返回列表(推荐):
- 优点:iOS/Android 一致;设备端能获得更真实的信号强度信息。
- 缺点:当 Wi-Fi 列表很多时,需要考虑蓝牙 MTU 限制,做拆包/组包处理。
- 交互细节:
- 建议轮询检测手机侧 Wi-Fi 切换(避免用户在该页通过通知栏切换 Wi-Fi 後界面未更新)。
- 明确提示用户输入密码的最低长度/字符规则(如某些路由有特殊字符限制)。
4. 发送数据(把 Wi-Fi 与配置信息传给设备)
发送阶段是整个配网流程中最核心也是最复杂的部分,牵涉协议设计与加密传输。
- 要发送的内容:
- 最少:
SSID、密码。 - 可选/推荐:设备启动后需要的其他配置信息(如 MQTT 域名、端口、用户名/密码、设备特定参数等)。
- 也可让设备在联网后自行通过 HTTPS 向云端拉取配置(硬件端实现更复杂)。
- 最少:
- 协议形式(两类常见):
- JSON 格式(对前端/后端更友好):
{ "cmd": "wifi_config", "cmdId": 0, "ssid": "MyHomeWiFi", "pwd": "12345678" } - 字节数组/二进制协议(嵌入式常用):
[0xAA][0x55][CMD][LEN][DATA...][CRC]
- JSON 格式(对前端/后端更友好):
- 加密/安全:
- 必要时对敏感字段(如 Wi-Fi 密码、MQTT 密码)做加密处理,常见算法:AES、TEA 等。
- 需要约定密钥协商方式或在设备出厂时植入密钥。
- 分包/组包:
- 当单次数据长度超出蓝牙 MTU(或为了可靠性)时,需要拆包发送并在设备端做组包、校验(例如 CRC 或序号)。
- 错误处理:
- 发送失败或校验失败时应有重传策略并及时告知用户(或在界面展示重试按钮)。
5. 设备联网(Wi-Fi 连接与后端连接)
设备接收并解析 APP 发送的配网信息后,开始联网流程,并将结果回传给 APP。
- 常见联网步骤:
- 模组连接 Wi-Fi(基站认证、获取 IP 等)。
- 连接云端协议(常见 MQTT、也可能是 WebSocket 或 HTTP)。
- 保存 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/seq与errCode,便于定位问题与日志追踪。 - 对敏感数据做加密,并建立版本兼容策略(协议升级时向后兼容)。
- 在 APP 端考虑各种失败场景(弱网、密码错误、路由器限制、双频路由设置等),并提供友好引导与可执行操作(重试、手动输入、联系客服)。