DA14681 微信蓝牙接入方案

平台介绍:

DA14681 + 一个安卓手机

前期工作:

1.      下载AirSync调试工具:http://iot.weixin.qq.com/wiki/new/index.html?page=4-2-3

2.      精简协议介绍

1.      AirSync协议介绍

全在代码里面了,自己看吧。。。很简单的。

 

开发工作:

1.      蓝牙服务添加

 

#defineBLE_UUID_WECHAT_SERVICE                        0xFEE7

#defineBLE_UUID_WECHAT_WRITE_CHARACTERISTICS          0xFEC7

#define BLE_UUID_WECHAT_INDICATE_CHARACTERISTICS        0xFEC8

#define BLE_UUID_WECHAT_READ_CHARACTERISTICS            0xFEC9

 

#defineBLE_UUID_WECHAT_STEP_CHARACTERISTICS           0xFEA1

#defineBLE_UUID_WECHAT_TARGET_CHARACTERISTICS         0xFEA2

微信蓝牙的UUID是 0Xfee7,该服务已经通过蓝牙认证(据说)。

其中Air Sync协议所需要的特性有:0xFEC7write0xFEC8(indicate)  0xFEC9read

这三个特性是必须要的否则AirSync检测服务会失败。

 

0xfea1是计步精简协议中的计步数据上报特性,0xfea2是运动目标特性,其中0xfea1需要有

Read,write,indicate三个权限,0xfea2也一样。

2.      广播数据添加

广播数据中有如下条件:

a.      必须要有uuid 0xfee在广播数据中,也就是说0x03, 0x03, 0xE7, 0xFE,这几个值必须在广播数据中。(解释:第一个0x03表示数据长度(从第二个0x03开始算正好三个长度)  ,第二个0x03表示数据描述 16uuid 0x03,后面两个表示uuid的值(为什么倒过来,不解释))

b.      必须要有厂商自定义数据描述中有mac地址,也就是说如下数据必须在广播数据里面

0x09, 0xff,0x00,0x0A,0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC.

(解释:0x09表示数据长度;0xff 表示厂商自定义数据;0x00,0x0a表示公司id(自己随便写);0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC 表示mac地址)

3.      添加微信ble auth的代码置工程中(由于这是小弟第一次写博客,还不知道如何添加附件,这部分代码在dailog的官方网站里面可以下载得到)

https://support.dialog-semiconductor.com/connectivity/reference-design/wechat-iot-software-development-kit



1.      在系统初始化初添加如下代码:

externdata_handler*m_mpbledemo2_handler;

staticvoidregister_all_products(void)

{

        REGISTER(mpbledemo2);

}

void app_wechat_SetDatahandler(data_handler* pHandler)

{

   pDataHandler = pHandler;

}

 

void app_wechat_init(void)

{

   register_all_products();

   data_handler_init(&m_mpbledemo2_handler,PRODUCT_TYPE_MPBLEDEMO2);

        m_mpbledemo2_handler->m_data_init_func();

   m_mpbledemo2_handler->m_data_init_peripheral_func();

   app_wechat_SetDatahandler(m_mpbledemo2_handler);

}

(解释:系统初始化时调用 app_wechat_init(),理由不解释,看代码)

2.      在蓝牙通知enable 处添加device_auth()(解释:手机使用AirSync协议连接上设备之后,在使能通知结束之后,设备端需要立刻请求认证。故在此添加device_auth())

3.      在蓝牙收数据处添加如下代码:

typedefstruct

{

        uint8_t *data;

        uint16_tlen;

        uint16_toffset;

} data_info;

staticdata_infog_rcv_data   ;

void ble_wechat_process_received_data(uint8_t* pData, uint32_t length)

{

        int error_code;

        int chunk_size = 0;

        if (length <= 20)

        {

                if (g_rcv_data.len == 0)

                {

            BpFixHead *fix_head = (BpFixHead *)pData;

                        g_rcv_data.len = ntohs(fix_head->nLength);

                        g_rcv_data.offset = 0;

                        g_rcv_data.data = (uint8_t*)ke_malloc(g_rcv_data.len, KE_MEM_NON_RETENTION);

                }

 

                chunk_size = g_rcv_data.len - g_rcv_data.offset;

                chunk_size = chunk_size <length ? chunk_size : length;

                memcpy(g_rcv_data.data + g_rcv_data.offset, pData, chunk_size);

                g_rcv_data.offset += chunk_size;

 

                if (g_rcv_data.len <= g_rcv_data.offset)

                {

                        error_code = m_mpbledemo2_handler->m_data_consume_func(g_rcv_data.data, g_rcv_data.len);

                       m_mpbledemo2_handler->m_data_free_func(g_rcv_data.data,g_rcv_data.len);

                       wechat_error_chack(m_mpbledemo2_handler, error_code);

                        g_rcv_data.len = 0;

                        g_rcv_data.offset = 0;

 

                       m_mpbledemo2_handler->m_data_main_process_func();

                }

        }

}

(ble一次收20个字节,所以需要分开收数据,收到数据之后,m_mpbledemo2_handler会把数据分发给各个callback,故只需要添加这部分代码就可以了(简单无脑有木有^_^

4.      在读者自己系统里面的某个按键中断处(或者别的什么中断),添加如下代码

  mpbledemo2_sendData(SEND_HELLO_WECHAT,sizeof(SEND_HELLO_WECHAT));

(解释:因为需要测试设备主动上报数据这一功能,故需添加此代码)

5.      到这里,我们设备端的开发工作已经全部完成了(绝对简单有木有!!!)。

调试结果:

微信设备认证

1.      登陆“微信公众平台接口测试帐号”

http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

其中微信号,appID,appsecret需要记下来,后面要用的!!!

2.      获取设备


3.      添加产品



4.     接入方案设置


5.     产品能力登记


得到产品,记下来那个id 是product_id。后面要用

1.      设备授权

   1.1.     进入这个连接,来获取access_token

https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B7%E5%8F%96access_token%E6%8E%A5%E5%8F%A3%20/token

在红线出添加刚才获取到的appID和secret 。来获取你的access_token。


1.2.      获取设备二维码

在这里获得的qritcket可以使用在线二维码工具来转换成二维码,后续使用手机微信扫一扫连接。 Deviceid是你的设备id,这个ID需要和你代码里面的id一致,并且记下来这个ID,设备授权要用。

1.3 .   设备授权

在body中填入如下内容

{
    "device_num": "1", 
    "device_list": [
        {
            "id": "gh_fabe14ce2bda_492344d89dba1ca4", 
            "mac": "123456789ABC", 
            "connect_protocol": "3", 
            "auth_key": "", 
            "close_strategy": "2", 
            "conn_strategy": "4", 
            "crypt_method": "0", 
            "auth_ver": "0", 
            "manu_mac_pos": "-1", 
            "ser_mac_pos": "-2"
        }
    ], 
    "op_type": "1", 
    "product_id": "29933"
}

字段解释如下:


获得设备授权。

好了,到了这一步,所有的工作已经完成了,可以开始玩一玩了。

1. 微信扫一扫刚才得到的那个二维码,关注一下。

2. 打开手机蓝牙。

3. 连接设备。



目前作者只能做到在公众号界面连接上设备,但是还没办法同步运动数据。。。。
希望读者们可以提建议,帮忙看看如何实现同步运动数据。
 

作者邮箱:517204655@qq.com
姓名:Jun





  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值