-
- alberthink
-
38 发帖1 回复462 积分
- 私信他 + 关注
与上一篇发文相隔已经将近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带来的不同的体验。敬请期待吧!


块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖