【雅特力AT32WB415评测】5. 蓝牙低功耗版本(BLE)官方Demo测评
<div class='showpostmsg'><p>接着上4篇评测报告:</p><p>(1)https://bbs.eeworld.com.cn/thread-1214040-1-1.html</p>
<p>(2)https://bbs.eeworld.com.cn/thread-1214570-1-1.html</p>
<p>(3)https://bbs.eeworld.com.cn/thread-1215784-1-1.html</p>
<p>(4)https://bbs.eeworld.com.cn/thread-1216799-1-1.html</p>
<p> </p>
<p>在测评前先熟悉了蓝牙的一些专业术语,如:GAP、GATT等。</p>
<h2> </h2>
<h2><a name="_Toc111503311"></a><a name="_Toc113526712">6 </a>蓝牙低功耗版本(BLE)</h2>
<p >蓝牙低功耗版本(BLE)已被广泛用作设备定位技术,以满足高精度室内定位服务的需求。BLE最初支持简单的存在和接近功能,目前,支持BlueTooth方向查找,并将支持高精度距离测量。</p>
<p clss="a" ><a name="_Toc111503312"></a><a name="_Toc113526713">6.1 </a>专业术语</p>
<p ><b>1 </b><b>通用访问配置文件(</b><b>Generic Access Profile</b><b>,</b><b>GAP</b><b>)</b></p>
<p >GAP是用来控制蓝牙的Connection和Advertising,设备对外界的可见性,确定设备之间是否可以进行通信,以及如何相互通信。</p>
<p >GAP定义了设备的各种角色,如中心设备(Central)和外围设备(Peripheral)。其中,Central是具有一定算力和存储资源的设备,如手机、智能平板等;Peripheral是小型、低功耗、资源受限设备。</p>
<p >通过GAP发送广播有两种方法:(1)Advertising Data payload;(2)Scan Response payload。两个有效载荷都可以包含31byte数据。蓝牙的广播与响应过程如图42所示,广播网络拓扑如图43所示。</p>
<p > 图42 广播与响应</p>
<p></p>
<p>图43 广播网络拓扑</p>
<p > </p>
<p ><b>2 GATT</b><b>(</b><b>Generic Attribute Profile</b><b>)</b></p>
<p >GATT是一个在蓝牙连接上收发很短数据段的通用协议。目前,低功耗蓝牙连接都是建立在GATT协议之上,它定义了两个低功耗蓝牙设备使用服务(Service)和特征(Characteristic)来进行数据通信。GATT使用ATT协议(Attribute Protocol),ATT协议把Service、Characteristic,以及对应的数据保存在一个查找表中,表中每一条数据采用16 bit ID作为索引。</p>
<p >一旦两个设备之间建立专用连接,GATT即可发挥作用,这意味着已经完成了由GAP管理的广播流程(说明:GATT连接,必须先经过GAP)。</p>
<p >GATT连接需要特别注意:GATT连接是独占(exclusive)的,这就是说一个BLE外围设备一次只能连接到一个中心设备,一旦外围设备被连接,它就会马上停止广播,这样它就对其他设备不可见了。当外围设备断开连接时,它又开始广播。</p>
<p >中心设备和外围设备需要进行双向通信,唯一的方式就是建立GATT连接,GATT连接的网络拓扑如图44所示。</p>
<p > 图44 GATT网络拓扑</p>
<p align="center" > </p>
<p > 从上图可以看出,一个外设只能连接一个中心设备,而一个中心设备可以连接多个外设,一旦建立连接,通信就是双向的。GAP通信是单向的,如果要实现两个外围设备的通信,则只能通过中心设备中转。</p>
<p > </p>
<p ><b>3 GATT Transactions</b><b>(</b><b>GATT</b><b>通信事务)</b></p>
<p >GATT通信双方是C/S关系,外围设备作为 GATT 服务端(Server),它维持了 ATT 的查找表以及 service 和 characteristic 的定义。中心设备是 GATT 客户端(Client),它向 Server 发起请求。<b>需要注意的是,所有的通信事件,都是由客户端(也叫主设备,</b><b>Master</b><b>)发起,并且接收服务端(也叫从设备,</b><b>Slave</b><b>)的响应。</b>GATT通信事务如图45所示。</p>
<p > 图45 GATT通信事务</p>
<p > </p>
<p >一旦连接建立,外围设备将会给中心设备建议一个连接间隔(Connection Interval),这样,中心设备就会在每个连接间隔尝试去重新连接,检查是否有新的数据。但是,这个连接间隔只是一个建议,中心设备可能并不会严格按照这个间隔来执行,例如中心设备正在忙于连接其他的外围设备,或者中心设备资源不可用。</p>
<p > </p>
<p > </p>
<p ><b>4 GATT</b><b>结构</b></p>
<p >GATT事务是建立在嵌套的Profiles、Services和Characteristics之上的,如图46所示。</p>
<p > 图46 GATT结构</p>
<p > </p>
<p ><b>(</b><b>1</b><b>)</b><b>profile</b></p>
<p >profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。蓝牙组织规定了一些标准的profile,例如 HID OVER GATT,防丢器,心率计等。每个profile包含多个service,每个service代表从机的一种能力。</p>
<p ><b>(</b><b>2</b><b>)</b><b>service</b></p>
<p >service可以理解为一个服务,在BLE从机中,通常有多个服务,如:电量信息服务、系统信息服务等,每个service包含一个或多个characteristic特征值。characteristic特征值才是BLE通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据。</p>
<p ><b>(</b><b>3</b><b>)</b><b>characteristic</b></p>
<p >BLE主从机的通信均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。</p>
<p > </p>
<p clss="a" ><a name="_Toc113526714">6.2 AT32WB415</a>评估板蓝牙通信</p>
<p >AT32WB415评估板由微控制器MCU和低功耗蓝牙(BLE)模块两颗芯片组成,两颗芯片之间通过UART通信。BLE芯片接收到远程APP请求后,通过AT指令从MCU获取信息或执行某些动作;或者,由MCU发送请求,通过UART发送AT指令,变更BLE端配置。无论是哪个方向发出请求,用户都可以按需扩增AT指令,实现各种控制方法。AT32WB415评估板蓝牙通信过程如图47所示。</p>
<p > 图47 AT32WB415评估板蓝牙通信过程</p>
<p > </p>
<p clss="a" ><a name="_Toc113526715">6.3 AT32WB415</a>评估板官方蓝牙代码评测</p>
<p >官方源码和入门指南:<a href="https://www.arterytek.com/cn/product/AT32WB415.jsp#Resource" style="color:blue; text-decoration:underline">https://www.arterytek.com/cn/product/AT32WB415.jsp#Resource</a></p>
<p > 根据官方应用笔记(BLE Application Note:AN0077),例程中已有GATT相关服务,如果要新增其他服务(自定义服务),需要6个文件。</p>
<p ><b>(</b><b>1</b><b>)</b><b>custom.c</b><b>、</b><b>custom_task.c</b><b>放置</b><b>…\sdk\ble_stack\com\profiles\custom\src</b><b>文件夹下;</b></p>
<p ><b>(</b><b>2</b><b>)</b><b>custom.h</b><b>、</b><b>custom_task.h</b><b>放置</b><b>…\sdk\ble_stack\com\profiles\custom\api</b><b>文件夹下;</b></p>
<p ><b>(</b><b>3</b><b>)</b><b>app_custom.c</b><b>、</b><b>app_custom.h</b><b>放置</b><b>…projects\ble_app_gatt\app</b><b>文件夹下。</b></p>
<p ><b>目前,还没有弄清为什么要放置在这些文件夹下面,先按照入门指南评测一下蓝牙,然后再深入研究,并移植到</b><b>AT32 IDE</b><b>下面。</b></p>
<p >用MDK打开官方提供的蓝牙Demo工程:</p>
<p >…\AN0077_AT32_BLE_Application_Note_V2.0.4\SourceCode\wb415_ble_demo_2.0.3\projects\ble_app_gatt下的MDK工程文件,<b>custom.c</b><b>、</b><b>custom_task.c</b>位于工程目录下,<b>app_custom.c</b>位于工程目录下 。</p>
<p > </p>
<p align="left" >编译后,在:</p>
<p align="left" >…\AN0077_AT32_BLE_Application_Note_V2.0.4\SourceCode\wb415_ble_demo_2.0.3\projects\ble_app_gatt\output\app目录下,可以看到编译后生成的*.bin文件。</p>
<p align="left" ></p>
<p align="left" >继续用MDK打开MCU Demo,位于:</p>
<p align="left" >…\AN0077_AT32_BLE_Application_Note_V2.0.4\SourceCode\wb415_mcu_demo_2.0.3\wb415_mcu_demo_2.0.3\project\at_start_wb415\at_side\mdk_v5下的MDK工程文件。</p>
<p align="left" >编译后,在:</p>
<p align="left" >…\AN0077_AT32_BLE_Application_Note_V2.0.4\SourceCode\wb415_mcu_demo_2.0.3\wb415_mcu_demo_2.0.3\project\at_start_wb415\at_side\mdk_v5\Objects目录下,可以看到编译后生成的*.hex文件。</p>
<p align="left" >打开ArteryICPProgrammer。(1)添加蓝牙*.bin文件时,需要添加起始地址:00000000,如图48所示。</p>
<p align="left" > 图48 添加起始地址</p>
<p align="left" > (2)添加MCU Demo *.hex文件,如图49所示。</p>
<p align="left" >图49 添加MCU Demo *.hex文件</p>
<p align="center" > </p>
<p >点击 ,完成固件下载。</p>
<p align="left" >打开手机端LightBlue APP(需要提前安装),可以看到AT32WB415评估板,蓝牙名称:WB415-GATT,点击,连接蓝牙,可以看到WB415-GATT蓝牙信息如图50所示。</p>
<p align="left" > 图50 WB415-GATT蓝牙信息</p>
<p align="left" > </p>
<p >可以看到有些信息有Readable(可读)、Writable(可写)、Supports notifications/indications(支持通知/指示),打钩表示支持,打叉表示不支持。数据显示格式 。对于可读写的信息 ,点击 、 按钮 ,进行读写操作。</p>
<p >AT32WB415评估板上的USER Key 用于切换AT Command模式和透传模式,LED3指示灯 用于指示当前模式(亮:透传模式;灭:AT command模式)。</p>
<p >官方文档提示:AT Command模式和透传模式冲突,透传模式下自定义服务将无法使用。</p>
<p >通过串口调试助手打印信息,也可以显示是否进入透传模式,如图51所示。</p>
<p > 图51 透传模式选择</p>
<p > </p>
<p >透传模式下 ,进入F002特征 ,输入任意字符串 ,点击 ,可以看到串口调试助手显示输入的信息 。</p>
<p >透传模式下,进入F001特征 ,点击 ,可以看到显示的信息为 。在串口工具中输入 ,点击发送,LightBlue APP端F001特征显示“WB415” 。</p>
<p > </p>
<p ><strong>下一步,将对官方提供的蓝牙Demo的源码进行剖析。</strong></p>
<p > </p>
<p ></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 定位的话,需要几个模块才能实现?精度可以达到多少? lugl4313820 发表于 2022-9-8 12:53
定位的话,需要几个模块才能实现?精度可以达到多少?
<p>定位还没有涉及。实现了,可以分享</p>
<p>这款蓝牙可以配置服务和特征值吗?</p>
<p>里边有作为主机的命令吗?我看介绍资料里面的几个AT指令基本都是配置从机透传的</p>
学习了,AT32还是性价比比较高的
页:
[1]