2016-11-26 1 views
-1

Je dois comprendre comment envoyer un message au format hexadécimal de UART par exemple: msg = '99' + « 70b4c55ad8cdb7806a7b043069c4e0d8 »comment envoyer un hexadécimal de python à l'UART?

« 99'is distingue, le début du message et le reste est les données. Comme importation série temps d'importation

#serial port 
ser = serial.Serial(
        port='COM4',\ 
        baudrate=230400,\ 
        parity=serial.PARITY_NONE,\ 
        stopbits=serial.STOPBITS_ONE,\ 
        bytesize=serial.EIGHTBITS,\ 
        timeout=0) 

    msg=b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8' 
    ser.write(msg) 
    time.sleep(0.4) 

while True: 
    print(ser.read(30)) 
ser.close()    # close ports 

Mais je ne unerstand e erreur:

msg= b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8' 
    ^
IndentationError: unexpected indent 

Il me faut ensuite comparer en utilisant c langage, pour comparer le premier octet reçu 99 avec 0x99 .

int lenght = dev_uart_ptr->uart_read((void*)buffer,34); 

     if (lenght<34) 
     { 
      if buffer [0]='0x99' 
     } 

Merci d'avance.

+0

Vous vous rendez compte que 99 est un nombre hexadécimal valide, non? Cela en fait un mauvais marqueur de départ. –

+0

@MarkRansom, je commence à utiliser hexadécimal, uart et c très récemment, je suis ouvert à tous conseil et suggestion – tssmokey46

+0

Vous avez une bonne réponse sur l'utilisation d'un objet octets, mais si vous avez une chaîne hexagonale pour commencer, vous pouvez 'binascii.unhexlify ('99 '+' 70b4c55ad8cdb7806a7b043069c4e0d8 ')'. – tdelaney

Répondre

1
  1. Il semble que vous chargez à buf mais en utilisant buffer dans votre code c.

  2. Vous lisez 34 octets dans le tampon, puis vérifiez si la longueur est inférieure à 34. Cela ne devrait pas fonctionner correctement. Et à en juger par votre exemple, il devrait être 17.

  3. Encode ne convertira pas msg en chaîne hexadécimale. Il traitera chaque caractère comme un char, à savoir '0' est 48, '1' est 49 etc

Créer octets objet à l'aide

msg = b'\x99\x70\xb4\xc5\x5a\xd8\xcd\xb7\x80\x6a\x7b\x04\x30\x69\xc4\xe0\xd8' 
ser.write(msg) 
+0

Il me donne une erreur: msg = b '\ x99 \ x70 \ xb4 \ xc5 \ x5a \ xd8 \ xcd \ xb7 \ x80 \ x6a \ x7b \ x04 \ x30 \ x69 \ xc4 \ xe0 \ xd8 ' ^ IndentationError: retrait inattendu – tssmokey46

+0

Vérifiez votre indentation. ceci est probablement à l'intérieur d'une fonction, donc il devrait être procédé par 4 espaces ou tabulation. – Uriel

+0

Pourriez-vous me dire s'il vous plaît que voulez-vous dire par ce b '??? – tssmokey46