如何在 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 或字节转换为心跳率

如何在 React Native 中将整个选择更改为单个选择?

如何在 React Native 项目中将 JS 库导入打字稿