如何使用Python将字节数组发送到串口?
问题描述
我正在开发一个应用程序,该应用程序需要使用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中运行相同的代码(两者都运行的是Python2.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()的对象类型引起的。在Spyder中,它似乎被解释为一个列表,而不是一个字节数组。
尝试将值显式声明为字节数组,然后将其写入串口:
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)
编辑:更正打字错误。
相关文章