¿Cómo puedo enviar una matriz de bytes a un puerto serie usando Python?

Estoy trabajando en una aplicación que requiere el envío de una matriz de bytes a un puerto serie, mediante el pyserial módulo. He sido exitosamente la ejecución de código para hacer esto en 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

Pero cuando voy a ejecutar el mismo código en Spyder (ambos están ejecutando Python 2.7.6) me sale un mensaje de error, como

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

¿Cómo puedo hacer Spyder se comportan como Canopy en este sentido?

  • ser.write(bytearray([4, 9, 62, 144, 56, 30, 147, 3, 210, 89, 111, 78, 184, 151, 17, 129]))
  • existen diferentes versiones de paquete de pyserial (serial.version) en el Dosel y la Spyder?
InformationsquelleAutor W. Stine | 2015-08-14

2 Kommentare

  1. 5

    Parece que el error es causado por el tipo de objeto pasa a ser.write(). Parece que interpretted como una lista y no un objeto bytearray en Spyder.

    Tratar y declarar los valores de forma explícita como un objeto bytearray y la de escribir en el puerto serie:

    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)

    edición: la Corrección de errores tipográficos.

  2. 0

    Mediante la creación de un bytearray (aunque puede que usted necesita para convertir a un str así).

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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea