如何在 React Native 中将 UInt16 或字节转换为心跳率
Posted
技术标签:
【中文标题】如何在 React Native 中将 UInt16 或字节转换为心跳率【英文标题】:How to convert UInt16 or bytes into heart beat rate in React Native 【发布时间】:2020-07-30 18:13:35 【问题描述】:我正在尝试从我的 React-Native 应用程序中读取我的 Fitbit Versa Lite 智能手表的心率,我能够获得心率的特征并且能够以编码的 base64 格式获得值,例如下面
Heart Rate Data: AAAAAAAAuQAA
当我解码 base64 字符串时,它显示为
Heart Rate Data: ¹
通过以下链接查看蓝牙心率规格后
https://www.bluetooth.com/wp-content/uploads/Sitecore-Media-Library/Gatt/Xml/Characteristics/org.bluetooth.characteristic.heart_rate_measurement.xml
<Bit index="0" size="1" name="Heart Rate Value Format bit">
<Enumerations>
<Enumeration key="0" value="Heart Rate Value Format is set to UINT8. Units: beats per
minute (bpm)" requires="C1"/>
<Enumeration key="1" value="Heart Rate Value Format is set to UINT16. Units: beats per
minute (bpm)" requires="C2"/>
</Enumerations>
</Bit>
<Field name="Heart Rate Measurement Value (uint16)">
<InformativeText> Note: The format of the Heart Rate Measurement Value field is dependent
upon bit 0 of the Flags field. </InformativeText>
<Requirement>C2</Requirement>
<Format>uint16</Format>
<Unit>org.bluetooth.unit.period.beats_per_minute</Unit>
</Field>
现在考虑链接中的上述解释,我需要将 1 视为测量单位还是将 1 视为我从心率传感器接收到的数据字节。
读取特征的React-Native代码:
async readData(device)
const services = await device.services();
console.log("Services:",services);
const characteristics = await services[1].characteristics();
// console.log(JSON.stringify(characteristicW));
console.log("Characteristics:",characteristics);
characteristics[0].monitor((err, update) =>
if (err)
console.log(`characteristic error: $err`);
console.log(JSON.stringify(err));
else
console.log("Is Characteristics Readable:",update.isReadable);
console.log("Heart Rate Data:",base64.decode(update.value));
var data = new Uint16Array(base64.decode(update.value));
console.log("Heart Beats:",data[1]);
);
感谢任何帮助。
谢谢。
【问题讨论】:
我猜这是上标 1 字符,还有其他事情发生。你在使用dev.fitbit.com/build/guides/sensors/heart-rate的心率库吗? @CharlesBamford 用读取特征的代码更新了我的帖子。难道我做错了什么?我正在使用 polidea 的 react-native-ble-plx 库。 在您的代码中,我看不到您如何获取“标志”属性,以及您如何获取该值并提取第一个 bit (不是字节)。 【参考方案1】:在我看来,base64.decode(update.value)
的输出是 ¹。那是hex value 0xB9, or decimal value 185 的Unicode 表示。
从您的代码中我不清楚这是破译您在update
中获得的特征的适当方法。也许你的代码更接近example documented in the wiki?
【讨论】:
不知道他的心跳是不是每分钟185次。以上是关于如何在 React Native 中将 UInt16 或字节转换为心跳率的主要内容,如果未能解决你的问题,请参考以下文章
如何在 react-native 函数组件中将获取数据设置为文本字段
如何在React native中将屏幕分为三个具有不同文本内容的部分
我们如何在React Native中将生产的APK大小减少70%?
如何在 React Native 中将 UInt16 或字节转换为心跳率