Comment écrire les nombres entiers de port à l'aide de PySerial
Je suis en train d'écrire des données sur le port série COM1, à l'aide de PySerial.
import serial
ser = serial.Serial(0)
print (ser.name)
ser.baudrate = 56700
ser.write("abcdefg")
ser.close()
devrait marcher. Cependant, j'ai besoin d'envoyer de 28 octets d'entiers en permanence; dans la forme
255 255 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
sur la boucle, avec chaque entier à l'aide d'un octet de données.
Essayer:
import serial
ser = serial.Serial(0)
print (ser.name)
ser.baudrate = 56700
while True:
ser.write(255 255 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000)
ser.close()
soulève un Syntax Error
.
Comment pouvez-vous écrire des nombres entiers à un port série si write
envoie uniquement les chaînes? Comment puis-je m'assurer que chaque numéro est envoyé en 8-bits?
Il est très peu dans la documentation de la classe série
, de sorte que toute aide sera appréciée.
OriginalL'auteur TheDarkTurtle | 2014-07-25
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, l'écriture
123 12 123 123 123
n'est pas valide la syntaxe de Python.Créer une liste ou un tuple avec votre entiers:
values = (1,2,3,4,5)
Maintenant, nous avons besoin de convertir les données dans une chaîne binaire qui représente nos valeurs.
Alors, voici comment nous le faisons
En fonction du nombre d'octets que vous souhaitez utiliser par numéro, vous devez emballer différemment. Voir la documentation ici: https://docs.python.org/2/library/struct.html
s = struct.pack('!{0}B'.format(len(values)), *values)
Merci pour votre réponse, cependant, votre code génère un nouveau message d'erreur:
TypeError: Can't convert 'bytes' object to str implicitly
. Je dois dire que je n'ai pas vraiment utiliséstruct
en Python, de sorte que vous aurez à supporter avec moi, comme j'essaie de comprendre.je vous remercie, votre code a bien fonctionné.
OriginalL'auteur LtWorf
Je n'ai jamais utilisé pySerial, mais en regardant les documentations cela dit, vous pouvez également envoyer des octets.
Donc, veuillez jeter un oeil à: https://docs.python.org/3.1/library/functions.html#bytes
bytes()
fonction. Je vais aussi essayer ceci quand je reçois une chance - cependant, en regardant lePySerial
documentationser.write()
ne prend chaîne des arguments de type, etbytes()
renvoie une mutable type de séquence, de sorte qu'il peut ne pas fonctionner.OriginalL'auteur Amduscias
L'idiome j'utilise souvent pour ce but (faire une chaîne de la liste de valeurs d'octets) est:
et si vous avez littéralement commencé avec un espace délimité liste de nombres, vous pouvez aller un peu fou et d'utilisation:
Vous pouvez probablement le deviner j'aime la carte. C'est encore plus amusant avec les lambda fonctions!
OriginalL'auteur RufusVS