Bluetooth 蓝牙低能量重量测量特性时间戳

Bluetooth 蓝牙低能量重量测量特性时间戳,bluetooth,bluetooth-lowenergy,adafruit,Bluetooth,Bluetooth Lowenergy,Adafruit,当我的设备未连接时,我正在缓冲数据,因此我需要实现时间戳,这样我就可以知道何时测量到了什么 幸运的是,重量测量特性包括一个时间戳 不幸的是,不清楚如何将该数据写入包,因为它不是一种正常的数据类型,而且肯定不仅仅是一个字节 我使用的是Adafruit的bluefruit arduino库,所以我尝试忽略模式并在SI权重之后编写unix时间戳,但不出所料,模式似乎不允许这样做,所以在收到通知时我没有看到时间戳(但我仍然看到正确的权重读数) 这里是日期时间特性的链接,这显然是它所期望的格式 我试着

当我的设备未连接时,我正在缓冲数据,因此我需要实现时间戳,这样我就可以知道何时测量到了什么

幸运的是,重量测量特性包括一个时间戳

不幸的是,不清楚如何将该数据写入包,因为它不是一种正常的数据类型,而且肯定不仅仅是一个字节

我使用的是Adafruit的bluefruit arduino库,所以我尝试忽略模式并在SI权重之后编写unix时间戳,但不出所料,模式似乎不允许这样做,所以在收到通知时我没有看到时间戳(但我仍然看到正确的权重读数)

这里是日期时间特性的链接,这显然是它所期望的格式

我试着查看一下nRF52 SDK,看看是否可以通过他们的API更好地处理这个问题,但是学习曲线有点陡峭,我只需要完成最后一点,让我的设备工作

更新:

对于其他有此问题的人来说,解决方案是我使用了notify方法,与adafruit示例中编写的方法相同

wmc.notify(通知,sizeof(通知))

因为我是通过一个N x 7缓冲数据数组建立索引的,
通知
是指向我要馈送的1 x 7数组中第一个元素的指针,所以sizeof总是返回4(我假设的地址大小)该服务具有两个管理特征,而不是最初写入的数组长度7:

<Characteristic type="org.bluetooth.characteristic.weight_scale_feature" name="Weight Scale Feature">
  <Requirement>Mandatory</Requirement>
<Characteristic type="org.bluetooth.characteristic.weight_measurement" name="Weight Measurement">
  <Requirement>Mandatory</Requirement>
这使得“时间戳”字段的宽度为7字节

要给出一个工作示例,说明如果您想要重量(Kg)和时间戳,如何创建完整数据包,它需要10字节长:

<Field name="Flags"> <Format>8bit</Format>  = 1 byte
<Field name="Weight - SI "> <Format>uint16</Format> = 2 bytes
<Field name="Time Stamp"> = 7 bytes
b'\x02\xc4\x1d\xb4\x07\x0c\x0b\x17\x16\x08'

以下是我如何构建要发送的包:
(uint8_t package[packageSize]={0b00000010,高字节(weight),低字节(weight),0,0,高字节(yr),低字节(yr),now.month(),now.day(),now.hour(),now.minute(),now.second())
我正在发送的内容::294A007E49615C18我正在接收的内容:294A09E670AAE775C5您的包看起来长度错误。您正在将
0,0
放入不必要的数据包中。我已经用数据包的样子更新了我的答案。可能会更新您的问题,提供更多关于如何创建数据包的详细信息,因为评论中的格式正在被破坏
b'\x02\xc4\x1d\xb4\x07\x0c\x0b\x17\x16\x08'