Voici mon code pour la communication du port série
import matplotlib.pyplot as plt import matplotlib.animation as animation from matplotlib import style import serial MCU = serial.Serial('COM35', 115200, timeout=.1) import time time.sleep(1) #give the connection a second to settle while True: data = MCU.readline() print(str(data))
mais j'obtiens la sortie comme
b ' \ x0b \ x16) 6 \ x06 \ x07 \ x08X \ x02 \ x16, '
(il s'agit d'une valeur Hex + Ascii)
et voici mes données d'entrée
uint8_t myBuf [] = {11,22,32,41,54,6,7,8,88,2,22,44};
quelqu'un sait ce que je fais de mal ici?
3 Réponses :
Dans quel format voulez-vous votre sortie? Comme vous le suggérez, vous disposez des données correctes mais au format octet. Par exemple, vous pouvez l'obtenir sous forme de liste d'entiers python comme suit (Python 3):
>>> list(data) [11, 22, 32, 41, 54, 6, 7, 8, 88, 2, 22, 44]
Le struct peut également vous être utile pour décoder les données d'octets.
(Je ne peux pas laisser de commentaire, désolé.) p >
Lorsque vous avez écrit str (data), vous avez demandé à python de convertir les données binaires en une chaîne lisible (dans un fromat lisible).
Puisqu'il n'y a pas de représentation lisible de la plupart des octets, python les traduit simplement en leur représentation hexadécimale (sous forme de chaîne).
Si vous souhaitez les imprimer sous forme de liste simplement: liste (données).
Peut-être que ce sera une bonne idée d'essayer de le décoder?
juste comme idée
while ser.isOpen(): for s in ser.read(): s = ser.readline().decode('utf-8') #reading data from the port with decoding from UTF-8 com = str(s).replace('\n','') #cutting out second pass to the new line print(s)