2015-08-14 2 views
2

Я работаю над приложением, которое требует отправки байтового массива на последовательный порт с использованием pyserial модуля. Я был успешно запущен код, чтобы сделать это в пологом:Как отправить массив байтов на последовательный порт с помощью Python?

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) я получаю сообщение об ошибке, так как

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 в этом отношении?

+0

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

+0

могут быть разные версии пакета pyserial (' serial.version') в Canopy и Spyder? –

ответ

0

Создав bytearray (хотя вам может понадобиться конвертировать в str).

>>> bytearray([1, 2, 3]) 
bytearray(b'\x01\x02\x03') 
>>> str(bytearray([1, 2, 3])) 
'\x01\x02\x03' 
3

Похоже, что ошибка вызвана типом объекта, переданного в ser.write(). Похоже, он интерпретируется как список, а не bytearray в Spyder.

Попытка и объявить значения в явном виде ByteArray и записать его в последовательный порт:

imort 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) 
Смежные вопросы