[STM32WB] 【STM32WB09KE测评】+进阶方向+BLE信号强度读取

[复制链接]
1318|2
 楼主| wws2002 发表于 2024-11-21 14:27 | 显示全部楼层 |阅读模式
本帖最后由 wws2002 于 2024-11-21 17:26 编辑

书接上回:STM32WB09KE测评】+进阶方向+BLE钥匙功能实验https://bbs.21ic.com/icview-3414504-1-1.html
62881673ec7394df93.png


在实现了利用钥匙端(手机)发送解锁和闭锁指令成功之后,经过摸索和百度,终于实现了读取BLE的RSSI值,主要可以参考这边应用文档:AN5270   
STM32WB Bluetooth® Low Energy wireless interface
https://www.st.com/resource/en/application_note/an5270-stm32wb-bluetooth-low-energy-wireless-interface-stmicroelectronics.pdf
详细的解释了读取函数HCI_READ_RSSI 的用法,这里我做了一些弯路,下面一一道来:
HCI_READ_RSSI函数的详细参数:
tBleStatus hci_read_rssi(uint16_t Connection_Handle,
                  
       int8_t* RSSI)
这个函数在ble_stack_user_cfg.c中定义,一定要留意这个RSSI的数据类型,我开始就定义错了,定义成unit8_t的无符号的了,然后读出来是错的,以为还有什么换算成负的RSSI,经过一番折腾,而且网上有很多文章也是定义的是错误的。后来仔细阅读发现是有符号整型
主要关注两个参数,  BLE的连接句柄uint16_t Connection_Handle,返回RSSI的数据,这个是int数据类型,再次强调一下。返回数据没有定义,先不管。
RSSI1.jpg
然后还在P2P_SERVER_Notification这个函数中添加代码,在控制接闭锁的同时上报钥匙端的信号强调数据。分析可以看到P2P_SERVER_Notification这个函数的输入参数一个结构体指针:
  1. typedef struct
  2. {
  3.   P2P_SERVER_OpcodeEvt_t       EvtOpcode;
  4.   P2P_SERVER_Data_t             DataTransfered;
  5.   uint16_t                ConnectionHandle;
  6.   uint16_t                AttributeHandle;
  7.   uint8_t                 ServiceInstance;

  8.   /* USER CODE BEGIN Service1_NotificationEvt_t */

  9.   /* USER CODE END Service1_NotificationEvt_t */

  10. } P2P_SERVER_NotificationEvt_t;

其中第三个参数ConnectionHandle正好是BLE连接的句柄,可以直接适用,在定义一个RSSI返回值就可以了。
在函数开始位置定义RSSI返回值(再次提醒是int8),然后再收到开闭锁指令的位置读取rssi数据并通过串口打印出来(模拟发送给车身锁控单元),详细如下代码。
  1. /* Functions Definition ------------------------------------------------------*/
  2. void P2P_SERVER_Notification(P2P_SERVER_NotificationEvt_t *p_Notification)
  3. {
  4.   /* USER CODE BEGIN Service1_Notification_1 */
  5.         int8_t RSSI;//定义BLE RSSI返回值

  6.   /* USER CODE END Service1_Notification_1 */
  7.   switch(p_Notification->EvtOpcode)
  8.   {
  9.     /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */

  10.     /* USER CODE END Service1_Notification_Service1_EvtOpcode */

  11.     case P2P_SERVER_LED_C_READ_EVT:
  12.       /* USER CODE BEGIN Service1Char1_READ_EVT */

  13.       /* USER CODE END Service1Char1_READ_EVT */
  14.       break;

  15.     case P2P_SERVER_LED_C_WRITE_NO_RESP_EVT:
  16.       /* USER CODE BEGIN Service1Char1_WRITE_NO_RESP_EVT */
  17.       if(p_Notification->DataTransfered.p_Payload[1] == 0x01)
  18.       {
  19.         BSP_LED_On(LED_BLUE);
  20.         //APP_DBG_MSG("-- P2P APPLICATION SERVER : LED1 ON\n");
  21.         APP_DBG_MSG("-- P2P APPLICATION SERVER : Key unlocked, Open the door! \n");
  22.         hci_read_rssi(p_Notification->ConnectionHandle, &RSSI);//wws
  23.         APP_DBG_MSG("--------- P2P APPLICATION SERVER :RSSII: %d ------- \n",RSSI);

  24.         P2P_SERVER_APP_Context.LedControl.Led1 = 0x01; /* LED1 ON */
  25.       }
  26.       if(p_Notification->DataTransfered.p_Payload[1] == 0x00)
  27.       {
  28.         BSP_LED_Off(LED_BLUE);
  29.         //APP_DBG_MSG("-- P2P APPLICATION SERVER : LED1 OFF\n");
  30.         APP_DBG_MSG("-- P2P APPLICATION SERVER : Key locked Close the Door! \n");
  31.         P2P_SERVER_APP_Context.LedControl.Led1 = 0x00; /* LED1 OFF */
  32.         hci_read_rssi(p_Notification->ConnectionHandle, &RSSI);//wws
  33.         APP_DBG_MSG("--------- P2P APPLICATION SERVER :RSSII: %d ------- \n",RSSI);
  34.       }
  35.       /* USER CODE END Service1Char1_WRITE_NO_RESP_EVT */
  36.       break;

  37.     case P2P_SERVER_SWITCH_C_NOTIFY_ENABLED_EVT:
  38.       /* USER CODE BEGIN Service1Char2_NOTIFY_ENABLED_EVT */
  39.       P2P_SERVER_APP_Context.Switch_c_Notification_Status = Switch_c_NOTIFICATION_ON;
  40.       APP_DBG_MSG("-- P2P APPLICATION SERVER : NOTIFICATION ENABLED\n");
  41.       APP_DBG_MSG(" \n\r");
  42.       /* USER CODE END Service1Char2_NOTIFY_ENABLED_EVT */
  43.       break;

  44.     case P2P_SERVER_SWITCH_C_NOTIFY_DISABLED_EVT:
  45.       /* USER CODE BEGIN Service1Char2_NOTIFY_DISABLED_EVT */
  46.       P2P_SERVER_APP_Context.Switch_c_Notification_Status = Switch_c_NOTIFICATION_OFF;
  47.       APP_DBG_MSG("-- P2P APPLICATION SERVER : NOTIFICATION DISABLED\n");
  48.       APP_DBG_MSG(" \n\r");
  49.       /* USER CODE END Service1Char2_NOTIFY_DISABLED_EVT */
  50.       break;

  51.     default:
  52.       /* USER CODE BEGIN Service1_Notification_default */

  53.       /* USER CODE END Service1_Notification_default */
  54.       break;
  55.   }
  56.   /* USER CODE BEGIN Service1_Notification_2 */

  57.   /* USER CODE END Service1_Notification_2 */
  58.   return;
  59. }

  60. void P2P_SERVER_APP_EvtRx(P2P_SERVER_APP_ConnHandleNotEvt_t *p_Notification)
  61. {
  62.   /* USER CODE BEGIN Service1_APP_EvtRx_1 */
  63.   int8_t RSSI;
  64.   /* USER CODE END Service1_APP_EvtRx_1 */

  65.   switch(p_Notification->EvtOpcode)
  66.   {
  67.     /* USER CODE BEGIN Service1_APP_EvtRx_Service1_EvtOpcode */

  68.     /* USER CODE END Service1_APP_EvtRx_Service1_EvtOpcode */
  69.     case P2P_SERVER_CONN_HANDLE_EVT :
  70.       P2P_SERVER_APP_Context.ConnectionHandle = p_Notification->ConnectionHandle;
  71.       /* USER CODE BEGIN Service1_APP_CENTR_CONN_HANDLE_EVT */
  72.       APP_DBG_MSG("-------------------The BLE KEY connected------------------------\n");
  73.       hci_read_rssi(P2P_SERVER_APP_Context.ConnectionHandle, &RSSI);//wws
  74.       APP_DBG_MSG("---------WWS2002---------- P2P APPLICATION SERVER :RSSI: %d ------- \n",RSSI);
  75.       /* USER CODE END Service1_APP_CENTR_CONN_HANDLE_EVT */
  76.       break;
  77.     case P2P_SERVER_DISCON_HANDLE_EVT :
  78.       APP_DBG_MSG("-------------------The BLE KEY disconnected------------------------\n");
  79.       P2P_SERVER_APP_Context.ConnectionHandle = 0xFFFF;
  80.       /* USER CODE BEGIN Service1_APP_DISCON_HANDLE_EVT */
  81.       P2P_SERVER_APP_LED_BUTTON_context_Init();
  82.       /* USER CODE END Service1_APP_DISCON_HANDLE_EVT */
  83.       break;

  84.     default:
  85.       /* USER CODE BEGIN Service1_APP_EvtRx_default */

  86.       /* USER CODE END Service1_APP_EvtRx_default */
  87.       break;
  88.   }

  89.   /* USER CODE BEGIN Service1_APP_EvtRx_2 */

  90.   /* USER CODE END Service1_APP_EvtRx_2 */

  91.   return;
  92. }

然后编译,下载运行,用手机APP连接STM32WB09KE评估板,调试串口可以看到获取的RSSI数据了。
61141673ed2d533759.png









 楼主| wws2002 发表于 2024-11-21 14:35 | 显示全部楼层
本帖最后由 wws2002 于 2025-7-22 14:48 编辑

评估暂告一段了,下面要开始项目的实际设计和调试,如果有成果再来汇报给大家,多谢大家的关注!

0511.zip

163.8 KB, 下载次数: 1

 楼主| wws2002 发表于 2025-7-21 09:55 | 显示全部楼层
本帖最后由 wws2002 于 2025-7-21 17:35 编辑

增加一个小资料
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部