serial front_door signment and gps signment

import socket
import serial
import os
import sys
import struct
#serial
ser_intf = serial.Serial(port='/dev/ttyS0',baudrate=19200,bytesize=8,timeout=1)

#read data from power board serial port

def 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,lo

def 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_e



def 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 flag



PB_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信号。



猜你喜欢

转载自www.cnblogs.com/gloria11/p/9845546.html
GPS
今日推荐