Python Arduino串行通信

时间:2015-08-12 21:03:20

标签: python arduino bytearray serial-communication

所以我在Python和Arduino Uno之间的串行通信存在问题。我让Python通过串行通信将数字38(连同其他数字)发送到Arduino,然后返回到Python。

我发送的数组是:

 [230, 0, 0, 0, 38] 

它打印出来的数组(使用print()时)是:

bytearray(b'\xe6\x00\x00\x00&

&符号在那里是因为在字节数据的打印中有一个奇怪的细微差别,当数字在一定范围之间时(抱歉我记不起范围)它用ASCII打印出来而不是十六进制,所以我发送给Arduino的数组应该仍然拥有所需的所有信息。

我通过以下方式收到Arduino中的信息:

char values[5];    
Serial.readbytes(values, 5);

一旦arduino发现了这些信息,我就会使用Serial.write将其发送回Python,在那里我打印出来以确保我收到了正确的信息。 Python中收到的输出是:

b'\xe6\x00\x00\x00\xf6' 

其中0xe6是230(正确)而0xf6是246,这是不正确的,它应该是38的十六进制值,即0x26。

有没有人对如何解决此问题有任何建议?任何建议或帮助将不胜感激!

编辑: 发现我的问题,我不小心错了'0',因为有一次我认为我必须将信息从ASCII转换为十六进制,但事实证明我没有。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

<强> test.ino

char buffer[10] = {0,0,0,0,0,0,0,0,0,0};
void setup(){
    Serial.begin(9600);
}
void loop(){
    Serial.println(Serial.readBytes(buffer,5));
}

<强> test.py

import serial
s=serial.Serial("COM5",timeout=5)
time.sleep(5) # wait a couple seconds
s.write(b"\xe6\x00\x00\x00&")
# or alternatively
# s.write(bytes(bytearray([0xe6,0x00,0x00,0x00,0x26])))
print(repr(s.read(1000)));

这是最小代码示例的样子......它也应该有用......