无法从蓝牙温度计连续获取温度值

Posted

技术标签:

【中文标题】无法从蓝牙温度计连续获取温度值【英文标题】:Couldn't get the temperature value continuously from a bluetooth thermometer 【发布时间】:2018-02-28 00:32:17 【问题描述】:

我正在开发一个从蓝牙温度计获取温度的安卓应用。我按照谷歌开发者页面上的说明进行操作。

https://developer.android.com/guide/topics/connectivity/bluetooth-le.html

我可以扫描设备并连接到温度计。我使用的是来自以下 github 的完全相同的代码。

https://github.com/googlesamples/android-BluetoothLeGatt/

而不是使用心率服务和相关特征。我正在使用温度服务和特性。我在从 github 下载的以下页面上更改了这些值

android-BluetoothLeGatt/Application/src/main/java/com/example/android/bluetoothlegatt/SampleGattAttributes.java

我使用的是以下蓝牙温度计。

http://www.cooper-atkins.com/Products/Blue2/

这是我从 COOPER-ATKINS 那里得到的 API 文档。

https://drive.google.com/open?id=1eq93Qc6uy0Vv9KompukLuIUnJK4B-e-0

在第 6 页中,我突出显示了我在 github 代码中替换的服务 uuid 和特征 uuid。

我可以读取温度数据,但只能读取一次。如果温度变化我看不到温度值会在应用程序中自动刷新。我必须点击温度列表按钮才能获得最近的值。谁能建议我错过了什么或做错了什么。

如果您需要更多信息,请告诉我。

【问题讨论】:

【参考方案1】:

您突出显示的特征具有读取和指示属性。

读取特征(在 Android 中调用 BluetoothGatt.readCharacteristic)仅根据定义获取该时刻的值。

您必须启用指示才能获取值的每次更新。 您可以在this SO thread 上找到如何启用通知(不是指示)。您可以替换常量值来启用指示。

【讨论】:

该代码已经在 bluetoothLeService.java 的函数 setCharacteristicNotification() 中包含启用通知。能否请您在github上查看。让我知道这是否有任何问题。 descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); 你还在用这条线吗?你必须改变常数。 这是我在 setCharacteristicNotification 函数中使用的--BluetoothGattDescriptor 描述符 = characteristic.getDescriptor( UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));描述符.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE); mBluetoothGatt.writeDescriptor(descriptor); 抱歉,我无法编辑我的评论。根据您的建议,我将 ENABLE_NOTIFICATION_VALUE 更改为 ENABLE_INDICATION_VALUE。但是在调试应用程序时,有时我会刷新温度值,但并非总是如此,当我尝试在没有附加任何调试器的情况下运行应用程序时,它会保持不变(第一次温度读数) 对于提出的问题,reTs给出的解决方案是完美的。 ENABLE_INDICATION_VALUE 的使用得到了预期的结果。

以上是关于无法从蓝牙温度计连续获取温度值的主要内容,如果未能解决你的问题,请参考以下文章

计算温度低于 0 的连续天数

如何解码蓝牙温度传感器

Excel 回归分析

如何永远在后台运行需要蓝牙的应用程序?

如何从字节数组中获取正确的温度值

连续汗蒸一星期有什么好处?