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

【STM32WB55评测】评测五 电表蓝牙配置(小项目)

[复制链接]
MingXJ 发布时间:2023-7-23 18:10
评测五 电表蓝牙配置(小项目)
      之前申请评测就讲过电力物联网的事,现在电表配的蓝牙功能要符合国网电科院的规定,具体为MAC地址、profile、类型等等诸多要求,效果如下:
" g8 S* o2 s" E
7 E# l7 p7 Q5 J% j, K: |  |
一、设备名  r& h7 x) `7 L" f5 G2 f, F4 ?/ `
      设备名这个没要求,可选,规GAP管,在app_ble.c的广播函数Adv_Request把a_LocalName=“Meter”,同时连接后GAP名字也要改,具体Ble_Hci_Gap_Gatt_Init的aci_gap_init的name=“Meter”,同时实际长度APPBLE_GAP_DEVICE_NAME_LENGTH=5,' E6 \9 l  v4 k1 a
微信图片_20230723163217.jpg
图1 电表广播
二、MAC地址
8 P. c5 q8 H! h, H: g       MAC有要求,类型为静态随机地址,在app_conf.h修改CFG_IDENTITY_ADDRESS、CFG_BLE_ADDRESS_TYPE均为GAP_STATIC_RANDOM_ADDR,同时要把表地址设进MAC地址,把随机数a_srd_bd_addr设成表地址如上图。3 C9 _1 G( I* m/ w9 v/ U
MAC.png
图2 MAC要求
8 b$ P1 Y7 w: K0 w9 u4 P' t
三、service# n* }  E- ^. X2 C! u& u
      很明显,新建profile是最直接的路子,通过aci_gatt_add_service、aci_gatt_add_char、aci_gatt_add_char_desc接口来添加服务、特征、描述符等,详见《AN5289 - Building a Wireless application》6.1 Initialization phase章节描述,比如p2pserver源码在p2p_stm.c里P2PS_STM_Init强函数中。电表蓝牙profile如下:
6 H/ T  W5 M+ Y- b, R
通信UUID.png
图3 电表通信profile配置
但在短时间内不熟悉情况下很难完成,于是改造原来已存的服务为电表抄表服务,于是在p2p_stm.c的事件回调里PeerToPeer_Event_Handler往UUID=7941dc24-0ee5-a9e0-93f3-a3b50200406e写入DL/T645请求报文,回复报文在UUID=7941dc24-0ee5-a9e0-93f3-a3b50300406e以通知方式发送:
5 F8 W. Q& G. ]# h- A6 J9 x' |- \: [
  1. //645报文:起始符68+地址域(6B)+起始符+控制域+数据长度+数据域+CS(1B)+结束符16
    0 W  ?5 x( K# S2 h/ }& E
  2.               uint8_t dlt645FrameReq[50];
    $ c; ?/ s6 q* S9 ]
  3.               uint8_t dlt645FrameRsp[50];7 I) W% n' N. Z* O# l8 [+ Q
  4.               uint8_t i=0;
      e% k; f  i/ E+ V. W
  5.               uint16_t len=Notification.DataTransfered.Length;2 _2 A+ Q, U0 p+ V) R
  6.               memcpy(dlt645FrameReq,Notification.DataTransfered.pPayload,len);
    " ]: S5 n: O! x$ n/ s" q2 r% w
  7.               if(dlt645FrameReq[0]!=0x68||sum(dlt645FrameReq,len-2)!=dlt645FrameReq[len-2]||dlt645FrameReq[len-1]!=0x16)
    & ?; {8 d3 K% C  m
  8.                   return 0;3 H1 F* Z* a* q) P) {
  9.               switch(dlt645FrameReq[8]): y- `. ]/ W/ x/ ~
  10.               {# z, M, F( [0 N$ ]5 \
  11.               case CMD_READ_ADDR:
    & p& o9 t; ~9 n  j
  12.                   //P2PS_STM_App_Notification(&Notification);5 i# h2 d9 E2 [
  13.                   dlt645FrameRsp[0]=0x68;
    % \$ g- L0 F: w# T: y3 b
  14.                   memcpy(dlt645FrameRsp+1,meterAddr,6);
    / q$ X, J) v: L! O% l3 P
  15.                   dlt645FrameRsp[7]=0x68;! c+ K* }' x. J
  16.                   dlt645FrameRsp[8]=CMD_READ_ADDR|0x80;
    : L# H* l- D1 S7 R7 j9 ?1 ^
  17.                   dlt645FrameRsp[9]=0x06;6 ^9 z7 o, H% ?: [$ m; F7 T4 Q( S
  18.                   for(i=0;i<6;i++)$ a+ l/ k' w7 M! k
  19.                       dlt645FrameRsp[10+i]=meterAddr[i]+0x33;% D% u( ]) b5 u/ R) H0 d% X; \0 A
  20.                   dlt645FrameRsp[16]=sum(dlt645FrameRsp,15);1 \" n2 G, ]; \: k% w: F
  21.                   dlt645FrameRsp[17]=0x16;9 e. B) Y1 G1 }& i& }) b
  22.                   tBleStatus result = BLE_STATUS_INVALID_PARAMS;" N* [' U+ \* H; f
  23.                   result = aci_gatt_update_char_value(aPeerToPeerContext.PeerToPeerSvcHdle,
    4 H* y0 Q) C1 d7 E) m9 R" X
  24.                              aPeerToPeerContext.P2PNotifyServerToClientCharHdle,$ Y' H" _& k) a
  25.                               0, /* charValOffset */
      R7 L( U3 }4 Q+ }+ y1 T3 K
  26.                              18, /* charValueLen */- t( x9 Y* g" k9 F" B. h
  27.                              (uint8_t *)  dlt645FrameRsp);$ |2 v  j* ^0 R+ Q- \( b& Z
  28.                   //P2PS_STM_App_Update_Char(P2P_NOTIFY_CHAR_UUID, (uint8_t *)&P2P_Server_App_Context.ButtonControl);                     
    " q5 i# @. u+ |1 N# [# m5 I9 a5 k
  29.                   break;! v# I! b7 a& Z; i9 l
  30.               default:4 L# c- b$ `" b0 l
  31.                   break;' r; F9 E' {  v5 I7 O
  32.               }
复制代码
这里以抄读表地址为例,请求报文、回复报文依次为:
2 M4 C" L" z; @; @( w" N' a; u: [0 r' m主站请求:68 AA AA AA AA AA AA 68 13 00 DF 16- s9 O8 b+ W& ~( e- C- ^
电表回复:68 11 11 11 11 11 11 68 93 06 44 44 44 44 44 44 67 16
, O2 i$ T- y2 V成功读到表地址为11 11 11 11 11 11:
微信图片_20230723163156.jpg
图4 成功读到表地址
6 ^  i+ d) e) ?
: O" i8 [$ q; ?! E/ d5 [0 H/ W/ b

# X+ l- U* c/ n, w9 X' }5 C: \) X& a1 ~$ D  @) b6 ~
) S! r3 ]  D  F, ^1 p
  L+ h9 H9 _- m8 U$ x; J( T
赞 收藏 评论0 发布时间:2023-7-23 18:10

举报

0个回答

所属标签

相似技术帖

官网相关资源

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