我需要从我的Python程序以特定格式发送数据。我的目标是可以将我的PC上的数据发送到连接到Arduino的XBee。这是通过一个程序(在Arduino上运行)完成的,但不是Python(Python代码通常是接收器)。
// allocate two bytes for to hold a 10-bit analog reading
uint8_t payload[7];
int value1 = 100; // data to be sent
payload[0] = value1 >> 8 & 0xff; // payload[0] = MSB.
payload[1] = value1 & 0xff; // 0xff = 1111 1111, i.e.
最后使用此命令发送数据(使用XBee库):
Tx16Request tx_5001 = Tx16Request(0x5001, payload, sizeof(payload));
xbee.send(tx_5001);
在Python中,使用XBee Python库,我想发送这些数据,但它应该符合这种格式,这样我就可以使用现有的代码来读取数据并将其转换为有用的值。
总之,有没有人知道Python中以下代码的等价物?
uint8_t payload[7];
int value1 = 100; // data to be sent
payload[0] = value1 >> 8 & 0xff; // payload[0] = MSB.
payload[1] = value1 & 0xff; // 0xff = 1111 1111, i.e.
在接收方,我有以下内容来提取可以使用的值:
uint8_t dataHigh = rx.getData(0);
uint8_t dataLow = rx.getData(1);
int value1 = dataLow + (dataHigh * 256);
编辑:我的数据确实不需要两个字节,所以我通过在python data = chr(0x5A)中定义一个字节并在我的发送中使用它来进行测试,并在接收到的时使用了int value1 =无论我定义什么数据,analogHigh返回232!
答案 0 :(得分:1)
你可能正在寻找struct(将python int转换为unit8_t)我用它来与低级别设备进行通信。
所以
import struct
var = 25 # try 2**17 and see what happens
print(struct.pack('<H', var)) # b'\x00\x19'
print(struct.pack('>H', var)) # b'\x00\x19'
>
或<
更改字节一样。H
简称(uint16_t),B
用于unsigned char(uint8_t)。 b''
是python bytes字符串,允许您查看字节数据。
所以我建议你从xbee.send(b'\x45\x15')
开始,看看另一方面会发生什么。如果通信工作,则开始创建将python类型转换为结构重复的函数。
另见: BitwiseOperators
答案 1 :(得分:-1)
有不同的方法可以解决这个问题,一种方法是进行for循环
for (int i = 0; i < rx.getDataLength(); i++)
{
Serial.print( rx.getData(i), HEX );
}
并从该字符串中提取数据,其中有很多方法可以执行此操作。