首页 > 解决方案 > BLE 阐明读取和指示操作

问题描述

我正在为 Pycom 的 Lopy4 板编写代码,并创建了一个用于环境传感的 BLE 服务,该服务目前具有一个特性,即温度。我将温度作为浮点数并尝试每两秒更新一次特征值。

当我使用 BLE 扫描仪应用程序时,每当我尝试读取时,我都会读取一个值“temperature10862”,这是特征的名称和 uuid。然而,当我按下指示按钮时,值会显示正确的温度字符串,每两秒自动更新一次。

我总体上有点困惑。这是我在 Pycom 设备上的代码的问题,还是我只是误解了 BLE 读取应该是什么?既然温度值显然是在设备上更新的,但为什么客户端,应用程序,只显示这些值的指示而不是读取?

对于问题中的任何含糊之处,我深表歉意,但我们将不胜感激任何帮助或指导。

读取尝试 指示尝试

标签: bluetoothbluetooth-lowenergymicropythonbluetooth-gatt

解决方案


返回“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,您会看到支持读取是强制性的,支持通知是可选的。然而,指示是不允许的。所以你应该改变你的指示属性来通知。

无论值是作为通知发送还是作为读取响应发送,发送的值都应该相同。

请务必阅读环境传感规范并遵循 GATT 服务结构的其余部分。


推荐阅读