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

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

[复制链接]
BinWin 发布时间:2024-11-3 15:25
       上次创建完工程,留了个点灯的尾巴,这次给完成。
0 b" _; m3 h! `8 Z4 K5 _2 x( h  l
* K1 w& L' e& K9 S) \! Z/ N        在IOC工程界面添加服务一个服务,会增加一个服务配置的窗口2 |6 m  O; o9 E) e
         5.png / b' B/ y3 U/ w' e' h, Q6 W4 _
        打开SERVER1的配置界面,修改UUID便于手机端辨识,还有Service name。再添加一个特征,也同样修改下UUID和名称,打算控制LED,1个字节的Value就可以。9 k0 ]# h- U( ~, U5 u
       1.png
/ Z( |# `: j# u1 t        完成以上就可以更新代码了。烧录后在手机APP中搜索到XX-STTM32并连接后查看是否有刚才配置的服务和特征
# T9 q' C# F/ q- t* ?9 n3 c- ]/ D8 w5 K          6.png
6 L5 d; s, a3 i4 R& X         到这里完成了一半。因为此时打开写属性,调试信息里并没有输出任何内容,需要手动添加代码。查找工程,可以看到新增加的BLE App代码文件; b5 z, L8 r, O7 j3 T- V; b
         7.png
+ M. Z+ L, c- {6 N# Q; T2 ^5 i) x         打开ld2.c文件查找相关内容,函数不多,可以很快定位到该服务的事件处理函数如下
3 }, S$ U/ x$ _+ l1 n" R          2.png & c! ]! Y7 o2 _; ~  t  E& b
        从以上代码能够看出收到服务端的写特征数据时会再调用LD2_Notification(¬ification);函数,同时传入notification结构体,我们要提取的数据也在这个结构体里面。所有找到LD2_Notification函数,添加对playload值的提取和点灯代码。   
6 F% P8 @0 x+ u8 `& l* ~      
3 I8 ^3 P7 I: |& L# m
  1. void LD2_Notification(LD2_NotificationEvt_t *p_Notification)
    ( V4 E+ U6 d- s4 Z
  2. {. {9 _  g! f; ]  [2 {
  3.   /* USER CODE BEGIN Service1_Notification_1 */0 \8 }) {+ \2 \( t: P6 Y8 @- {" a
  4.         uint8_t value;
    / l) _" ?7 b4 W' J0 Q
  5.   /* USER CODE END Service1_Notification_1 */
    / o; u* b- u; f) @' |2 j
  6.   switch(p_Notification->EvtOpcode)
    8 G5 w2 v, d; C1 a, j
  7.   {
    6 p/ N+ M+ D- g( E8 Q
  8.     /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */% z+ S: y7 B5 }$ y( `
  9. & _. y5 m8 Z4 ~$ f( W- F2 f+ y
  10.     /* USER CODE END Service1_Notification_Service1_EvtOpcode */
    1 q! ]+ v1 F- A( f

  11. 1 h) b) ]* q) w( ~8 X) k2 b
  12.     case LD2_ON_WRITE_EVT:- V/ `8 @- r, \% K# k$ z1 M6 A
  13.       /* USER CODE BEGIN Service1Char1_WRITE_EVT */, K) Z* D. A. j0 t0 r$ A
  14.             value = p_Notification->DataTransfered.p_Payload[0];" Z0 T5 O, ]6 ]6 ~4 M
  15.             APP_DBG_MSG(" recv msg %c\n",value);8 Z; N6 [  U( r
  16.             if(value == '0')
    . R0 G0 z2 n/ P; [- y6 `& O- ?0 v$ m" _
  17.             {
    " g! f# l6 k( @1 {1 [% X5 s$ e5 l
  18.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_SET);  W- g, V; k: x1 Z) M. e* ~
  19.             }else if(value == '1'){2 z& o# A! G8 A3 O9 @  H
  20.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_RESET);
    * U7 w: ?" k+ h! H3 s
  21.             }( T' ]; ^' ~1 S0 c, A+ h
  22.       /* USER CODE END Service1Char1_WRITE_EVT */
    ( O8 W+ l% N% f
  23.       break;9 j1 h! @/ i; B. u

  24. & N4 w" n3 m" [2 A' Y
  25.     default:
    # l% ^9 q8 ~) c( u6 i
  26.       /* USER CODE BEGIN Service1_Notification_default */( Q2 k: E$ Z* l

  27. ( k' k/ p. h- F" I  b
  28.       /* USER CODE END Service1_Notification_default */
    . O% y4 ^- Z& J- L- Z3 S+ j
  29.       break;7 c5 j! [% l1 ?9 a# X
  30.   }% S5 x* {! H- X* @$ q. J* _
  31.   /* USER CODE BEGIN Service1_Notification_2 */
    - ~2 s7 O1 g& S3 |
  32. 6 N3 E: [9 s6 \
  33.   /* USER CODE END Service1_Notification_2 */
    & M: c) T% z2 R
  34.   return;
    0 D! N' B+ b/ W! d
  35. }
复制代码
       对于数据的处理,在客户端是支持输入ASCII和HEX格式,所以服务端也就是开发板的代码中要和输入对应。这里使用ASCII来传值。; g6 X3 Q) R- n8 J4 ~( N' M
        在串口调试助手中也打印出来收到的写特征值。如下
, X+ ~# W1 W6 M5 q8 ~         4.png
4 F( c1 r+ s8 J5 |% U9 U5 `7 W. J        不过倒是有个问题,Service name在手机客户端都显示unknow,一时没找到原因。
$ F) p% e0 _8 l- T1 }7 }) U2 _' W" U5 L: a* R: O# [" b
- O+ Q1 ]7 X0 L% F( F
赞 收藏 评论2 发布时间:2024-11-3 15:25

举报

2个回答
STMCU-管管 回答时间:2024-11-4 14:42:54
Service name会不会是UUID格式问题
1 F- a) x& G: @) f" j8 T
BinWin 回答时间:2024-11-4 21:03:53
STMCU-管管 发表于 2024-11-4 14:42
# t2 v3 e  Z% X! I' p4 A7 D3 i4 xService name会不会是UUID格式问题

9 T( ^$ A' R% q& wSolved: Re: Naming BLE service on STM32WB - STMicroelectronics Community
" `: \  P) s8 n+ V& I3 w
# I3 E8 v! Y* I

所属标签

相似技术帖

官网相关资源

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