2016-11-26 42 views
-1

我需要了解如何在十六進制格式發送消息從UART例如: 味精= '99' +‘70b4c55ad8cdb7806a7b043069c4e0d8’如何將十六進制從python發送到UART?

「99'is於不同消息的開始,其餘是數據。 作爲 進口串行 進口時間

#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 

但我不unerstand個錯誤:

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

我需要再使用C langage,在第一接收的字節99 0x99比較比較。

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

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

在此先感謝。

+0

你意識到99是一個有效的十六進制數,對不對?這使它成爲一個糟糕的開始標記。 –

+0

@MarkRansom,我最近開始使用十六進制,uart和c,我向所有的建議和建議提出建議 – tssmokey46

+0

關於使用字節對象有一個很好的答案,但如果你有一個十六進制字符串開始,你可以'binascii.unhexlify('99'+'70b4c55ad8cdb7806a7b043069c4e0d8')'。 – tdelaney

回答

1
  1. 好像你加載到buf但在C代碼中使用buffer

  2. 您正在讀取34個字節的緩衝區,然後檢查長度是否小於34.應該工作不正常。從你的例子來看,應該是17.

  3. 編碼不會將msg轉換爲十六進制字符串。它會對待每一個字符作爲一個字符,即'0'48'1'49

創建bytes對象使用

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

它給了我一個錯誤:msg = b'\ x99 \ x70 \ xb4 \ xc5 \ x5a \ xd8 \ xcd \ xb7 \ x04 \ x30 \ x69 \ xc4 \ xe0 \ xd8' ^ IndentationError:意外縮進 – tssmokey46

+0

檢查您的縮進。這可能在一個函數內部,所以它應該由4個空格或製表符進行處理。 – Uriel

+0

你能告訴我你那個b是什麼意思? – tssmokey46