重庆互联网,19年企业互联网解决经验,专业网站开发、移动端开发、微信端开发、小程序开发!
重庆网络推广公司

腾讯小微(47)— linux中设备配网之蓝牙BLE配网

作者:重庆互联网小徐 发布时间:2024-06-20 浏览:19966 赞(1950 收藏 评论(0)

蓝牙BLE配网

介绍

蓝牙BLE配网是最推荐的方式,该方式流程简单,用户体验好,若硬件设备支持蓝牙BLE,可采用该方式配网。简单来说,流程如下:

  1. 设备启动一个service并进行广播,声明自己的身份

  2. APP/小程序扫描到广播后与设备建立连接

  3. APP/小程序通过蓝牙将wifi信息传给设备

  4. 设备自行联网,此时配网流程已完成

  5. 配网成功后设备登录小微SDK,获取绑定ticket,并回传给APP/小程序

  6. APP/小程序根据ticket完成设备绑定

对于接入厂商来说,蓝牙配网需要厂商实现我们定义的配网协议,具体协议如下。

BLE配网协议

1. 准备工作

使用小微蓝牙配网的设备,需要在小微官网注册设备时选择蓝牙配网方式,并且按照官网要求上传配网时的指示图片(该图片将在小程序/APP中显示,用于引导用户启动配网模式,如长按某按钮,等待语音或LED它提示等)。

2. 启动主Service

设备在进入正式配网流程前,需要先启动一个Service,该Service要包含下面三个特征:

2.1 ssid_info
内容说明
特证名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的方式。

2.2 xiaowei_specify
内容说明
特证名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信息。

3. 设备发起广播

设备进入配网流程后,首先需要发起广播,广播数据:

广播字段
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信息的传输。

4. 总结

配网时序如下:

  • 小微设备->小微App: 广播数据

  • 小微App->小微App: 检查Manufacture Data

  • 小微App->小微设备: 写入配网信息

  • 小微设备->小微设备: 自行联网,并登陆SDK,获取ticket

  • 小微设备->小微App: 通知App联网成功

  • 小微App->小微设备: 读取ticket

  • 小微App->小微App: 尝试绑定设备

重庆互联网项目从2004年开始为各行各业提供互联网发展解决方案,专业从事网站、小程序、微信公众号、APP、电商平台、系统等互联网平台开发,帮助企业实现从传统行业到互联网的完美转型。截止目前,重庆互联网合作的企业遍布全国各地,20年的开发经验和完善的售后服务体系获得合作客户的高度认可!

关注重庆互联网官方公众号,即可获取粉丝专享福利!

重庆互联网公众号二维码.jpg

网友留言评论
我要评论
评论

欢迎广大用户为此页面进行评价,评价成功将获得积分奖励!

  • 赞(0
    踩(0
重庆网站定制建设
  • 重庆网站建设平台
  • 重庆网站优化公司
  • 重庆网络推广公司哪家好
  • 重庆APP制作公司
版权所有 ©2004-2024 重庆市渝中区圣灵科技信息有限公司 渝ICP备16004600号-14 渝公网安备50010802001420号 电子营业执照
重庆公众号制作哪家好
二维码
联系客服 重庆商城网站建设