作者:重庆互联网小徐 发布时间:2024-06-20 浏览:19966 赞(1950) 收藏 评论(0)
蓝牙BLE配网是最推荐的方式,该方式流程简单,用户体验好,若硬件设备支持蓝牙BLE,可采用该方式配网。简单来说,流程如下:
设备启动一个service并进行广播,声明自己的身份
APP/小程序扫描到广播后与设备建立连接
APP/小程序通过蓝牙将wifi信息传给设备
设备自行联网,此时配网流程已完成
配网成功后设备登录小微SDK,获取绑定ticket,并回传给APP/小程序
APP/小程序根据ticket完成设备绑定
对于接入厂商来说,蓝牙配网需要厂商实现我们定义的配网协议,具体协议如下。
使用小微蓝牙配网的设备,需要在小微官网注册设备时选择蓝牙配网方式,并且按照官网要求上传配网时的指示图片(该图片将在小程序/APP中显示,用于引导用户启动配网模式,如长按某按钮,等待语音或LED它提示等)。
设备在进入正式配网流程前,需要先启动一个Service,该Service要包含下面三个特征:
内容 | 说明 |
---|---|
特证名 | ssid_info |
UUID | 需包含"A1CE",例如"0000A1CE-0000-1000-8000-00805f9b34fb" |
权限 | write(with response) |
说明 | 用于接收wifi信息 |
对应的数据结构如下代码所示:
typedef struct _SSID_Info{ unsigned short length; // 总长度 2byte unsigned char ssidLength; // 无线名长度 1byte unsigned char passwordLength;// 密码长度 1 byte unsigned char ssid[1]; //无线名,UTF8编码 可变长 unsigned char password[1]; //无线密码,UTF8编码 可变长 }SSID_Info;
注意:如果此结构大于20字节,app/小程序端会分包发送,每个包最大20字节。为了保证分包发送正确,需要该特征有write(with response)权限。数据采用little endian的方式。
内容 | 说明 |
---|---|
特证名 | xiaowei_specify |
UUID | 需包含"6196" |
权限 | read |
说明 | 用于传输绑定信息,为了与老协议兼容,有一些无效字段,同样little endian |
对应的数据结构如下代码所示:
typedef struct _Xiaowei_Spec{ unsigned short length; // 总长度 2byte unsigned char snLength; // sn长度 1byte,固定为0 unsigned char ticketLength;// ticket长度 1byte unsigned char sn[1]; //sn,UTF8编码 可变长,固定为空 unsigned char ticket[1]; //token,UTF8编码 可变长 }Xiaowei_Spec;
注意,这里的ticket是需要联网成功之后,登录小微SDK,然后利用int device_get_bind_ticket(bind_ticket_callback callback);
接口来获取。获取成功后刷新这个Spec的值,同时通知APP/小程序来读取。
内容 | 说明 |
---|---|
特证名 | link_state |
UUID | 需包含"A007" |
权限 | notify |
说明 | 通知app/小程序,联网和ticket获取进度 |
对应的数据结构如下:
notifyState(1byte,值定义见下面枚举) + msg(可选, utf8 string)
当配网成功后,不要立即通知XWLink_LinkSuccess
,应在成功获取到ticket后再进行通知,一旦发出通知,APP/小程序就会尝试读取上述的xiaowei_specify
,若读取失败,会提示配网失败。
为了提升用户体验,设备若能确定wifi无法连接,应notify XWLink_LinkWiFiErr
。此时APP/小程序会提示用户修改wifi信息。
设备进入配网流程后,首先需要发起广播,广播数据:
广播字段 | 值 |
---|---|
Service UUID | 包含FFB1,如"0000FFB1-0000-1000-8000-00805f9b34fb" |
Manufacture Data | 厂商ID(2byte)+pattern("xiaoweilink"字符串,11byte)+version(uchar,1byte,当前协议版本号为1)+设备pid(uint32,4byte,little endian) |
注意:根据蓝牙规范,厂商自定义的数据中,前两个字节表示厂商ID,剩下的是厂商自定义数据,厂商实现时不要漏掉厂商ID。
一个合法的Manufacture Data如:"xwxiaoweilink\1a010",在这里,厂商id是"xw",设备pid是'a' << 0 + '0' << 8 + '1' << 16 + '0' << 24
,注意这里显示的'0',其实是十进制的30。
假如productId 为 16909060 ,16进制为0x01020304。那么广播包最后4个字节应该是0x04 0x03 0x02 0x01,这些字符是显示不出来的。
APP/小程序在配网页面会扫描蓝牙广播,若匹配成功,则会向上述的ssid_info特证中写数据来完成wifi信息的传输。
配网时序如下:
小微设备->小微App: 广播数据
小微App->小微App: 检查Manufacture Data
小微App->小微设备: 写入配网信息
小微设备->小微设备: 自行联网,并登陆SDK,获取ticket
小微设备->小微App: 通知App联网成功
小微App->小微设备: 读取ticket
小微App->小微App: 尝试绑定设备
重庆互联网项目从2004年开始为各行各业提供互联网发展解决方案,专业从事网站、小程序、微信公众号、APP、电商平台、系统等互联网平台开发,帮助企业实现从传统行业到互联网的完美转型。截止目前,重庆互联网合作的企业遍布全国各地,20年的开发经验和完善的售后服务体系获得合作客户的高度认可!
关注重庆互联网官方公众号,即可获取粉丝专享福利!
欢迎广大用户为此页面进行评价,评价成功将获得积分奖励!