1 編碼:
def bytes(datadict):strbody = json.dumps(datadict) # 將dict 資料妝化為字串
sendbuf = bytearray()
sendbuf += ('%04x' % len(strbody)).encode()
sendbuf += strbody.encode() # 將字串轉化為位元組陣列
crcval = crc16kermit().calculate(str(strbody)) sendbuf += crcval.encode() return sendbuf
2 解碼:
msg = json.loads(body.decode('utf-8
')) #
先將位元組陣列解碼為字串 , json編碼的字串轉換回乙個python資料結構
3 crc16:
from ctypes importc_ushort
class
crc16kermit(object):
crc16kermit_tab =
crc16kermit_constant = 0x8408
def__init__
(self):
ifnot len(self.crc16kermit_tab): self.init_crc16kermit() #
initialize the precalculated tables
def calculate(self, string=''
):
try:
ifnot isinstance(string, str): raise exception("
please provide a string as argument for calculation.")
ifnot string: return
0 crcvalue = 0x0000
for c in
string:
tmp = crcvalue ^ord(c)
crcvalue = c_ushort(crcvalue >> 8).value ^ int(self.crc16kermit_tab[(tmp & 0x00ff)], 0)
#after processing, the one's complement of the crc is calcluated and the
# low_byte = (crcvalue & 0xff00) >> 8high_byte = (crcvalue & 0x00ff) << 8crcvalue = low_byte |high_byte
return
"%04x
" %crcvalue
except
:
print("
calculate fail")
definit_crc16kermit(self):
'''the algorithm use tables with precalculated values
'''for i in range(0, 256):
crc =c_ushort(i).value
for j in range(0, 8):
if (crc & 0x0001):
crc = c_ushort(crc >> 1).value ^self.crc16kermit_constant
else
: crc = c_ushort(crc >> 1).value
python串列埠通訊
然後需要安裝python的serial庫 pip install pyserial在pyserial中設定串列埠的操作為 serial.serial portx,bps,timeout waittime 其中,portx為埠名稱,bps為波特率,timeout為超時時間,以秒為單位,所以操作非常簡單...
python 虛擬串列埠通訊
準備著手寫乙個串列埠工具,當前程式設計環境,並沒有辦法接好下位機平台,需要模擬出乙個串列埠,不斷傳送資訊,方便除錯串列埠工具。列出所有當前的com口 port list list serial.tools.list ports.comports port list name class serial...
樹莓派串列埠通訊python 樹莓派串列埠通訊設定
實驗環境樹莓派 3b 開發板 2018 06 27 raspbian stretch 樹莓派作業系統 使用 windows 10 通過網線連線遠端登陸訪問方式控制樹莓派 實驗目的 為了將樹莓派構建成乙個智慧型家居的資料中心,我們需要在樹莓派上連線 zigbee 無線通訊模組,實現與感測器的一對多通訊...