Python字符串格式通过串口发送

时间:2013-08-04 10:24:40

标签: python string serial-port arduino

我需要正确格式化字符串,以便将其发送到通过串口连接的arduino。例如,我有这个python2.7.5代码:

x = int(7)
y = int(7000.523)
self.ser.write("%s%s" % (x, y))

但我希望x在一个字节中,y在x的不同字节中,所以我可以为arduino代码中的每个接收字节分配一个变量,类似于:

for (i=0; i<3; i++) 
  {
   bufferArray[i] = Serial.read();
  } 
d1 = bufferArray[0];
d2 = bufferArray[1];
d3 = bufferArray[2];
x = d1;
y = (d2 << 8) + d3;

换句话说,我不希望y片段在x字节中。 执行此操作的正确字符串格式是什么?

1 个答案:

答案 0 :(得分:1)

根据@Mattias Nilsson的建议,如果要发送两个连续的16位无符号整数,则会有一个示例代码:

import struct
x = int(7)
y = int(7000.523)
buf = struct.pack("<HH", x, y)
# read it back
for i in buf:
    print "%02x" % (ord(i))

您可以看到它们以2个字节的形式发送,LSB字节始终是第一个。 (在intel x64机器python 2.7.5上测试过) 编辑:您应该能够在格式字符串的开头使用<字符显式设置endiannes for little endian order。

然后你可以使用Serial.write发送缓冲区和字符串:

self.ser.write(buf+yourstring+'\0')

你不能理会终止你的字符串的零字符。如果你发送这样的字符串,你不应该在你的字符串中发送任何零字节字符。

在arduino端,你应首先读取并解码这两个整数然后读取一个循环中的字符,如果你读取零字节将结束读取。你一定要检查你的阅读缓冲区是否也不会溢出。

相关问题