如何使用Python将字节数组发送到串口?

11

我正在开发一个应用程序,需要使用pyserial模块将一个字节数组发送到串口。我已经成功地在Canopy中运行了相应的代码:

import serial
ser = serial.Serial('/dev/ttyACM0', 9600, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE)
ser.write([4, 9, 62, 144, 56, 30, 147, 3, 210, 89, 111, 78, 184, 151, 17, 129])
Out[7]: 16

但是当我在Spyder中运行相同的代码(两者都运行Python 2.7.6)时,我会收到一个错误消息,如下:

但是当我在Spyder中运行相同的代码(两者都运行Python 2.7.6)时,我会收到一个错误消息,如

import serial
ser = serial.Serial('/dev/ttyACM0', 9600, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE)
ser.write([4, 9, 62, 144, 56, 30, 147, 3, 210, 89, 111, 78, 184, 151, 17, 129])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 475, in write
n = os.write(self.fd, d)
TypeError: must be string or buffer, not list

我该如何让Spyder在这方面表现得像Canopy?


ser.write(bytearray([4, 9, 62, 144, 56, 30, 147, 3, 210, 89, 111, 78, 184, 151, 17, 129])) - Padraic Cunningham
在Canopy和Spyder中,pyserial包(serial.version)可能有不同的版本吗? - Jonathan March
2个回答

15

看起来错误是由于传递给ser.write()的对象类型导致的。在Spyder中,它似乎被解释为列表而不是字节数组。

尝试明确将值声明为字节数组,然后将其写入串口:

错误似乎是由于传递给 ser.write() 的对象类型不正确所引起的。在 Spyder 中,它被解释为列表而不是字节数组。

尝试明确声明值为 bytearray ,然后将其写入串口:

import serial
ser = serial.Serial('/dev/ttyACM0', 9600, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE)

values = bytearray([4, 9, 62, 144, 56, 30, 147, 3, 210, 89, 111, 78, 184, 151, 17, 129])
ser.write(values)

编辑:更正错别字。


1
通过创建一个 bytearray(尽管您可能还需要转换为str)。
>>> bytearray([1, 2, 3])
bytearray(b'\x01\x02\x03')
>>> str(bytearray([1, 2, 3]))
'\x01\x02\x03'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接