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

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

[复制链接]
BinWin 发布时间:2024-11-3 15:25
       上次创建完工程,留了个点灯的尾巴,这次给完成。  Q' k$ U/ J* V4 T9 V" u/ |" R' W

: V/ C0 p5 j+ B& N5 Y- f        在IOC工程界面添加服务一个服务,会增加一个服务配置的窗口
4 U( N) R, o* q8 L  ~         5.png
& g0 @; y4 t: [        打开SERVER1的配置界面,修改UUID便于手机端辨识,还有Service name。再添加一个特征,也同样修改下UUID和名称,打算控制LED,1个字节的Value就可以。
1 T- k" v. t$ @/ Q; H! x$ C5 C% u       1.png " t! D$ k- @# Y. f5 k( i3 g9 H& C- s
        完成以上就可以更新代码了。烧录后在手机APP中搜索到XX-STTM32并连接后查看是否有刚才配置的服务和特征3 b3 P1 B% E1 z: I, v" [: |! X
          6.png
/ ]9 l" Z: w, y" f# D# V3 J& D         到这里完成了一半。因为此时打开写属性,调试信息里并没有输出任何内容,需要手动添加代码。查找工程,可以看到新增加的BLE App代码文件  z1 O4 u1 R, @3 `( _! g+ s
         7.png , p% f5 X* G4 r
         打开ld2.c文件查找相关内容,函数不多,可以很快定位到该服务的事件处理函数如下
, R! u" D. E2 u, o+ i          2.png
: D2 g+ E/ q5 z0 B$ O8 M2 t. C        从以上代码能够看出收到服务端的写特征数据时会再调用LD2_Notification(¬ification);函数,同时传入notification结构体,我们要提取的数据也在这个结构体里面。所有找到LD2_Notification函数,添加对playload值的提取和点灯代码。   
' y9 @$ ~; @: m4 C+ k, `       + u$ B* e; |1 j( @: w- G4 A
  1. void LD2_Notification(LD2_NotificationEvt_t *p_Notification)
    4 f9 ^  }; H1 V6 S% D& g
  2. {
    ! k; J0 ^0 d* X4 J9 Y; z
  3.   /* USER CODE BEGIN Service1_Notification_1 */$ q( g' ^% V3 B* ^+ o, B- @
  4.         uint8_t value;! B! g7 a" n" H  y& u7 w2 G8 M
  5.   /* USER CODE END Service1_Notification_1 */
    5 S; U6 z$ A3 ?- v3 C4 @
  6.   switch(p_Notification->EvtOpcode)
    # C8 A1 C- d' `% `, C  h" X
  7.   {( k: y- Z) f4 B
  8.     /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */% U: A7 Q$ n' i. s

  9. 5 w  b/ \7 c6 f$ C& w: ]8 r
  10.     /* USER CODE END Service1_Notification_Service1_EvtOpcode */
    * E; T3 c9 X6 o' x3 e% a

  11. " K+ n6 |# M3 t; F
  12.     case LD2_ON_WRITE_EVT:* {# U: H( @4 F. O2 B; g+ X
  13.       /* USER CODE BEGIN Service1Char1_WRITE_EVT */
    7 y  s2 ?+ Q' D4 V6 U" W; i
  14.             value = p_Notification->DataTransfered.p_Payload[0];# W1 `0 j* i) z$ `
  15.             APP_DBG_MSG(" recv msg %c\n",value);
    / F0 t5 O3 T3 n( `- n
  16.             if(value == '0'), D" z( p7 [" e3 ^: V9 E
  17.             {
    1 [! {" Q. X  _# |2 L
  18.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_SET);( s4 t3 G) G1 U+ Y) L6 K, M( j& Q
  19.             }else if(value == '1'){
    ' f# v: E" j' _% h1 `6 K; x" u
  20.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_RESET);- P; b4 J4 c; c
  21.             }
    ' ]: c: |% b, w7 P& O8 o
  22.       /* USER CODE END Service1Char1_WRITE_EVT */
    4 j2 K7 g# D( F, U1 n
  23.       break;1 z0 Q/ C9 M" [8 X8 \/ `5 |  C

  24. + W/ ^. `0 `9 `% i5 J5 x
  25.     default:4 o) A9 `1 M, s+ S  I$ i# a
  26.       /* USER CODE BEGIN Service1_Notification_default */, ?7 X& W& e. s' }

  27. + s7 I. }+ p" G' k2 S& b
  28.       /* USER CODE END Service1_Notification_default */
    0 b% E) I* u# k& u- r) }4 |+ p5 J
  29.       break;
    * a4 U5 h% d& k+ }- P
  30.   }
    2 T" R; U" V/ r* T7 H
  31.   /* USER CODE BEGIN Service1_Notification_2 */
    4 h1 q9 u0 |7 e, H& s
  32. 5 Q$ G) ^2 _3 P) h, t( d
  33.   /* USER CODE END Service1_Notification_2 */
    ) M- f+ a7 V4 g" Z9 f
  34.   return;  V/ R1 z& d& `, N! P; ]4 q
  35. }
复制代码
       对于数据的处理,在客户端是支持输入ASCII和HEX格式,所以服务端也就是开发板的代码中要和输入对应。这里使用ASCII来传值。
  A- r: J8 ]6 o; ~  d) H9 c- e        在串口调试助手中也打印出来收到的写特征值。如下0 ]3 r1 ^0 B* G  y/ D+ d, O7 l
         4.png
  o7 z( A) Q! k! C6 d$ U; y2 J        不过倒是有个问题,Service name在手机客户端都显示unknow,一时没找到原因。3 \% G+ |+ t' z$ I) X* ^' R
: K* e# u7 D1 K( U
  W8 c; b/ i% {2 p
赞 收藏 评论2 发布时间:2024-11-3 15:25

举报

2个回答
STMCU-管管 回答时间:2024-11-4 14:42:54
Service name会不会是UUID格式问题
; L. C) E4 O" G9 f; R4 z
BinWin 回答时间:2024-11-4 21:03:53
STMCU-管管 发表于 2024-11-4 14:427 m; Z' w; I# z
Service name会不会是UUID格式问题
2 O1 t  \2 d2 ]# a( _3 l4 }: [8 e
Solved: Re: Naming BLE service on STM32WB - STMicroelectronics Community
4 F6 N, U& U9 |1 |# X2 D; U8 k1 N  ~3 w. Q& M

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版