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

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

[复制链接]
BinWin 发布时间:2024-11-3 15:25
       上次创建完工程,留了个点灯的尾巴,这次给完成。# g4 B5 s/ c1 |( l; U

. F0 C5 x9 ^4 A& N. O; q        在IOC工程界面添加服务一个服务,会增加一个服务配置的窗口4 d2 V7 P/ P1 E+ e) X( {; M# W
         5.png 4 I, j( d6 \  j% Y% L3 w! ]
        打开SERVER1的配置界面,修改UUID便于手机端辨识,还有Service name。再添加一个特征,也同样修改下UUID和名称,打算控制LED,1个字节的Value就可以。
' X. V' j3 @" |7 b4 \2 Q+ Y       1.png
( K7 o2 O1 l4 H  Z. y        完成以上就可以更新代码了。烧录后在手机APP中搜索到XX-STTM32并连接后查看是否有刚才配置的服务和特征
- D# g) c4 ?( h+ E* j          6.png 4 y* i+ r. I& ?2 U, Z/ v+ Y
         到这里完成了一半。因为此时打开写属性,调试信息里并没有输出任何内容,需要手动添加代码。查找工程,可以看到新增加的BLE App代码文件
# `& ~# E' D7 P; U9 O( J* E" `         7.png
" {! y6 H. L0 l( H0 K# A2 Q, m         打开ld2.c文件查找相关内容,函数不多,可以很快定位到该服务的事件处理函数如下1 B& u2 X$ _$ [
          2.png
( J" r9 @! L" q        从以上代码能够看出收到服务端的写特征数据时会再调用LD2_Notification(¬ification);函数,同时传入notification结构体,我们要提取的数据也在这个结构体里面。所有找到LD2_Notification函数,添加对playload值的提取和点灯代码。   
7 [  f1 J1 G& o! Q      
6 F$ j9 @$ }* T6 f/ x+ a- X
  1. void LD2_Notification(LD2_NotificationEvt_t *p_Notification)
    ( ?$ i, }1 W# i( N6 t) u3 m9 x  b
  2. {
    0 j) E9 ]& q* t2 |! j
  3.   /* USER CODE BEGIN Service1_Notification_1 */
    ( ?$ Z6 m5 |( r8 N" ^. I
  4.         uint8_t value;
    . }3 I( B' ^) Q2 b: f  |) R
  5.   /* USER CODE END Service1_Notification_1 */5 z  k; h7 p4 b& @
  6.   switch(p_Notification->EvtOpcode)
    : k3 t$ q0 L$ B" M4 T
  7.   {9 @1 N  {$ Q* N- q0 f7 G
  8.     /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */2 O  q% M2 [$ L

  9. " B. ~7 `7 a* r7 h! g2 x
  10.     /* USER CODE END Service1_Notification_Service1_EvtOpcode */* N( t6 {: K/ m1 C/ u+ ^1 Y

  11. 8 |# s# X) Q2 J* d' q
  12.     case LD2_ON_WRITE_EVT:5 ?- _# n" A+ n% p. I6 |
  13.       /* USER CODE BEGIN Service1Char1_WRITE_EVT */
    - ^- a  f( c2 G3 }: @& G
  14.             value = p_Notification->DataTransfered.p_Payload[0];6 t3 q. l1 Y. B" n
  15.             APP_DBG_MSG(" recv msg %c\n",value);7 ~  L4 ~1 l$ e5 B3 N% D- l
  16.             if(value == '0')
    7 ]/ K& k0 r3 O. S( }
  17.             {
    ! v( A. V& I) `3 X7 z
  18.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_SET);* F( Z6 r  D. r* B; l
  19.             }else if(value == '1'){5 [3 H6 N& h/ h1 F3 }0 K/ X
  20.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_RESET);* h1 L: A  A; J- B
  21.             }; \0 W% t$ y8 A, ^
  22.       /* USER CODE END Service1Char1_WRITE_EVT */
    6 `2 u* a" v0 W4 e5 ~
  23.       break;
    % [- H" d4 ?' T8 z0 m8 E' q

  24. 7 H8 w1 S1 d1 H6 f( M
  25.     default:% x7 r  `7 {' a! M! Y% z: u
  26.       /* USER CODE BEGIN Service1_Notification_default */# K: k* o3 p  ?9 P6 j3 L

  27. # g* L0 m) U1 D  a  {! D0 V
  28.       /* USER CODE END Service1_Notification_default */+ f; M) p9 E5 q, q9 w
  29.       break;3 S8 q+ F  y1 J, u8 w
  30.   }; \- }& |* L' _' `) |& L1 O, R
  31.   /* USER CODE BEGIN Service1_Notification_2 */
    & ^% o5 L5 J. s# q6 }

  32. $ @. o" j, y4 g) s- K
  33.   /* USER CODE END Service1_Notification_2 */  q. |) `6 g' J# T- ~1 A
  34.   return;" B$ X7 \6 t! O2 r! D; b) \
  35. }
复制代码
       对于数据的处理,在客户端是支持输入ASCII和HEX格式,所以服务端也就是开发板的代码中要和输入对应。这里使用ASCII来传值。; R8 C3 n2 d: }; H; a  o2 |: k- R
        在串口调试助手中也打印出来收到的写特征值。如下
# I6 y, D& @! R6 T. ]; Q         4.png
8 G" w9 E* I1 ?) @5 {% |; V        不过倒是有个问题,Service name在手机客户端都显示unknow,一时没找到原因。
# c. J% k1 h( h0 c, z  Y  I: O6 `6 y. I" \: d7 R" Q& n1 V9 A
7 B9 G+ C5 ~+ |+ S" P& n8 R: d
收藏 评论2 发布时间:2024-11-3 15:25

举报

2个回答
STMCU-管管 回答时间:2024-11-4 14:42:54
Service name会不会是UUID格式问题: ~( ~9 K. D" H- Q: m
BinWin 回答时间:2024-11-4 21:03:53
STMCU-管管 发表于 2024-11-4 14:42$ H  @, c6 g1 p
Service name会不会是UUID格式问题

8 k: F2 }0 {0 K! cSolved: Re: Naming BLE service on STM32WB - STMicroelectronics Community6 I% I7 k; ]7 ?/ y$ n! z
) B! x% [$ L, t; g% d$ [

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版