web-dev-qa-db-fra.com

pySerial write () ne prendra pas ma chaîne

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.

21
Garvin

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

29
Garvin

Vous avez trouvé la cause profonde. Faites comme ceci:

ser.write(bytes(b'your_commands'))
7
Murphy Meng

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

>>>
1
user3577539