使用 NRF24L01+ 从 Arduino 发送的 Raspberry pi 3b+ 上读取 python 中的结构时出错

Error reading Struct in python on Raspberry pi 3b+ sent from Arduino using NRF24L01+

我一直在努力将传感器值从 arduino 发送到 raspberry pi 3b+。我正在使用 NRF24L01+ 模块进行通信。我正在尝试将加速度计值(双精度类型)从 arduino 发送到 raspberry pi。 发送值的 Arduino 代码的一部分:

typedef struct {
  double rollx;
  double pitchy;
}myStruct;

myStruct duomenys;

  duomenys.rollx = kalAngleX;
  duomenys.pitchy = kalAngleY;
  radio.write(&duomenys,sizeof(duomenys));

  Serial.print("Roll: ");
  Serial.println(duomenys.rollx);
  Serial.print("Pitch: ");
  Serial.println(duomenys.pitchy);
  Serial.print("\t");

这是 arduino 串行监视器输出:

Pitch: -12.98
    Roll: 89.85
Pitch: -12.97
    Roll: 89.85
Pitch: -12.96
    Roll: 89.86

但是在树莓派方面,我无法解压接收到的结构(注意:我是 python 的新手)。我试过的是:

while True:

    while not radio.available(0):
      ##  print("Nepareina")
        time.sleep(1)

    duomenys = []

    radio.read(duomenys, radio.getDynamicPayloadSize())
    data = struct.unpack('ff',duomenys)
    rollx = data [0]
    pitchy = data[1]
    print(rollx)
    print("                              ")
    print(pitchy)


编译此代码时出现错误:

Traceback (most recent call last):
  File "/home/pi/Desktop/NRF24L01/receiveArduino.py", line 41, in <module>
    data = struct.unpack('ff',duomenys)
TypeError: a bytes-like object is required, not 'list'

如果我换行

data = struct.unpack('ff',duomenys)

data = struct.unpack('ff',bytes(duomenys))

我收到一个错误:

Traceback (most recent call last):
  File "/home/pi/Desktop/NRF24L01/receiveArduino.py", line 41, in <module>
    data = struct.unpack('ff',bytes(duomenys))
struct.error: unpack requires a bytes object of length 8

如果有人对如何阅读 python 中收到的结构有任何建议,请随时分享。

编辑:更新了 arduino 串行监视器输出。之前有贴错输出。

编辑:这是我正在使用的 NRF24L01 库。 https://github.com/matmany/lib_nrf24

你好,不知道你解决了没有。我遇到了同样的问题,我设法解决了这个问题:

而不是声明 duomenys = [] ... 尝试 duomenys = bytearray(nbBytesData),其中 nbBytesData 应该是您期望的字节数(我假设 8 个字节)

那么 data = struct.unpack('ff',duomenys) 应该可以工作。