可以在“ nRF Connect for Mobile”上显示脉搏血氧仪服务(0x1822)

时间:2019-05-06 02:58:35

标签: c# bluetooth bluetooth-lowenergy

我正在使用arduino通过BLE向移动设备发送消息,该移动设备使用“ nRF Connect for Mobile”来扫描arduino。

我能够获取血压(0x1810)和健康温度计(0x1809)的信息,但是无法进行脉搏血氧仪服务(0x1822)

仅显示

Value: (0x) 00-63-00-50-00

我期望的是

00 = flags

63-00 = SLOAT of the SpO2 value, i.e. 99%

50-00 = SLOAT of the pulse rate, i.e. 80

因为它没有“无效数据语法”之类的症状,所以我想知道此服务是否由该应用定义。

// For Blood Pressure service (0x1810): Blood Pressure Measurement (0x2A35)
byte flags1 = 0b00000000;
byte SYS = 100;
byte DIA = 160;
byte MAP = 120;
byte BP[8] = {flags1, SYS, 0, DIA, 0, MAP, 0};

pChara1_1->setValue(BP, 8);
pChara1_1->indicate();
// The mobile app (nRF Connect) display the systolic pressure: 100 mmHg successfully (also the diastolic and mean pressure)

// For Pulse Oximeter Service (0x1822): PLX Spot-check Measurement (0x2A5E)
byte flags3 = 0b00000000;
byte Sp = 99;
byte PR = 80;
byte SPO2[5] = {flags3, Sp, 0, PR, 0};

pChara3_1->setValue(SPO2, 5);
pChara3_1->indicate();

// For Pulse Oximeter Service (0x1822): PLX Features (0x2A60)
byte flags4[2] = {0b00000000,0b00000000};

pChara3_3->setValue(flags4, 2);

// It turns out "Value: (0x) 00-63-00-50-00"

预期结果

SpO2: 99%
Pulse rate: 80

实际结果

Value: (0x) 00-63-00-50-00

2 个答案:

答案 0 :(得分:0)

在此处的官方蓝牙通用属性配置文件规范中找到:
https://www.bluetooth.com/specifications/gatt/

以及该页面上pdf的链接:
https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=304965

脉搏血氧仪服务PLX的返回值返回SFLOAT。
SFLOAT是一个16位字,以带符号的4位整数指数开头,后跟带符号的12位尾数,每个均以二进制补码形式表示。
例如:
您的OxiValue:0x0063。
指数:0x0为0。
尾数:0x063是99.
结果:99 * 10 ^ 0为99。
由于指数为0,因此此示例很容易,因为10 ^ 0为1。
二进制补码形式的带符号4位整数由十进制范围-8到+7,
表示。 其中-8是BIN 1000,0是BIN 0000,+ 7是BIN0111。
0xB是BIN 1011给出DEC -4。
0x4是BIN 0100给出DEC 4.
0x3是BIN 0011给出DEC3。
这意味着大于0x7的十六进制数在0xF(即12月-1日)之前将为负。

从SFLOAT转换为DEC的简单方法是为指数部分的所有16个值制作一个查找表。 对于尾数部分,如果它是正数,则只需将十六进制值转换为整数即可。负数则更为复杂。您将必须使用Google。

现在连接到nRF Connect for Mobile。 要表示这些数字,您必须将它们转换为整数并使用表示格式Int。仅在nRF Connect 4.19.0版中才有可能。或更高版本,否则您必须将int值作为文本发送。

答案 1 :(得分:0)

的确是这种情况,nRF应用程序本身不支持对此特性进行解析。你没做错什么。

我在nRF存储库上创建了一个问题,维护者说他将尝试实现我提到的一个特征解析。

链接到Issue