你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-WB09KE评测】BLE创建服务和写特征控制LED

[复制链接]
BinWin 发布时间:2024-11-3 15:25
       上次创建完工程,留了个点灯的尾巴,这次给完成。

        在IOC工程界面添加服务一个服务,会增加一个服务配置的窗口
         5.png
        打开SERVER1的配置界面,修改UUID便于手机端辨识,还有Service name。再添加一个特征,也同样修改下UUID和名称,打算控制LED,1个字节的Value就可以。
       1.png
        完成以上就可以更新代码了。烧录后在手机APP中搜索到XX-STTM32并连接后查看是否有刚才配置的服务和特征
          6.png
         到这里完成了一半。因为此时打开写属性,调试信息里并没有输出任何内容,需要手动添加代码。查找工程,可以看到新增加的BLE App代码文件
         7.png
         打开ld2.c文件查找相关内容,函数不多,可以很快定位到该服务的事件处理函数如下
          2.png
        从以上代码能够看出收到服务端的写特征数据时会再调用LD2_Notification(¬ification);函数,同时传入notification结构体,我们要提取的数据也在这个结构体里面。所有找到LD2_Notification函数,添加对playload值的提取和点灯代码。   
      
  1. void LD2_Notification(LD2_NotificationEvt_t *p_Notification)
  2. {
  3.   /* USER CODE BEGIN Service1_Notification_1 */
  4.         uint8_t value;
  5.   /* USER CODE END Service1_Notification_1 */
  6.   switch(p_Notification->EvtOpcode)
  7.   {
  8.     /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */

  9.     /* USER CODE END Service1_Notification_Service1_EvtOpcode */

  10.     case LD2_ON_WRITE_EVT:
  11.       /* USER CODE BEGIN Service1Char1_WRITE_EVT */
  12.             value = p_Notification->DataTransfered.p_Payload[0];
  13.             APP_DBG_MSG(" recv msg %c\n",value);
  14.             if(value == '0')
  15.             {
  16.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_SET);
  17.             }else if(value == '1'){
  18.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_RESET);
  19.             }
  20.       /* USER CODE END Service1Char1_WRITE_EVT */
  21.       break;

  22.     default:
  23.       /* USER CODE BEGIN Service1_Notification_default */

  24.       /* USER CODE END Service1_Notification_default */
  25.       break;
  26.   }
  27.   /* USER CODE BEGIN Service1_Notification_2 */

  28.   /* USER CODE END Service1_Notification_2 */
  29.   return;
  30. }
复制代码
       对于数据的处理,在客户端是支持输入ASCII和HEX格式,所以服务端也就是开发板的代码中要和输入对应。这里使用ASCII来传值。
        在串口调试助手中也打印出来收到的写特征值。如下
         4.png
        不过倒是有个问题,Service name在手机客户端都显示unknow,一时没找到原因。


收藏 评论2 发布时间:2024-11-3 15:25

举报

2个回答
STMCU-管管 回答时间:2024-11-4 14:42:54
Service name会不会是UUID格式问题

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版