[STM32WBA] 【NUCLEO-WBA65RI 测评】1、Peer 2 Peer应用

当然p2p_Client端,也可以用软件工具来代替如ST BLE TOOLBOX或其他BLE调试工具。
-
包含对等互连服务,该服务公开了通知与写入两个特征,以建立双向数据通信。
-
作为GATT服务器运行。
-
访问对等互连服务器公开的信息,通过写入特征控制设备,并接收其通知。
-
作为GATT客户端运行。
二、搭建环境
按照默认STM32cuteMX默认安装地址,2个demo源码可以在以下路径获得:
C:\Users\用户名\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Projects\NUCLEO-WBA55CG\Applications\BLE\BLE_p2pClient
C:\Users\用户名\STM32Cube\Repository\STM32Cube_FW_WBA_V1.7.0\Projects\NUCLEO-WBA65RI\Applications\BLE\BLE_p2pServer
NUCLEO-WBA65RI已默认安装了BLE_p2pServer固件,可以直接使用。
NUCLEO-WBA55CG需要重新编译烧录BLE_p2pClient固件。

三、测试运行
P2P Service定义的服务和2个特征值LED、SWITCH:
|
Service
|
Characteristic
|
Mode
|
UUID
|
sizee
|
|
P2P Service
|
0000FE40-cc7a-482a-984a-7f2ed5b3e58f
|
|||
|
LED
|
Write without Response/Read
|
0000FE41-8e22-4541-9d4c-21edae82ed19
|
2
|
|
|
SWITCH
|
Notify
|
0000FE42-8e22-4541-9d4c-21edae82ed19
|
2
|
LED 特征值:
| Peer to Peer Service - LED Characteristic | |||||||||
|
当特征值写入0x0100时,LED熄灭,写入0x0101时,LED点亮
SWITCH特征值(按键B1):
| Peer to Peer Service - SWITCH Characteristic | |||||||||
|
按下B1键,向p2p_Client端交替发送0x0100或0x01001,
p2p_Client在收到0x0100时熄灭本地LED,在收到0x0101时点亮本地LED
完整的交互关系:
四、源码分析
1、写入LED特征值处理
p_Payload第2为0x01,点亮LED,为0x00,熄灭LED
case P2P_SERVER_LED_C_WRITE_NO_RESP_EVT:/* USER CODE BEGIN Service1Char1_WRITE_NO_RESP_EVT */if(p_Notification->DataTransfered.p_Payload[1] == 0x01){#if (CFG_LED_SUPPORTED == 1)BSP_LED_On(LED_BLUE);#endifLOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 ON\n");P2P_SERVER_APP_Context.LedControl.Led1 = 0x01; /* LED1 ON */}if(p_Notification->DataTransfered.p_Payload[1] == 0x00){#if (CFG_LED_SUPPORTED == 1)BSP_LED_Off(LED_BLUE);#endifLOG_INFO_APP("-- P2P APPLICATION SERVER : LED1 OFF\n");P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */}
2、SWITCH NOTIFY处理
Sequencer中注册CFG_TASK_SEND_NOTIF_ID事件处理函数
UTIL_SEQ_RegTask( 1U << CFG_TASK_SEND_NOTIF_ID, UTIL_SEQ_RFU, P2P_SERVER_Switch_c_SendNotification);
__USED void P2P_SERVER_Switch_c_SendNotification(void) /* Property Notification */{P2P_SERVER_APP_SendInformation_t notification_on_off = Switch_c_NOTIFICATION_OFF;P2P_SERVER_Data_t p2p_server_notification_data;p2p_server_notification_data.p_Payload = (uint8_t*)a_P2P_SERVER_UpdateCharData;p2p_server_notification_data.Length = 0;/* USER CODE BEGIN Service1Char2_NS_1 */if(P2P_SERVER_APP_Context.ButtonControl.ButtonStatus == 0x00){P2P_SERVER_APP_Context.ButtonControl.ButtonStatus = 0x01;}else{P2P_SERVER_APP_Context.ButtonControl.ButtonStatus = 0x00;}a_P2P_SERVER_UpdateCharData[0] = 0x01; /* Device Led selection */a_P2P_SERVER_UpdateCharData[1] = P2P_SERVER_APP_Context.ButtonControl.ButtonStatus;/* Update notification data length */p2p_server_notification_data.Length = (p2p_server_notification_data.Length) + 2;if(P2P_SERVER_APP_Context.Switch_c_Notification_Status == Switch_c_NOTIFICATION_ON){LOG_INFO_APP("-- P2P APPLICATION SERVER : INFORM CLIENT BUTTON 1 PUSHED\n");notification_on_off = Switch_c_NOTIFICATION_ON;}else{LOG_INFO_APP("-- P2P APPLICATION SERVER : CAN'T INFORM CLIENT - NOTIFICATION DISABLED\n");}/* USER CODE END Service1Char2_NS_1 */if (notification_on_off != Switch_c_NOTIFICATION_OFF){P2P_SERVER_UpdateValue(P2P_SERVER_SWITCH_C, &p2p_server_notification_data);}/* USER CODE BEGIN Service1Char2_NS_Last *//* USER CODE END Service1Char2_NS_Last */return;}


。
---------------------
作者:sujingliang
链接:https://bbs.21ic.com/icview-3498606-1-1.html?_dsign=4ac8408d
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)