bluetooth - BLE 阐明读取和指示操作
问题描述
我正在为 Pycom 的 Lopy4 板编写代码,并创建了一个用于环境传感的 BLE 服务,该服务目前具有一个特性,即温度。我将温度作为浮点数并尝试每两秒更新一次特征值。
当我使用 BLE 扫描仪应用程序时,每当我尝试读取时,我都会读取一个值“temperature10862”,这是特征的名称和 uuid。然而,当我按下指示按钮时,值会显示正确的温度字符串,每两秒自动更新一次。
我总体上有点困惑。这是我在 Pycom 设备上的代码的问题,还是我只是误解了 BLE 读取应该是什么?既然温度值显然是在设备上更新的,但为什么客户端,应用程序,只显示这些值的指示而不是读取?
对于问题中的任何含糊之处,我深表歉意,但我们将不胜感激任何帮助或指导。
解决方案
返回“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 服务结构的其余部分。
推荐阅读
- graphql - 如何将 GraphQL 文件转换为 Postman 集合?
- javascript - 反正有没有使用 JavaScript 查询 SQLAlchemy
- c# - 从 C# 中的 StrokeCollection 渲染图像
- javascript - 如何在firebase的最后一个列表中写入一个数组?
- datetime - 雪花将字符串转换为时间戳
- javascript - MVC 5在用户ID文本框更改时自动填充电子邮件文本框
- javascript - beforeRouteLeave 与创建奇怪的交互
- java - java.io.IOException:只读文件系统,在android虚拟设备上测试时
- algorithm - 给定有限的移动集,最小成本路径(遍历网格),以及不同位置的移动成本可能不同?
- javascript - 甜蜜警报无法在 iOS 上运行 [PHP]