乐于分享
好东西不私藏

手把手教你:BLE从机如何接收手机APP发过来的数据

手把手教你:BLE从机如何接收手机APP发过来的数据
一、前言  
本篇开始讲解如何BLE从机如何接收手机APP发过来的数据信息
二、阅读说明
1、泰凌微芯片学习者,前期使用过该芯片。
2、能够知道怎么进行创建工程,下载代码。
3、有一块开发板,板上的芯片可以是8251,8253或者8258。
三、正文
1、使用的SDK
手把手教你:建立BLE从机私有服务
使用的SDK为该篇文章描述的,这个SDK中的ble_sample例程使用了私有服务,本篇文章会用到
2、配置打印口
#if (UART_PRINT_DEBUG_ENABLE)    #define DEBUG_INFO_TX_PIN               GPIO_PB2    #define PULL_WAKEUP_SRC_PB2             PM_PIN_PULLUP_10K    #define PB2_OUTPUT_ENABLE               1    #define PB2_DATA_OUT                    1#endif
在app_config.h中配置打印口为PB2,该打印口可以修改,根据你自己的开发板端口来选择
3、给私有服务的特征声明增加特性
static const u8 my_oneSelf_CharVal[5] = {    CHAR_PROP_READ | CHAR_PROP_NOTIFY | CHAR_PROP_INDICATE |CHAR_PROP_WRITE_WITHOUT_RSP,    U16_LO(ONE_SELF_LEVEL_INPUT_DP_H), U16_HI(ONE_SELF_LEVEL_INPUT_DP_H),    U16_LO(CHARACTERISTIC_UUID_MY_VALUE), U16_HI(CHARACTERISTIC_UUID_MY_VALUE)};
增加一个CHAR_PROP_WRITE_WITHOUT_RSP特性,该特性允许主机(手机)对BLE从机进行不带回应的写操作,也就是允许主机写命令给到从机,但从机不会回应
4、增加写回调函数
4.1、查看my_Attributes定义的类型,看看哪一个字段端代表了写回调函数
由代码可见第7个元素代表了写的回调函数
4.2、编写回调函数
intmy_onReceiveData(void *para){    rf_packet_att_write_t *p = (rf_packet_att_write_t*)para;    u16 len = p->l2capLen - 3;    unsigned char i = 0;    unsigned char *pDat = &p->value;    if(len > 0)    {        printf("rec data: ");        for(;i < len;i++ )        {            printf("%02x ",pDat[i]);        }    }    return 0;}
在app_att.c文件中增加以上函数,该函数的作用是将接收到的数据打印出来
4.3、回调函数添加
    {4,ATT_PERMISSIONS_READ,2,2,(u8*)(&my_primaryServiceUUID),  (u8*)(&my_oneSelf_ServiceUUID), 00},    {0,ATT_PERMISSIONS_READ,2,sizeof(my_oneSelf_CharVal),(u8*)(&my_characterUUID), (u8*)(my_oneSelf_CharVal), 00},                //prop    {0,ATT_PERMISSIONS_RDWR,2,sizeof(my_oneSelfVal),(u8*)(&my_oneSelf_CharUUID),    (u8*)(my_oneSelfVal), (att_readwrite_callback_t)&my_onReceiveData, 0},    //value    {0,ATT_PERMISSIONS_RDWR,2,sizeof(oneSelfValueInCCC),(u8*)(&clientCharacterCfgUUID),     (u8*)(oneSelfValueInCCC), 00},    //value
app_att.c文件中的新增的服务当中添加回调函数
4.4、更改特征值声明权限
更改为可读可写,之前的权限是可读,如果不进行更改的话,那么数据是发不出来的。
5、nRF Connect软件发送数据
5.1、搜索广播名,点击CONNECT
5.2、点击Unknown Service服务中的发送箭头
5.3、加入要发送的数据后,点击发送
6、串口查看数据
四、结尾
本篇讲解了BLE从机如何通过修改代码来打印出手机发送过来的消息,下一节将讲解结合蓝牙协议讲解手机发送命令和请求的区别