python通過(guò)調(diào)用serial庫(kù)函數(shù)發(fā)送指令,其中串口通信發(fā)送的數(shù)據(jù)需要是str格式字符串。當(dāng)需要給下方發(fā)送16進(jìn)制數(shù)據(jù)時(shí),必須將16進(jìn)制數(shù)轉(zhuǎn)化為str格式字符串方可發(fā)送。
1.數(shù)據(jù)采用python中str()函數(shù),轉(zhuǎn)換為字符串格式,再串口接受端對(duì)字符串進(jìn)行解碼
例如python通過(guò)串口發(fā)送0x08數(shù)據(jù)至串口接受器,此時(shí)可以通過(guò)將0x08轉(zhuǎn)換為str格式發(fā)送,再通過(guò)串口接收器解析代碼將str轉(zhuǎn)化為16進(jìn)制數(shù)。
data=0x08 ?
serial.send(str(data)) ? ? ? ? ?注:str(0x18)='24'
事實(shí)上這樣的轉(zhuǎn)化在串口接收器端會(huì)比較麻煩,因?yàn)槭褂么谡{(diào)試助手時(shí)也無(wú)法進(jìn)行解碼。同時(shí)發(fā)送的數(shù)據(jù)量也偏大
2.數(shù)據(jù)采用python中chr()函數(shù),轉(zhuǎn)換為ascII碼形式,發(fā)送ascII碼,對(duì)方接受后識(shí)別為16進(jìn)制數(shù)據(jù)。
data=0x08
serial.send(chr(data)) ? ? ? ? ?注: chr(0x08)='\x08'
具體為何chr()函數(shù)轉(zhuǎn)換的16進(jìn)制ascII數(shù)據(jù)可以被識(shí)別,需要認(rèn)真探討
這個(gè)方式有一個(gè)很大的問(wèn)題是chr的轉(zhuǎn)換只能是0~255之間的數(shù)據(jù),超過(guò)就無(wú)法解析成ascII碼
事實(shí)上 當(dāng)print(chr(0x30))時(shí)打印出的是ascII編碼的字符0,print(chr(48)也是字符0,與ascII字符表上的一致。
3.同時(shí)還可以通過(guò)binascii.b2a_hex函數(shù)進(jìn)行進(jìn)制轉(zhuǎn)換
后面兩種可行的方式歸根究低是通過(guò)發(fā)送‘x08’這樣的格式發(fā)送,實(shí)際上這個(gè)格式是通用的ascII碼的格式。事實(shí)上系統(tǒng)將數(shù)據(jù)下達(dá)串口時(shí)會(huì)將數(shù)據(jù)進(jìn)行解析,ascII碼的數(shù)據(jù)解析為這個(gè)16進(jìn)制對(duì)應(yīng)的二進(jìn)制碼。即使發(fā)送的是字符串:‘hello’ 實(shí)際上也是通過(guò)ascII碼的解析,將每一個(gè)字符解析成ASCII碼的二進(jìn)制數(shù)據(jù),再發(fā)送過(guò)去。