[原创] Web Bluetooth玩转蓝牙开发板--Nucleo系列(1)
925 查看
10 回复
 楼主 | 发布于 2019-09-04 | 只看楼主
分享到:

之前我们通过BBC Microbit上手实践了Web Bluetooth的基本应用,了解了蓝牙发现设备建立连接和发现服务属性的Web API的实现方式,其中有一个非常重要的promise的概念,它是Web Bluetooth得以顺利建立蓝牙连接和实现通信的软件基础。那么在初次尝试了web Bluetooth上的“名称读取”“LED控制”“加速度计数据获取”服务/属性后,你是否已经掌握了运用JavaScript来实现web蓝牙应用的窍门了呢 

 

今天,我们就要更进一步,在Microbit的硬件之外,Web蓝牙API是可以和其他硬件建立连接的,而且过程其实都差不多,发现设备、建立连接、发现服务属性是完全相同的,只是对于相关设备UUID、服务/属性UUID需要更新到新的硬件就好了,而一旦前面的三板斧跑通,接下来就是软件工程师最擅长的coding的部分,然后大家就可以在Web上愉快的使用Nucleo蓝牙开发套件所带来的服务了! 

 

今天的部分,我们先从了解Nucleo系列的蓝牙设置开始。你的IDB05是不是已经在手边了呢?嗯,那就开始吧。 

 

ST Nucleo套件是意法半导体公司在STM32系列成功推向市场后,在原有的STM32开发套件之外,运用Arduino Uno3接口打造的模块化的开发套件。STM32的主板与各种功能子板相互组合,带来丰富的变化,为开发者提供了打造原型的最佳硬件基础。在一系列的功能子板中,X-Nucleo-IDB04A1和X-Nucleo-IDB05A1是低功耗蓝牙子板。该子板上的BlueNRG系列芯片已经成为ST的低功耗蓝牙连接芯片系列的蓝牙硬件基础(嗯,即使是最新的BLUENRG2和STM32WB系列蓝牙SOC,都是基于BLUENRG系列的固件和蓝牙IP打造的)。所以如果你想要从Nucleo套件入手蓝牙应用,X-Nucleo-IDB05A1应该是不会错过的(IDB04由于是第一代蓝牙子板,尽管软件仍然会兼容设计,但大多数拥有Nucleo蓝牙开发套件的开发者应该用的都是IDB05了)。 

 

如之前系列文章所提到的,之所以不同设备可以建立连接,是由于彼此拥有相同的通信信道以及了解彼此在此物理信道上的通信规则。低功耗蓝牙设备的通信建立在2.4Ghz基础上,无论是Nordic还是ST的蓝牙开发板都已经在这个频道上做好了相应的物理设定,开发者要做的,就是在通信的GATT层面的profile的互通。上回我们通过采用Martin Wooley为microbit定制开发的蓝牙profile中的三个相关服务实现了web Bluetooth对microbit的访问,我这里简单回顾一下 


Microbit bluetooth profile 包含了三个部分,第一个是蓝牙profile的基础UUID。这是定制相关服务和属性的基础。128位UUID中的某些部分是固定不变的,其他的部分会随着服务和属性的不同选取不同的值。下面是截图 



可以看到,小马哥给microbit定下的蓝牙profile的BaseUUID是 E95D0000251D470AA062FA1922DFA9A8 

 

第二部分是,通用访问服务,UUID为0000180000001000800000805F9B34FB。问题出现了,为何这个UUID与Base UUID没有关联?熟悉蓝牙4.x规范的朋友肯定都知道,但难保没有人不会与我一样提出这种基础问题,所以我先卖个关子,等到本文的末尾再和大家揭晓答案,当然如果你有兴趣了解得更多,可以看看Nordic的教学视频,这里有链接,在视频的后半部分有关于蓝牙profile的逐行解释,相信爱学习的你会找到答案。言归正传,通用访问服务后面有通用属性服务、设备信息服务等三个服务,每一个服务下面有相关的特性,比如通用访问服务下有设备名、外观、周边设备倾向的连接参数特性,通用属性服务下的service changed服务变更特性以及设备信息服务下的设备型号、序列号、硬件版本等特性。下面是通用访问服务及其相关特性的截图拼接。可以看到大家的UUID都很像不是吗? 




有兴趣的朋友可以继续浏览兰卡斯特网页查看详细说明,包括特性的权限(是否可读、可写、可指示、可通知等等)以及对该服务和特性的附加说明。这构成了profile的第二部分,我们可以称作是标准profile的部分。 

 

第三部分,就是定制profile的部分了。这部分同样是有服务和相关特性的名称和UUID以及权限说明。我直接上图大家就懂了


上图截取了加速度计服务和它下面的加速度计数据特性、加速度计输出周期特性,磁力计服务,按键服务,IO引脚服务,LED服务等。大家都是在Base UUID的基础上生成的各自的UUID。当然,小马哥定制的profile中还从Nordic的官方搬移了UART/串口转蓝牙服务,这就不详细展开,页面上都有详细的信息说明和链接 

 

为什么一再和大家回顾蓝牙profile呢?因为所有的基于蓝牙的连接,最终都会通过程序来完成。为了让MCU或者Web服务器了解蓝牙的服务建立的方式,对profile的认识就必不可少。而让程序了解profile下服务和特性的途径就是一个个UUID,当我们在web脚本中为microbit或者Nucleo开发板或者其他任何目标蓝牙设备写代码的时候,最重要的是明白对端设备是谁(SCAN filter)和对端设备可以提供哪些服务(service UUID 和 Characteristic UUID)。上面我列出的各项服务和特性的UUID,在web脚本中以及嵌入式端的代码中都会有体现,这样两个从来不认识的设备才有可能对上眼,你说是么? 

 

好,那么问题来了,究竟Nucleo蓝牙开发套件的SCAN filter和蓝牙服务、特性UUID在哪里呢 

 

如果你是嵌入式端的开发者,你对于MCU的理解一定能迅速帮助你找到相关UUID的设定方法。你可能正在尝试将ST的FP-ALLMEMS软件包按照你的要求打开蓝牙服务,如果你期望通过我之前提供的页面(可以连接microbit的web)连接自己的设备,你可以在MCU代码中仿照microbit的蓝牙profile,将加速度计服务UUID和LED服务UUID写在自己的L053或者F401的蓝牙服务程序中,然后把广播名改为 “BBC xxxx”,试一下看看能不能发现并建立连接 


蓝牙广播名的修改通过config.h中的NAME_BLUEMS定义修改:

下一回我们会把BLUEST协议打开,看看如果我们要改写网页的参数以适应Nucelo蓝牙开发板官方的蓝牙profile的话,应当如何入手。 


最后在结束前,揭晓在profile第一部分我们提出的问题:为何通用访问服务、通用属性服务以及他们的特性对应的UUID和Base UUID无关联?原因在于,这些通用服务和特性由于它的通用性,已被蓝牙组织规定为统一的UUID,所以设计者在设计自己的蓝牙profile时,在通用服务部分,他是无需指定Base UUID相关的UUID的,相反,他应当选用蓝牙组织规范好的UUID (你也可以通过http://club.digiic.com/Forum/PostDetail/p-14513.html提供的视频链接深入学习低功耗蓝牙协议,特别是视频的后面10分钟,Nordic的FAE详细分解展开了profile的解析。)



(0 ) (0 )
回复 举报

回复于 2019-09-04 沙发

不错,感谢分享
(0 )
评论 (0) 举报

回复于 2019-09-07 2#

支持下,谢谢分享!
(0 )
评论 (0) 举报

回复于 2019-09-07 3#

谢谢分享
(0 )
评论 (0) 举报

回复于 2019-09-09 4#

感谢分享


(0 )
评论 (0) 举报

回复于 2019-09-17 5#

谢谢分享
(0 )
评论 (0) 举报

回复于 2019-09-17 6#

谢谢分享
(0 )
评论 (0) 举报

回复于 2019-09-18 7#

谢谢分享。。。。。
(0 )
评论 (0) 举报

回复于 2019-09-18 8#

谢谢分享。。。。。
(0 )
评论 (0) 举报

回复于 2019-09-19 9#

谢谢分享!!!!
(0 )
评论 (0) 举报

回复于 2019-09-25 10#

感谢分享!
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部