手头一款cc2640的穿戴设备要接入微信硬件平台,前期接到任务还是很忐忑的,因为毕竟不熟悉微信这块的东西,所以前期也走了不少弯路,现在已经在cc2640和cc2541上实现了功能,以下是自己在微信接入方面的一点心得:</p><p> 首先微信官方是有demo参考的,但是只有nordic的nrf51的代码和文档,至于TI的暂时还没有找到,论坛里面有个cc2541的demo,不过核心代码都是封装成库提供的,没有什么利用价值,如果是cc2541的开发,前期可以直接使用调试,cc2640就只能呵呵了。没有demo只能自己动手调试了,动手之前先下载安装微信官方的调试app AirSyncDebugger,这样就可以先不管微信服务器端的开发,直接调试蓝牙部分(注意:由于使用安卓手机调试,经常遇到修改了错误之后,debugger依旧提示错误,重开蓝牙,重进app即可)。由于之前一直在用2541和2640在做开发,所以广播和微信服务0xfee7的添加很容易实现了。 广播中添加mac地址,如果为了快速测试可以手动添加mac地址,但是这只能用来测试,实际项目中需要自动获取mac地址,使用下面api获取mac地址:GAPRole_GetParameter(GAPROLE_BD_ADDR, macaddr); 另外,mac地址添加进广播的时候,注意字节序。 广播数据格式示例:
{
0x02, // length of first data structure (2 bytes excluding length byte)
GAP_ADTYPE_FLAGS, // AD Type = Flags
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
// service UUID, to notify central devices what services are included
// in this peripheral
0x05, // length of second data structure (7 bytes excluding length byte)
GAP_ADTYPE_16BIT_MORE, // list of 16-bit UUID's available, but not complete list
LO_UINT16( xxx_SERV_UUID ), // Alert Service (Proximity Profile)
HI_UINT16( xxx_SERV_UUID ),
LO_UINT16( WECHAT_SERV_UUID ), // Buzzer set Service (Proximity / Find Me Profile)
HI_UINT16( WECHAT_SERV_UUID ),
0x09,
GAP_ADTYPE_MANUFACTURER_SPECIFIC,
// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*TI Pre-Amble*/
0x0D,
0x00,
/*Device MAC (6 Bytes)*/
0,0,0,0,0,0
};
添加wechat的service,如下定义(具体步骤可参靠ti工程中的service添加流程):
#define WECHAT_SERV_UUID 0xFEE7
#define WECHAT_WRITE_UUID 0xFEC7
#define WECHAT_INDICATE_UUID 0xFEC8
#define WECHAT_READ_UUID 0xFEC9
广播数据和微信服务添加好后,用debugger可以跑通第一步了,这是个好的开始,然后可以参照腾讯给出的nrf51的demo进行协议移植,在熟悉ble协议基础上,这个过程也不是太难,需要花一些时候了解处理流程,然后添加到2640或者2541sdk里面。
需要用到的文件如下:
除了这些文件之外 , 还需要自己的wechatservice.c wechatservice.h服务文件,然后就是wechatApp.c文件,wechatApp.c需要自己写,也就是处理微信的收发数据的文件,这个文件就是提取nrf51的demo中微信处理流程的文件。
当然写起来容易,移植可能会花一定时间去熟悉微信协议,nrf51的sdk流程之类的,还要对数据进行组包和拆包。