2
votes

communication du port série python

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?


0 commentaires

3 Réponses :


2
votes

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 >


0 commentaires

1
votes

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).


0 commentaires

1
votes

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)


0 commentaires