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

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

[复制链接]
BinWin 发布时间:2024-11-3 15:25
       上次创建完工程,留了个点灯的尾巴,这次给完成。
  O$ i; o) l, B+ R. n* n, E
8 @. p0 G" a3 d/ k& c& J( s0 [        在IOC工程界面添加服务一个服务,会增加一个服务配置的窗口9 {' j9 M0 j0 \+ S) d- b: ]
         5.png 2 {7 b! f8 H' J! J8 |
        打开SERVER1的配置界面,修改UUID便于手机端辨识,还有Service name。再添加一个特征,也同样修改下UUID和名称,打算控制LED,1个字节的Value就可以。
, G' B/ I: x* v7 [1 m8 O       1.png $ o2 p# A# m" T( a4 C# S
        完成以上就可以更新代码了。烧录后在手机APP中搜索到XX-STTM32并连接后查看是否有刚才配置的服务和特征- \$ k! Y; b9 r
          6.png
0 I( Z2 D6 f% W1 W" {( ?8 z5 p         到这里完成了一半。因为此时打开写属性,调试信息里并没有输出任何内容,需要手动添加代码。查找工程,可以看到新增加的BLE App代码文件
" L9 K( I+ Y; E# I( G         7.png
7 J% |! ^6 f4 u7 j# M         打开ld2.c文件查找相关内容,函数不多,可以很快定位到该服务的事件处理函数如下3 p% r# C' N* d" u1 C/ C# e6 \
          2.png 1 S/ w: D" |( \5 t. h' v
        从以上代码能够看出收到服务端的写特征数据时会再调用LD2_Notification(¬ification);函数,同时传入notification结构体,我们要提取的数据也在这个结构体里面。所有找到LD2_Notification函数,添加对playload值的提取和点灯代码。   4 h2 E/ b- ?& V, _
       $ d+ o# |+ l( X$ L9 l" @+ u8 X
  1. void LD2_Notification(LD2_NotificationEvt_t *p_Notification)
    1 o- w9 e, Y+ }! K- ?0 u
  2. {: ~  \) h) i7 l4 P
  3.   /* USER CODE BEGIN Service1_Notification_1 */! U7 a- a: B9 N7 i
  4.         uint8_t value;/ v, S/ m/ e6 t, M
  5.   /* USER CODE END Service1_Notification_1 */
    9 \- D* ]; K: P+ {1 q
  6.   switch(p_Notification->EvtOpcode)
    - H1 I0 s3 v" N( K
  7.   {
    ( Y4 M0 K7 Q3 o- `7 v
  8.     /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */
    # l6 P+ E  f1 Y3 G
  9. ( }; I& y5 e7 [+ q: S8 t
  10.     /* USER CODE END Service1_Notification_Service1_EvtOpcode */
    ( f6 v  A# }* A7 W. e8 c! o7 u- }
  11. 1 R$ n# Q* G( I' S: `2 w! P
  12.     case LD2_ON_WRITE_EVT:4 l+ X& h0 U, Z2 h) f0 m
  13.       /* USER CODE BEGIN Service1Char1_WRITE_EVT */
    % `# e% o3 G1 v2 `
  14.             value = p_Notification->DataTransfered.p_Payload[0];
    0 c6 f! q4 c# y' N" P' E0 M  i7 ?
  15.             APP_DBG_MSG(" recv msg %c\n",value);
    , m0 G0 x2 Y7 ?0 i$ y, z
  16.             if(value == '0')
    ( F& n8 ^1 a$ \- [3 G) @0 S! A
  17.             {! w  Q2 ~* G3 a: g
  18.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_SET);6 T, L1 i6 v% O7 {1 }( |6 U/ f
  19.             }else if(value == '1'){
    4 @* H9 a* ^) v* @
  20.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_RESET);6 |( v, g2 z% b9 k4 C
  21.             }
    ' M% [2 _# ?- e6 ?3 L0 e- t
  22.       /* USER CODE END Service1Char1_WRITE_EVT */
    # d( E* ]! V, N- k* ]  i0 P3 y
  23.       break;; w4 p# M5 i/ L: l6 Y& s

  24. % v7 F- y7 \" ~/ p: A1 h  O4 i; T
  25.     default:
    & p" }; J' J9 Y, L3 x' J5 G+ U. z! g
  26.       /* USER CODE BEGIN Service1_Notification_default */* Y2 X: S, D. x
  27. 7 y8 _3 U6 @" m- c* E
  28.       /* USER CODE END Service1_Notification_default */
    ! [* S) \, ~4 ^
  29.       break;
    ! @& T/ L; i* I* p, J
  30.   }
    ' p' i0 G" M! L! a9 ]
  31.   /* USER CODE BEGIN Service1_Notification_2 */
    0 \" A4 ~8 T) y; W7 l

  32. ; i5 L8 }+ x1 c) D( i/ c" M
  33.   /* USER CODE END Service1_Notification_2 */: z' X# w: k$ }- U
  34.   return;2 h3 i4 R3 D  o/ `  b( W7 g
  35. }
复制代码
       对于数据的处理,在客户端是支持输入ASCII和HEX格式,所以服务端也就是开发板的代码中要和输入对应。这里使用ASCII来传值。0 b4 {" Q3 y( M
        在串口调试助手中也打印出来收到的写特征值。如下
+ u8 X4 h2 @5 u' K         4.png
& H! q3 D3 G$ Z0 Y( f$ J" D+ w* @        不过倒是有个问题,Service name在手机客户端都显示unknow,一时没找到原因。
" _8 Q6 g+ |6 u& Z0 h. i1 a2 u& D, {% o

8 Z9 w4 F6 z3 n( B
收藏 评论2 发布时间:2024-11-3 15:25

举报

2个回答
STMCU-管管 回答时间:2024-11-4 14:42:54
Service name会不会是UUID格式问题) x+ k1 t9 {: Q' U& k% Z
BinWin 回答时间:2024-11-4 21:03:53
STMCU-管管 发表于 2024-11-4 14:422 r) e5 n+ U( X3 W) `8 k) x3 l
Service name会不会是UUID格式问题

2 B4 g' X% s# lSolved: Re: Naming BLE service on STM32WB - STMicroelectronics Community1 o, R* x, I% p  s; P
# |' T2 g5 J4 j3 Q3 l8 g

所属标签

相似技术帖

官网相关资源

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