Utilisation de Python 3.3 et pySerial pour les communications série.
J'essaie d'écrire une commande sur mon port COM mais la méthode d'écriture ne prendra pas ma chaîne. (La plupart du code vient d'ici Exemples complets d'utilisation du paquet pySerial
Que se passe-t-il?
import time
import serial
ser = serial.Serial(
port='\\\\.\\COM4',
baudrate=115200,
parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
if ser.isOpen():
ser.close()
ser.open()
ser.isOpen()
ser.write("%01#RDD0010000107**\r")
out = ''
# let's wait one second before reading output (let's give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
out += ser.read(40)
if out != '':
print(">>" + out)
ser.close()
L'erreur est sur ser.write ("% 01 # RDD0010000107 **\r") où elle obtient le suivi est comme ceci data = to_bytes (data) b.append (item) TypeError: un entier est requis.
Il s'avère que la chaîne devait être transformée en un bytearray et pour ce faire, j'ai édité le code dans
ser.write("%01#RDD0010000107**\r".encode())
Cela a résolu le problème
Vous avez trouvé la cause profonde. Faites comme ceci:
ser.write(bytes(b'your_commands'))
J'ai eu le même message d'erreur "TypeError: an integer is required" lors de la tentative d'écriture. Merci, le .encode () l'a résolu pour moi. J'exécute python 3.4 sur un Dell D530 exécutant Windows 32 bits XP Pro.
J'omet les paramètres du port com ici:
>>>import serial
>>>ser = serial.Serial(5)
>>>ser.close()
>>>ser.open()
>>>ser.write("1".encode())
1
>>>