我正在为Pycom的Lopy4板编写代码,并创建了一个用于环境传感的BLE服务,该服务目前只有一个特征,即温度。我将温度作为浮点数,并尝试每两秒更新一次特征值。
当我使用BLE scanner应用程序时,每当我尝试读取时,我都会读取一个值"temperature10862“,这是特征的名称和uuid。然而,当我按下indicate按钮时,该值显示正确的温度字符串,每两秒自动更新一次。
总体而言,我有点困惑。这是Pycom设备上我的代码的问题,还是我只是误解了BLE读取应该是什么?既然设备上的温度值显然正在更新,但是为什么客户端和应用程序只显示这些值,而不是读取?
对于问题中的任何含糊之处,我深表歉意,但任何帮助或指导都将不胜感激。
发布于 2020-06-12 08:03:16
将"temperature10862“作为读取响应返回显然是不正确的。在这种情况下,将温度作为字符串发送也是不正确的,因为您使用的是蓝牙SIG定义的特征https://www.bluetooth.com/xml-viewer/?src=https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Characteristics/org.bluetooth.characteristic.temperature.xml。因此,该值应由以0.01摄氏度为单位的带符号16位整数组成。
如果你查看https://www.bluetooth.com/xml-viewer/?src=https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Services/org.bluetooth.service.environmental_sensing.xml,你会发现支持Read是强制性的,支持通知是可选的。然而,指示是不允许的。因此您应该将indicate属性更改为notify。
无论值是作为通知还是作为读取响应发送,发送的值都应该是相同的。
请务必阅读环境感知规范,并遵循GATT服务结构的其余部分。
https://stackoverflow.com/questions/62332241
复制相似问题