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

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

[复制链接]
BinWin 发布时间:2024-11-3 15:25
       上次创建完工程,留了个点灯的尾巴,这次给完成。
1 ~9 ~0 C0 r9 v6 T0 [% V6 S4 x& l2 E  p! G0 r4 i
        在IOC工程界面添加服务一个服务,会增加一个服务配置的窗口
% d8 ?) d8 S- T         5.png
$ v: B+ ?- I7 U. a9 }: K  b; D        打开SERVER1的配置界面,修改UUID便于手机端辨识,还有Service name。再添加一个特征,也同样修改下UUID和名称,打算控制LED,1个字节的Value就可以。! c/ @; U( h. q
       1.png 8 C& k% D0 E/ N- V5 B/ q$ y, E
        完成以上就可以更新代码了。烧录后在手机APP中搜索到XX-STTM32并连接后查看是否有刚才配置的服务和特征
$ F# n$ q  W0 m  _" m( [6 ]          6.png + n+ Z, k4 a$ |6 I
         到这里完成了一半。因为此时打开写属性,调试信息里并没有输出任何内容,需要手动添加代码。查找工程,可以看到新增加的BLE App代码文件# g$ z8 o  Q* `
         7.png
: \# F8 O9 z  j& J" h) M         打开ld2.c文件查找相关内容,函数不多,可以很快定位到该服务的事件处理函数如下
9 \3 K6 H( G+ f$ P7 e          2.png
3 H& D% N- Y- P9 h# e        从以上代码能够看出收到服务端的写特征数据时会再调用LD2_Notification(¬ification);函数,同时传入notification结构体,我们要提取的数据也在这个结构体里面。所有找到LD2_Notification函数,添加对playload值的提取和点灯代码。   
9 c7 N! V: X/ t1 S" a) V       % A$ z/ B+ I; D9 ^' M" ~) F
  1. void LD2_Notification(LD2_NotificationEvt_t *p_Notification)$ S, }  A& O: f3 Z+ x
  2. {
    * F9 e( ~/ V/ `/ k1 @& t4 S
  3.   /* USER CODE BEGIN Service1_Notification_1 */' [; E# J, }& g( [, Q8 a
  4.         uint8_t value;
    ( x  L1 v+ k6 y4 h  n6 [( k( }
  5.   /* USER CODE END Service1_Notification_1 */
    ' W. E8 H  \( J/ V
  6.   switch(p_Notification->EvtOpcode)
    - H& D: y4 U+ ^; X5 p
  7.   {! P; i! A: y9 |
  8.     /* USER CODE BEGIN Service1_Notification_Service1_EvtOpcode */9 m8 h, G1 z6 U6 F8 Q% D; }. i

  9. - K1 y7 c4 B& J' \( I  H
  10.     /* USER CODE END Service1_Notification_Service1_EvtOpcode */
    0 k  _2 n8 t2 _$ S& u7 I
  11. : {' n: ]) j, `) ?0 ^9 R/ {8 h; }
  12.     case LD2_ON_WRITE_EVT:
    7 P. _5 u; }. }, j
  13.       /* USER CODE BEGIN Service1Char1_WRITE_EVT */
    ; @; b+ U+ \( W( ^( i( F0 f1 ~
  14.             value = p_Notification->DataTransfered.p_Payload[0];" A0 r/ c* R8 T/ q
  15.             APP_DBG_MSG(" recv msg %c\n",value);
    8 M7 U9 ]) I5 {% h3 M* w: s
  16.             if(value == '0')( A' I1 P9 b; `5 v5 L" V
  17.             {
    0 l8 q! H2 M4 d9 D* l3 K
  18.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_SET);- e6 z. h, v5 t' E* b% q1 c
  19.             }else if(value == '1'){
    4 Q, c6 ~2 c4 D" f" t
  20.                     HAL_GPIO_WritePin(LD2_GPIO_Port,LD2_Pin,GPIO_PIN_RESET);  X. i" b  q* e8 x( B0 R1 K! f0 l( ^
  21.             }& C0 |: l( D' E+ k; h' v
  22.       /* USER CODE END Service1Char1_WRITE_EVT */0 i. F  N5 \' e2 j% l
  23.       break;
    % u3 f3 |( m& M6 m, f8 S9 I" V/ ]( N

  24. 7 c# q7 Z: u- b# x! T' l
  25.     default:
    / W! [! j/ ]" j/ w' o
  26.       /* USER CODE BEGIN Service1_Notification_default */4 ~, D3 d) f0 T4 m9 ?+ f: y

  27. 2 P* s- g9 }6 i4 z" s
  28.       /* USER CODE END Service1_Notification_default */
    - V  d. ~( k7 ]* ^4 k( h
  29.       break;& a/ \7 Z8 n: E/ j1 Y4 @+ g8 k
  30.   }" `8 V; r- [8 O- B
  31.   /* USER CODE BEGIN Service1_Notification_2 */% w6 T8 f8 p7 w: q: z1 W; Q

  32. ' L( \: ?" x. J( y
  33.   /* USER CODE END Service1_Notification_2 */' Z% u" K9 V9 w& h
  34.   return;
    - w2 W. U3 P% v9 Y1 u& G
  35. }
复制代码
       对于数据的处理,在客户端是支持输入ASCII和HEX格式,所以服务端也就是开发板的代码中要和输入对应。这里使用ASCII来传值。
% R6 K5 y8 O5 O. c; V6 f        在串口调试助手中也打印出来收到的写特征值。如下
# b* G" d$ n( z, K' e         4.png : P0 P1 b4 i, N  v2 r) o, `
        不过倒是有个问题,Service name在手机客户端都显示unknow,一时没找到原因。( ^2 k# y, e* ?7 w  z
; ]* B% f. ^) r0 \2 @
5 s) |# n- c2 ?  a$ ]' L
收藏 评论2 发布时间:2024-11-3 15:25

举报

2个回答
STMCU-管管 回答时间:2024-11-4 14:42:54
Service name会不会是UUID格式问题
  @+ V, q. G' F" r1 N2 {" g
BinWin 回答时间:2024-11-4 21:03:53
STMCU-管管 发表于 2024-11-4 14:42
4 H5 _" v1 h5 W4 T, |" |Service name会不会是UUID格式问题
& C; p" A3 M: B, E
Solved: Re: Naming BLE service on STM32WB - STMicroelectronics Community
  B, S/ M3 q+ m
5 T( R( v" Q! i; q! h1 ]

所属标签

相似分享

官网相关资源

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