[置顶] 微信蓝牙Airsync协议demo工程实现

基于Ti CC2541 SDK自带的simpleBLEPeripheral工程实现微信蓝牙Airsync协议,同时支持微信串口透传和一般APP串口透传。相关源码和开发资料请阅读《微信蓝牙开发板体验和开发指引》。

嵌入式企鹅圈以lib库(lib_wehat.lib)的形式提供微信蓝牙Airsync协议,这里介绍如何在simpleBLEPeripheral工程中添加lib_wehat.lib,并通过简单的修改即可实现微信串口透传功能。


1.     simpleBLEPeripheral工程添加微信库和包含微信profile头文件

1)在simpleBLEPeripheral.C中添加:

#include"ble_wechat_profile.h"

        2)工程添加lib_wehat.lib。


2.     修改默认广播数据

红色部分是蓝牙的MAC地址,第3步会自动更新。广播中需要说明支持微信airsync协议的UUID和设备的唯一MAC地址。

static uint8advertData[] =

{

  0x02,

  GAP_ADTYPE_FLAGS,

  DEFAULT_DISCOVERABLE_MODE |GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

  // service UUID--wechat service

  0x03,  // length of this data

  GAP_ADTYPE_16BIT_MORE,   

 LO_UINT16( WECHAT_SERV_UUID ),

 HI_UINT16( WECHAT_SERV_UUID ),

  //self data

  0x11,

  GAP_ADTYPE_MANUFACTURER_SPECIFIC,

  0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0

};


3.     根据实际的MAC地址配置广播数据

即修改默认广播数据中红色标注的MAC地址信息。xDATA中的0x780E到0x7813存储MAC地址。在SimpleBLEPeripheral_Init函数中添加:

advertData[19]= *((uint8*)0x7813);

advertData[20]= *((uint8*)0x7812);

advertData[21]= *((uint8*)0x7811);

advertData[22]= *((uint8*)0x7810);

advertData[23]= *((uint8*)0x780F);

advertData[24]= *((uint8*)0x780E);

GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof(advertData ), advertData );


4.     添加微信Airsync profile服务

在SimpleBLEPeripheral_Init函数中添加:

WechatProfile_AddService(GATT_ALL_SERVICES);


5.     初始化微信Airsync服务的各个特性值

在SimpleBLEPeripheral_Init函数中添加:

   uint8charValueRead[WECHATPROFILE_CHAR_READ_LEN];    

    charValueRead[0] = *((uint8*)0x7813);

    charValueRead[1] = *((uint8*)0x7812);

    charValueRead[2] = *((uint8*)0x7811);

    charValueRead[3] = *((uint8*)0x7810);

    charValueRead[4] = *((uint8*)0x780F);

    charValueRead[5] = *((uint8*)0x780E);

    uint8charValueIndicate[WECHATPROFILE_CHAR_INDICATE_LEN] = {10,11,12,13,0};

    uint8charValueWrite[WECHATPROFILE_CHAR_WRITE_LEN] = { 1, 2, 3, 4, 5 };

//微信Airsync协议的READ characteristics 初始化,读MAC地址

WechatProfile_SetParameter(WECHATPROFILE_CHAR_READ,WECHATPROFILE_CHAR_READ_LEN, charValueRead );

//微信Airsync协议的Indicate characteristics 初始化,设备主动发送消息数据

WechatProfile_SetParameter(WECHATPROFILE_CHAR_INDICATE,WECHATPROFILE_CHAR_INDICATE_LEN, charValueIndicate );

//微信Airsync协议的write characteristics 初始化,设备被动接受写数据

WechatProfile_SetParameter(WECHATPROFILE_CHAR_WRITE,WECHATPROFILE_CHAR_WRITE_LEN, charValueWrite );


6.     初始化微信Airsync服务状态机

在SimpleBLEPeripheral_Init函数的最后添加:

wechat_init();


7.     SimpleBLEPeripheral_ProcessEvent应用事件处理函数中增加微信服务事件处理

if ( events& SBP_START_AUTH_CONNECTION_EVT ) {             

    //登录授权

wechat_main_process(NULL);

    return (events ^SBP_START_AUTH_CONNECTION_EVT);

  }

 

  if ( events &SBP_START_INIT_CONNECTION_EVT ) {           

    //初始化

wechat_main_process(NULL);

    return (events ^ SBP_START_INIT_CONNECTION_EVT);

       }


8.     simpleBLEPeripheral_ProcessOSALMsg系统消息处理函数中增加APP手机蓝牙连接后订阅微信indicate服务的处理。

caseGATT_MSG_EVENT:

      if ( ((gattMsgEvent_t *)pMsg)->method== ATT_HANDLE_VALUE_CFM )

        {

            on_indicate_comfirm();          

        }

      break;


9.     peripheralStateNotificationCB连接状态变化时重置微信服务状态机

GAPROLE_CONNECTED连接时调用wechat_init();

GAPROLE_WAITING断开连接时调用wechat_init();


10.  simpleProfileChangeCB特性值变化(客户端写操作)时的回调


case WECHATPROFILE_CHAR_WRITE:

     WechatProfile_GetParameter(WECHATPROFILE_CHAR_WRITE, newChar5Value );

      on_write(newChar5Value, 20);

      break;


此时读到的数据是经过protobuf打包的数据格式,在on_write中会解包,并会回调以下接口:

        void on_write_user_hook(unsigned char*str, unsigned char len);

        该接口由用户实现,str即是客户端透传的数据,len是长度。可以选择输出到串口。str的数据格式是微信官方后台demo(rose_blue)定义的应用自定义数据格式。


11.  设备主动发消息(indicate)的接口

int32wechat_indicate_handler(void *dataBuf, uint8 len);

该接口中会将用户的dataBuf以微信官方后台demo(发送515获得,roseblue_anichips.zip)定义的应用自定义数据格式进行protobuf打包,并发送给手机微信,最终到达厂商后台。


12.  用户如何基于微信Airsync协议定制自己的应用

1) 微信官方后台demo定义的应用自定义数据格式有头部HEAD和包体body。用户可以自行定义body的数据格式,并修改后台服务和蓝牙设备端的处理过程。

2) 设备主动发送数据使用第11步的wechat_indicate_handler接口。

3) 设备收到数据会回调第10步的on_write_user_hook接口,用户的处理代码添加到该接口即可。


目前微信串口透传和APP透传的设备端源码工程、微信后台源码工程、android APK均已经提供。微信Airsync协议跟MAC绑定,用户需要根据《微信蓝牙开发板体验和开发指引》获取蓝牙的MAC地址,发送到邮件[email protected],即会获得一个可用的微信Airsync协议库(lib_wehat.lib)。如果你没有开发板,也可以加入嵌入式企鹅圈来获取源码资源,并自行获取已有2541板子的MAC地址,发邮件来获取lib_wechat.lib.也可以考虑购买嵌入式企鹅圈微信蓝牙开发板(体验价68元包邮)。

        更多嵌入式和物联网原创技术分享敬请关注微信公众号:嵌入式企鹅圈

[置顶] 微信蓝牙Airsync协议demo工程实现_第1张图片

你可能感兴趣的:(CC2541,微信蓝牙开发板,airsync,微信硬件,蓝牙airsync开发)