使用 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)
应该可以工作。
我一直在努力将传感器值从 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)
应该可以工作。