2014-10-06 112 views
1

我正在使用運行在樹莓上的Python3。我有一個串口設備(max232/PiC16F84)通過USB轉串口轉換器連接到樹莓。 我嘗試向設備發送兩個字節(例如0000 0011),然後PIC會將其解釋爲命令。 USB串行適配器配置正確,參數如bauderate應該沒問題。我想我的代碼不會將正確的字節發送到串行端口。發送字節串到串口設備

import serial 

ser = serial.Serial(
    port='/dev/ttyUSB0', 
    baudrate=1200, 
    parity=serial.PARITY_NONE, 
    stopbits=serial.STOPBITS_ONE, 
    bytesize=serial.EIGHTBITS, 
    xonxoff=serial.XOFF, 
    rtscts=False, 
    dsrdtr=False 
) 

ser.open() 
ser.isOpen() 

print("Initializing the device ..") 

ser.write(bytes(0x00)) 

print("Write command") 
ser.write (bytes(0x04)) 

print('Done') 
+0

什麼症狀,導致您認爲它沒有發送正確的字節?什麼是正確的字節(協議定義在哪裏)? – 2014-10-06 20:43:31

回答

7

您正在錯誤地使用bytes構造函數。當你與一個int作爲參數調用它,你就會得到:

字節(INT) - >字節,與空字節初始化參數給定大小的物體

所以bytes(0x00)(這只是被bytes(0) )爲空字符串,並bytes(0x04)爲四個零字節:

>>> bytes(0x00) 
b'' 
>>> bytes(0x04) 
b'\x00\x00\x00\x00' 

你想要的是bytes([ 0x00 ])等,或者乾脆與您的所有字節值的數組:

>>> bytes([0, 4]) 
b'\x00\x04' 

如果字符串很短,您可以簡單地將它寫爲常量:b'\x00\x04',例如。有關更多選項,請參閱bytes()的文檔。

-2

使用此: 字節[0×00] +字節([0×04])