SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.syd-tek.com/
本文摘录于:http://iot.weixin.qq.com/wiki/new/index.html?page=4-3
只做学习之用!
微信蓝牙精简协议
1.概要
目前微信蓝牙精简协议支持智能手环等计步类设备接入微信运动,具体框架如下:2.微信蓝牙精简协议文档
广播和MAC特征值
设备需要广播包带上微信的service,并在manufature data里带上mac地址。 微信Service uuid:0xFEE7 manufature specific data:需以MAC地址(6字节)结尾。并且manufature specific data长度需大于等于8字节(最前两个字节为company id,没有的话随便填)。 微信service下面需包含一个读特征值,uuid为:0xFEC9,内容为6字节MAC地址(ios系统其他软件连上设备之后,微信会去读该特征值,以确定设备MAC地址)。特征值概要
计步的profile放在微信的service下面,由两个特征值构成:| 特征值名称 | current_pedometer_measurement |
| uuid | 0xFEA1 |
| 权限 | Read;Indicate和Notify二选一,也可都支持 |
| 是否必选 | 必选 |
| 说明 | 实时计步信息,包括:步数,距离,卡路里 |
| 特征值名称 | target |
| uuid | 0xFEA2 |
| 权限 | Read;Write;Indicate |
| 是否必选 | 可选 |
| 说明 | 运动目标 |
特征值内容
所有特征值内容里面的字节序都为小端字节序。current_pedometer_measurement
current_pedometer_measurement的值由4部分组成| 值 | 类型 | 说明 |
| Flag | Unit8 | 0x01:步数(必选) 0x02:距离(可选) 0x04:卡路里(可选)如0x05表示含有步数和卡路里 |
| StepCount | Uint24 | 步数 |
| StepDistancer | Uint24 | 走了多远,单位米 |
| StepCalorie | Uint24 | 卡路里 |
target
target的值为| 值 | 类型 | 说明 |
| Flag | Uint8 | 0x01:步数(必选) |
| StepCount | Uint24 | 步数 |
时序
3.文档及工具下载
微信运动接入精简设备用例 微信蓝牙协议调试工具AirSyncDebugger-说明文档v2.2.0 AirSyncDubugger2.2.1本文摘录于:http://iot.weixin.qq.com/wiki/new/index.html?page=4-2-2
只做学习之用!
AirSync开发文档
1. 概要
该章节规范了蓝牙设备和手机上的微信的通信协议。 AirSync协议支持经典蓝牙和4.0 BLE蓝牙,目前支持ios和andriod两个系统,后续会扩展到其他系统。 协议架构图如下,其中厂商服务器和外设,由厂商开发完成。微信会提供服务器的接口以对接厂商的服务器,会提供手机的接口(如本文规定的蓝牙协议)以对接厂商的外设:2. 外设协议
●前提 厂商需先开通微信公众平台的硬件号功能。 厂商需先在微信硬件平台授权设备,具体接口请参考: 设备授权接口 ●设备和广播 为了和微信能够通信,设备的广播包需符合以下的格式: 低功耗蓝牙(android&ios)设备需要广播: a.微信规定的service uuid(具体见附录)。 b.厂商自定义字段里,包含MAC地址(具体见附录)。 c.包含指定的Characteristics(具体见附录)。 Andriod经典蓝牙设备需要广播: a.暴露一个指定uuid的rfcomm服务(具体见附录)。 b.厂商自定义字段里,包含MAC地址(具体见附录)。 Ios经典蓝牙需要通过mfi认证,并且SerialNumber需为MAC地址(字符串形式)。 设备可分为两种: 可确认设备:如有按钮,或者可以双击,或者有可检测翻转等传感器,可与人交互的设备。大部分设备属于可确认设备。 无法确认的设备:即没有按钮等传感器,无法与人交互的设备。这种设备很少,目前的市面上设备,有很多是要设备做出确认之后(如长按某个按钮,或者靠近手机),才会进行设备和用户的绑定。 相应的,广播包有两种: 普通包:我们把设备正常情况下无时无刻广播的包成称为普通包 确认包:当用户进行设备确认时(如双击手环,或者按按钮),广播的特殊的包称为确认包。微信规定了微信认识的普通包和确认包的格式:通过manufature data来区别(具体见附录)。 ●绑定 用户绑定设备有两种方式:扫码绑定,厂商服务器绑定,这两种方式都需要先向微信公众平台注册授权设备(具体api参见公众平台文档)。 (1)扫码绑定 用户通过扫描设备二维码绑定设备(获取二维码的方法见公众平台文档)。 用户场景: 用户打开扫一扫界面,扫码设备二维码,出现公众号页面。用户点击关注,进行绑定设备。扫码绑定并不需要设备在身边。 (2)厂商服务器绑定: 厂商可通过微信公众平台提供的接口,绑定厂商指定的用户和设备。该功能给厂商比较大的自由,可自定义绑定的流程和界面(通过html5)。该功能目前需要通过本协议的jsapi来实现。 绑定的用户场景和技术细节详见本文档jsapi章节。 ●扫描和连接 进入特定界面后(如具有硬件功能的公众号界面),微信会开始扫描设备。当设备广播符合微信定义的广播包时,则微信可以扫描到设备。 扫描到设备后,微信会连接设备(Ios经典蓝牙需要用户手动在设置界面里面连接上设备)。 当连上设备之后,微信和设备之间开始传输数据。数据的具体格式见下面章节。 ●流 经典蓝牙使用RFCOMM通信(是个流),蓝牙BLE也模拟成流。 ● 包 流之上运载的是一个紧接着一个的业务逻辑的数据包。 数据包的发送方和接受方:设备<->厂商服务器,或者设备<->微信服务器。 把设备->厂商服务器/微信服务器的请求称为Req,回包称为Resp。一个请求,对应着一个回包。 把厂商服务器/微信服务器->设备的请求称为PushReq,没有回包(即没有PushResp这样的包)。 ●包结构 由定长包头和变长包体组成。字段 |
类型 |
说明 |
bMagicNumber |
unsigned char |
填0xFE |
bVer |
unsigned char |
包格式版本号,填1 |
nLength |
unsigned short |
为包头+包体的长度 |
nCmdId |
unsigned short |
命令号,如ECI_req_auth,ECI_resp_sendDataToManufacturerSvr等 |
nSeq |
unsigned short |
递增。 一个Req对应一个Resp,并且它们的nSeq相同,并且永不为0。 Push的nSeq永远为0; |
3. Protobuf协议
变长包体部分,使用的是Protobuf定义的协议。Protobuf文件见附录。里面规定了设备和微信客户端之间的命令。 ●命令列表名称 |
描叙 |
Auth |
登录 |
Init |
初始化 |
SendData |
设备发送数据给厂商或微信公众平台或微信客户端。 当type为空或者等于0时,表示发送给厂商服务器。 当type为10001时,表示发送给微信客户端html5设备会话界面。 当type为其他时,表示发送给公众平台服务器。具体的定义请看 附录:微信公众平台proto文件。举个例子,type等于1时,表示手环数据。 |
RecvDataPush |
厂商或微信客户端或微信公众平台发送数据给设备 当type为空或者等于0时,表示厂商发送设备。 当type为10001时,表示收到微信客户端html5设备会话界面的数据。 当type为其他时,表示公众平台发送给设备。具体的定义请看 附录:微信公众平台proto文件。举个例子,type等于1时,表示手环数据。 |
SwitchViewPush |
微信客户端进入退出界面的通知 |
SwitchBackgroudPush |
微信客户端进入退出后台的通知 |
EEC_system |
微信客户端一般的错误 |
EEC_needAuth |
设备未登录。需要登录。 |
EEC_sessionTimeout |
sessionKey超时。需要重新登录。 |
EEC_decode |
微信客户端解proto失败。可能是设备端打包代码有bug。 |
EEC_deviceIsBlock |
微信客户端一段时间之内禁止设备的请求。通常是设备某些异常行为引起,如短时间多次登录,大量发送数据等。 |
EEC_serviceUnAvalibleInBackground |
ios处于后台模式,无法正常服务 |
EEC_deviceProtoVersionNeedUpdate |
设备的proto版本过老,需要更新 |
EEC_phoneProtoVersionNeedUpdate |
微信客户端的proto版本过老,需要更新 |
EEC_maxReqInQueue |
设备发送了多个请求,并且没有收到回包。微信客户端请求队列拥塞。 |
EEC_userExitWxAccount |
用户退出微信帐号。 |
为正数时 |
具体见微信公众平台。 |
ECI_err_decode |
微信客户端解密包体失败。 通常是因为sessionKey过时,需要重新做一次auth,也可能是设备加密代码有bug。 |