[原创] Web Bluetooth玩转蓝牙开发板 - ST Nucleo系列(2)
799 查看
5 回复
 楼主 | 发布于 2019-09-24 | 只看楼主
分享到:

与上一篇发文相隔已经将近3周时间了,这期间发生了很多有趣的事情,包括水果公司发布了iPhone11并将UWB技术引入其中增强其airdrop的定位能力,还有英国首相波利斯决定关停议会--就在今天这个决定被英国最高法院认定为不合法,脱欧进程再起狂澜。本人也在这期间发布了一款web蓝牙开发工具SiCom Web Bluetooth,有兴趣的朋友可以访问https://SiComBlue.herokuapp.com获得更多信息。而下面的系列文章中,我们可能会多次用到这个工具来调试开发板 

 


上回提到,要采用web技术连接蓝牙设备,最重要的是对于设备profile的了解。那么,ST Nucleo系列开发板的通用蓝牙profile是什么呢?(有朋友会说除开SIG规范的哪有什么通用的,都是客户定制的好吗!嗯,你说得没错,但是ST为其开发板提供的软件包里包含的profile尽管是ST定制的,但鉴于其广泛的被初始开发者采用,也可以是一定范围的通用了吧)。了解Nucelo ST官方软件资源的人一定不陌生,与蓝牙相关的profile称为BlueST。这个BlueST可是大有内容的,我们先看一下 


BlueST是蓝牙低功耗以及传感器技术软件开发套件(SDK),具有多平台库(Android/iOS/Python)使得用户方便通过低功耗蓝牙访数据,很方便的扩展支持新的数据格式,在各平台上都具有通用编程模板,提供应用示例以方便快速启动开发,支持数据报文,包含经有蓝牙的串口访问(stdout/stdin/stderr),包含开发板配置服务,BSD授权协议,在相关的应用商店里可以下载到的ST BLUEMS(注:现在已经改名为ST BLUEST了)和ST SensNet应用都采用了BlueST协议 

这一系列的描述就是告诉你,采用ST开发板的胖友你们不用担心,ST的软件BlueST能很好的为你连接设备服务:不管iOS,Android,还是Python,你都有标准的参考代码和开发模板可以采用,数据可以离线分析,在线也可以串口调试,总之开发者想要的BlueST开发套件都提供了! 

 

嗯,广告就不多说了,那么这个BlueST的BLE协议部分究竟是怎样定义各种经由蓝牙传输的数据格式的呢 

 

先看下表 

表中列出了32种不同的特性(Feature),从传感器到马达控制,从音频到模拟接口控制,可以看出,这些已经启用或者是将要启用的数据特性,大家基本上都能找到对应的Nucleo子板。当然最多的还是传感器家族的。那么这些特性是怎样和Characteristics UUID对应的呢 


Char必须是采用一个xxxxxxxx-0001-11e1-ac36-0002a5d5c51b形式的UUID来控制的。这里很明显0001-11e1-ac36-0002a5d5c51b就是BlueST profile的特的base UUID。同时特性的基本数据格式这里也有说明,通常是以2字节的时间戳外加有效数据来打包的。 

以加速度计特性为例,默认uuid为0x00800000-base UUID,三轴数据为16位整型,在时间戳之后的第2至第7字节。 


陀螺仪特性,默认uuid为0x0040000-base UUID,三轴数据为16位整型,在时间戳后的第2至第7字节。 

接近传感器特性,默认uuid为0x02000000-base UUID。距离数据为16位无符号整型,在时间戳后的第2第3字节。 


ST的使用手册中还有更多详情,这里就不一一列出了。有兴趣的小伙伴可以在下载链接点击下载,或者在ST官方网站搜索BlueSTSDK下载。 

 

说了这么多BlueST profile的内容,那么在web Bluetooth工具中如何来使用呢?从之前的系列文章,大家已经有所了解,web Bluetooth是建立在Chrome浏览器对于蓝牙资源的访问基础上的。那三板斧是怎样说的?扫描,建立连接,发现特性和服务!扫描就是要在2.4G频段上(37,38,39)搜索可以被连接的目标。这里,需要通过广播名称/名称前缀,和蓝牙服务列表来作筛选。那么我们如何将这些在Nucleo板上已经配置好的profile信息交给web bluetooth的工具的呢 

 

你如果选择使用SiComBlue.herokuapp.com网站提供的upload profile选项为例,你首先要建立一份系统能认可的profile文件。该文件以.Json结尾,包含一组类似于{{“xxx”:value},{“yyy”:value},}。我们不妨取名为test.Json,然后来尝试创建web Bluetooth工具的profile文件 

 

如果你的Nucleo套件是下载的FP-FLIGHT1功能包,很可能广播名称是以“FL”为前缀的,如果是FP-ALLMEMs功能包则可能是“AM”为前缀的。所以在web工具的nameprefix变量应当相应的是“FL” 或者“AM”。所以test.Json的第一部分内容就是  

{ 

    "namePrefix": [ 

        "AM", 

        "FL" 

    ], 

.....上面可以看到,在{里,的“namePrefix”是索引名,而冒号后面的部分就是该索引所对应的内容,这里的内容包含一个以方括号括起来的数组,我们定义了可能的广播名称的前缀,“AM”或者“FL”。 

定义好前缀以后,就是将你Nucleo板子上感兴趣的服务/特性信息对应的uuid提供给test.Json。比方说下面的感兴趣的服务的数组对象(注意,即便只有一个感兴趣的服务,也请用方括号将该对象框起来,这样web Bluetooth的工具才能顺利解析出来): 

    "Service": [ 

        { 

            "name""FeatureSensor", 

            "UUID""00000000-0001-11e1-9ab4-0002a5d5c51b", 

            "Requirment""Mandatory" 

        } 

    ], 

而相关的感兴趣的服务呢,我们选择了9轴数据和接近传感器 

"Char": [ 

        { 

            "name""Motion", 

            "UUID""00e00000-0001-11e1-ac36-0002a5d5c51b", 

            "Property""Notify", 

            "offset"2, 

            "length"18, 

            "wtimestamp"true, 

            "datatype""Int16", 

            "littleEndian"true 

        }, 

        { 

            "name""Proximity", 

            "UUID""02000000-0001-11e1-ac36-0002a5d5c51b", 

            "Property""Notify", 

            "offset"2, 

            "length"2, 

            "wtimestamp"true, 

            "datatype""Uint16", 

            "littleEndian"true 

        } 

    ] 

} 

下图是test.Json文件的全貌。我在本文的末尾也将此文件附上,供你参考 


在将test.json保存在你的电脑上后,打开你的chrome浏览器,输入网址:https://SiComBlue.herokuapp.com,你就可以开始用web Bluetooth工具调试你的Nucleo板了。(下面是以Nucleo sensor+BLE+proximity子板为例做的演示截图,供你参考 

在点击upload your own profile栏目下choose File按钮后,到你保存test.json的路径下选择test.json,然后你就会看到下面的界面 -- step.3 Customize your choice and run!栏目下应当已经显示出依据test.json解析出来的服务和特性,如果你们有看到这些,说明上传的文件未能成功被SiCom解析出来,请重新编辑确保格式正确后再进行下一步。 


在profile正确解析完成后,你就可以点击step2下方的按钮来启动扫描、连接、发现服务/特性三板斧了 

点击你想连接的目标板后就会看到下面的界面。注意,在connection status表格中,会呈现出器件已经连接,器件全名,发现服务已完成的状态。如果没有顺利完成,这些状态将继续显示false 

然后你就可以点选相关的特性勾选你想启动的服务:N代表notification,R代表read,W代表write。如果你点错了也没关系,系统会自动提示该特性不支持所选的服务类型,然后会将该选项禁用以防你继续错选。选好后,你可以点击step3下方的大按钮启动全部已选择的服务,或者可以在每一个特性中间的Act!按钮点击启动对应的服务。如果ble设备有响应数据操作(N/R)或者写操作执行(W),那么特性后部的黑色区域会变红,数据会在特性UUID后面更新出现。同时,如果是notification服务的话,在启动全部已选服务的大按钮下方也会同步显示收到的通知数据。另外,connection status状态拦也会做相应的状态更新 


上图显示的TS=46292时间点接近传感器读数为33452(转化为厘米(33452-32767)/10就是68.5cm)。而TS=46317时间点9轴运动传感器的读书为ACC(0,10,1008)Gyro(15,-19,-62)Compass(557,-57,-318)。怎样,你的板子的数据正常么 

 

在调试完成后,你可以点击断开按钮,系统将提示是否需要保存调试时获取的通知数据 


确认保存后,系统的download目录下会生成一个随机UUID-test-mywebblue-data.json的文件,就像下图这样。 

每一个特性的UUID和相关时间点的原始数据以及解析后的数据都会依次保存下来,以便你日后校验和后续处理 

 

怎样,你是否已经意识到web Bluetooth工具给你的Nucleo套件带来的新的玩法?如果有任何疑问,可以在这边留言,我希望可以给你解答 

 

下一次我们将更进一步,看看web Bluetooth带来的不同的体验。敬请期待吧 


本帖有更多资源,需 登录 才可以下载,没有帐号?立即 注册

(0 ) (0 )
回复 举报

回复于 2019-09-25 沙发

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

回复于 2019-09-29 2#

厉害了,这个网站是怎么搭建出来的,想搭个本地的玩玩
(0 )
评论 (0) 举报

回复于 2019-09-29 3#

楼主,从GitHub上下载了文件后,要怎么使用了,我用Chrome打开无法成长工作了。
(0 )
评论 (1) 举报

回复于 2019-09-29 4#

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

回复于 2019-10-20 5#

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





    举报

    请选择举报类别

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

    全部板块

    返回顶部