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

serial front_door signment and gps signment的更多相关文章

  1. 玩转ArduinoJson库 V5版本

    1.前言     一直以来,博主的事例代码中都一直使用到JSON数据格式.而很多初学者一直对JSON格式有很大疑惑,所以博主特意分出一篇博文来重点讲解Arduino平台下的JSON库--Arduino ...

  2. Qt - 读取GPS数据

    1.GPS型号为ublox(EVK-M8L),配有USB接口,Qt版本5.7 2.实现步骤: (1)实现串口通信 采用Qt5.7 内置的串口操作类QSerialPort和QSerialPortInfo ...

  3. Serial Communication Protocol Design Hints And Reference

    前面转载的几篇文章详细介绍了UART.RS-232和RS-485的相关内容,可以知道,串口通信的双方在硬件层面需要约定如波特率.数据位.校验位和停止位等属性,才可以正常收发数据.实际项目中使用串口通信 ...

  4. UART to Serial Terminal(转载)

    前一篇<UART Explained>介绍了UART的基本信息,重点分析了UART的信号.本文摘录的文章则重点介绍了波特率(Baud Rate)相关的内容,波特率越高,传输速度越快,但实际 ...

  5. 树莓派连接GPS模块

    一月份的时候觉得好玩买了树莓派,但是太懒没怎么研究,但最近当初买树莓派时的那个梦想又萦绕心头,决定抽空完成一下当年的计划~ GPS模块是其中很重要的一环,于是在某宝上搜索,找了一家相对便宜也很轻巧的G ...

  6. 物流追踪 - -GPS和GPRS应用

    源码1: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<termios.h ...

  7. Win CE 6.0 获取手持机GPS定位2----示例代码 (C#)

    一.须知 1.手持机(PDA)必须有GPS模块,才能通过代码使用串口通信获取GPS相关信息 2.要清楚自己手持机(PDA)固定的GPS通信串口号,如我们公司的手持机获取GPS信息的串口为COM4 3. ...

  8. LCD显示GPS时钟[嵌入式系统]

    夏任务102:做一个GPS钟 实验要求 用RPi的串口连接一个GPS模块,从GPS得到实时时间,在7段数码管或LCD上显示 实验工具: Raspberry Pi Model B主机, 8G c10 S ...

  9. 在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~

    在ROS(indigo)中读取手机GPS用于机器人定位~GPS2BT在ubuntu和window系统下的使用方法~ 不需要额外购买GPS设备. 将手机GPS数据通过蓝牙传输给计算机使用,当然通过类似方 ...

随机推荐

  1. Cocos Creator - 入门教程项目 - 博客频道 - CSDN.NET

    3457 教程司令部 [20160418] | Cocos Creator - CocoaChina CocoaChina_让移动开发更简单cocoachina.com 2033 Cocos Crea ...

  2. IP2——IP地址和子网划分学习笔记之《子网掩码详解》

    2018-05-04 16:21:21   在学习掌握了前面的<进制计数><IP地址详解>这两部分知识后,要学习子网划分,首先就要必须知道子网掩码,只有掌握了子网掩码这部分内容 ...

  3. html5 javascript 事件练习2

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  4. 问题 1462: [蓝桥杯][基础练习VIP]Huffuman树

    题目描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0,  p1,  …,  pn-1},用这列数构造Huffman树的过程如下: ...

  5. 网页分享到微博、QQ、QQ空间、微信

    <ul id="content-share-list" class="bdsharebuttonbox bdshare-button-style0-16" ...

  6. Twisted简介

    Twisted是用Python实现的基于事件驱动的网络引擎框架,Twisted支持许多常见的传输及应用层协议,包括TCP.UDP.SSL/TLS.HTTP.IMAP.SSH.IRC以及FTP.就像Py ...

  7. Linux 查看磁盘读写速度IO使用情况

    # 查看io进程 命令:iotop 注:DISK TEAD:n=磁盘读/每秒              DISK WRITE:n=磁盘写/每秒. 注:标黄的可查看磁盘的读写速率,下面可以看到使用的io ...

  8. kmp匹配详解

    字符串算法都是毒瘤的 一.kmp算法的用处 在文本串中查找模式串的位置,数量 文本串:要在这个字符串查找模式串 模式串:在文本串中查找的字符串 全是废话 二.kmp算法的思想 话说kmp好像是3个发明 ...

  9. Win32汇编学习(9):窗口控件

    这次我们将探讨控件,这些控件是我们程序主要的输入输出设备. 理论: WINDOWS 提供了几个预定义的窗口类以方便我们的使用.大多数时间内,我们把它们用在对话框中,所以我们一般就它们叫做子窗口控件.子 ...

  10. Configuration in ASP.NET Core(未完,待续)

    Configuration in ASP.NET Core App configuration in ASP.NET Core is based on key-value pairs establis ...