1. 项目背景与核心需求
最近在开发智能家居设备时遇到一个典型痛点:如何让没有屏幕的IoT设备快速接入Wi-Fi网络?传统方案要么要求设备开启热点让手机连接,要么需要用户手动输入SSID和密码,这两种方式都存在明显的用户体验缺陷。于是我开始研究Improv Wi-Fi协议——一种通过蓝牙实现Wi-Fi配网的开源标准。
这个项目的核心目标是:基于.NET平台实现完整的Improv Wi-Fi协议栈,开发一个可运行在Windows/macOS/Linux三大系统的配网工具。最终效果是:用户打开蓝牙,选择网络并输入密码,设备就能自动完成Wi-Fi连接,整个过程不超过30秒。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案选型
2.1 为什么选择.NET?
跨平台能力是首要考量。.NET 6+的MAUI框架可以一套代码生成多平台应用,实测在树莓派(Linux)、MacBook(macOS)和Surface(Windows)上都能稳定运行蓝牙协议栈。相比其他方案:
- Electron体积臃肿(至少70MB起步)
- Python打包困难且性能有限
- 纯原生开发需要维护多套代码
另一个关键因素是.NET的蓝牙API成熟度。Windows.Devices.Bluetooth和CoreBluetooth(macOS)的封装已经相当完善,Linux上通过BlueZ DBus接口也能实现稳定通信。
2.2 Improv Wi-Fi协议解析
该协议的核心工作流程分为五个状态:
- PROVISIONING:等待配网指令
- PROVISIONING_AUTH:验证用户权限(可选)
- PROVISIONING_CONFIG:接收Wi-Fi凭证
- PROVISIONING_APPLY:设备尝试连接网络
- PROVISIONING_FAILED/PROVISIONING_COMPLETE:最终状态
协议数据通过蓝牙GATT服务传输,主要包含两个特征:
- STATUS_CHARACTERISTIC(UUID:00467768-6228-2272-4663-277478268000):只读,用于设备状态通知
- RPC_CHARACTERISTIC(UUID:00467768-6228-2272-4663-
