import socket
import serialimport osimport sysimport struct#serial ser_intf = serial.Serial(port='/dev/ttyS0',baudrate=19200,bytesize=8,timeout=1)#read data from power board serial portdef serialRead(serial_handle): serial_handle.flushInput() cnt =0 while 1: din = serial_handle.read(30) cnt +=1 #loop execution 8 times if len(din) ==0 and cnt < 8: continue if len(din) ==30 and din[0] ==53 and din[1] ==53 and din[26] ==70 and din[27] ==69 and din[28]==70 and din[29]==70: print(din) return din.decode('utf-8') elif cnt ==8 : print("Can not receive data from power board") return "" serial_handle.flushInput()def convertGPS(gps): gps_la = gps[0:8] gps_lo = gps[8:16] list_la = [] list_lo = [] for i in range(4): list_la.append(int(gps_la[6-i*2:8-i*2],16)) la = str(struct.unpack('<f', struct.pack('4B', *list_la))[0]).zfill(20) for i in range(4): list_lo.append(int(gps_lo[6-i*2:8-i*2],16)) lo = str(struct.unpack('<f', struct.pack('4B', *list_lo))[0]).zfill(20) return la,lodef convertGPSOrientation(gps): gps_n='' gps_e='' #NORTH,SOUTH,EAST,WEST, if gps[0:2]=='4E' and gps[2:4]=='45': gps_n ='N' gps_e ='E' if gps[0:2]=='53' and gps[2:4]=='45': gps_n ='S' gps_e ='E' if gps[0:2]=='4E' and gps[2:4]=='57': gps_n ='N' gps_e ='W' if gps[0:2]=='53' and gps[2:4]=='57': gps_n ='S' gps_e ='W' return gps_n,gps_edef gateIsOpened(gate_sign): if gate_sign=='0': flag=[0,0] print("front gate closed,back gate closed") return flag if gate_sign=='1': flag=[1,0] print("front gate opened,back gate closed") return flag if gate_sign=='2': flag=[0,1] print("front gate closed,back gate opened") return flag if gate_sign=='3': flag=[1,1] print("front gate opened,back gate opened") return flagPB_data = serialRead(ser_intf)print('---------------------pb_data-----------------------------------')la,lo =convertGPS(PB_data[4:20])print('-----------------gps--------------------------------')print('la',la)print('lo',lo)gps_n,gps_e=convertGPSOrientation(PB_data[20:24])print(gps_e)print(gps_n)flag=gateIsOpened(PB_data[3])print('flag',flag)根据串口协议,转换ASCII成utf-8格式。数值转换成十进制,比如5 十进制是53,从串口接收到的数值是53。门的信号为00是都关,01是前门开,以此类推,gps是怎样解析的,从2到9个字节是gps信号。