Comment puis-je envoyer un tableau d'octets à un port série à l'aide de Python?
Je suis en train de travailler sur une application qui nécessite l'envoi d'un tableau d'octets à un port série à l'aide de la pyserial module. J'ai été avec succès l'exécution de code pour ce faire, dans la canopée:
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
Mais quand j'exécute le même code dans Spyder (les deux sont en cours d'exécution Python 2.7.6), je reçois un message d'erreur, comme
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
Comment puis-je faire Spyder se comportent comme de la Canopée à cet égard?
ser.write(bytearray([4, 9, 62, 144, 56, 30, 147, 3, 210, 89, 111, 78, 184, 151, 17, 129]))
- pourrait-il y avoir différentes versions de package pyserial (
serial.version
) dans la Canopée et la Spyder?
Vous devez vous connecter pour publier un commentaire.
Il ressemble à l'erreur est causée par le type de l'objet passé en ser.write(). Il semble qu'il est interprété comme une liste et non un objet bytearray en Spyder.
Essayer de déclarer les valeurs explicitement comme un objet bytearray et puis l'écrire sur le port série:
edit: la Correction de fautes de frappe.
Par la création d'un
bytearray
(bien que vous pouvez avoir besoin de convertir unstr
ainsi).