GPS导航模块数据的监听

来源:互联网 发布:美工是干嘛的 编辑:程序博客网 时间:2024/06/09 14:42

GPS是英文Global Positioning System(全球定位系统)的简称   利用GPS定位卫星,在全球范围内实时进行定位、导航的系统,称为全球卫星定位系统。GPS可以提供车辆定位、放到、反劫、行驶路线监控及呼叫等功能。要实现以上所有功能必须具备GPS终端、传输网络和监控平台三个要素。

我用得是深圳市伟辉创科技有限公司生产的GPS模块SF2820,iRF starⅢ高性能GPS 芯片组极佳的灵敏度(追踪感度-159dBm)、在讯号微弱时,TTFF (Time To First Fix)定位仍十分迅速  、支NMEA 0183 and SiRF binary 协定。监听前,先用串口将GPS模块和ARM开发板连接起来(可自己制作串口线,只需要发送、接收和地线三根线就可以了),将GPS天线连在GPS模块上,再将另一端放在室外接受数据,然后在板子上操作串口就可以了。具体步骤如下:


1、在开发板上用microcom命令监听:

我是将GPS模块连接在ttyS1这个串口,可以用microcom 命令打开串口设备,注意GPS模块的波特率是4800 如果波特率设置不对输出会出现乱码,按Ctrl-X退出:

[root@root /]# microcom -t 5000 -s 4800 dev/ttyS1
$GPGGA,041501.000,3029.6498,N,11423.6155,E,1,09,1.1,73.1,M,-13.7,M,,0000*40
$GPGSA,A,3,07,08,04,30,17,20,01,28,11,,,,2.5,1.1,2.3*33
$GPRMC,041501.000,A,3029.6498,N,11423.6155,E,0.28,302.18,040914,,,A*6C
$GPGGA,041502.000,3029.6499,N,11423.6154,E,1,09,1.1,72.6,M,-13.7,M,,0000*45
$GPGSA,A,3,07,08,04,30,17,20,01,28,11,,,,2.5,1.1,2.3*33
$GPRMC,041502.000,A,3029.6499,N,11423.6154,E,0.15,289.64,040914,,,A*68
$GPGGA,041503.000,3029.6500,N,11423.6154,E,1,09,1.1,72.5,M,-13.7,M,,0000*46
$GPGSA,A,3,07,08,04,30,17,20,01,28,11,,,,2.5,1.1,2.3*33
$GPRMC,041503.000,A,3029.6500,N,11423.6154,E,0.16,238.44,040914,,,A*63
$GPGGA,041504.000,3029.6501,N,11423.6154,E,1,09,1.1,72.2,M,-13.7,M,,0000*47
$GPGSA,A,3,07,08,04,30,17,20,01,28,11,,,,2.5,1.1,2.3*33
$GPGSV,3,1,12,04,72,207,39,01,68,049,24,28,53,332,18,30,52,230,43*77
$GPGSV,3,2,12,11,46,043,26,08,33,184,37,07,33,192,39,17,32,284,23*74

······

以上就是接受到的GPS数据。

2、编写用户程序监听:

[root@root /]# ./gps_test 


GPS DATALen=412
GPS information as follow:
$GPGGA,054432.000,3029.6523,N,11423.6208,E,1,09,1.2,70.4,M,-13.7,M,,0000*4A
$GPGSA,A,3,17,28,20,30,32,04,01,10,06,,,,1.9,1.2,1.4*32
$GPRMC,054432.000,A,3029.6523,N,11423.6208,E,0.16,184.84,040914,,,A*67
$GPGGA,054433.000,3029.6520,N,11423.6205,E,1,09,1.2,72.3,M,-13.7,M,,0000*40
$GPGSA,A,3,17,28,20,30,32,04,01,10,06,,,,1.9,1.2,1.4*32
$GPRMC,054433.000,A,3029.6520,N,11423.6205,E,0.15,133.60,040914,,,A*6D

GPS DATALen=614
GPS information as follow:
$GPGGA,054434.000,3029.6517,N,11423.6204,E,1,09,1.2,74.0,M,-13.7,M,,0000*47
$GPGSA,A,3,17,28,20,30,32,04,01,10,06,,,,1.9,1.2,1.4*32
$GPGSV,3,1,12,28,84,153,26,04,62,025,24,17,51,331,25,20,49,087,23*79
$GPGSV,3,2,12,06,35,244,39,01,29,042,16,32,18,049,17,30,17,198,35*78
$GPGSV,3,3,12,11,13,058,,10,05,193,33,02,03,237,,24,00,321,*7B
$GPRMC,054434.000,A,3029.6517,N,11423.6204,E,0.44,84.29,040914,,,A*5B
$GPGGA,054435.000,3029.6520,N,11423.6210,E,1,09,1.2,73.7,M,-13.7,M,,0000*47
$GPGSA,A,3,17,28,20,30,32,04,01,10,06,,,,1.9,1.2,1.4*32
$GPRMC,054435.000,A,3029.6520,N,11423.6210,E,0.81,89.54,040914,,,A*55

^C
[root@root /]# 

以上是监听的数据。以下是具体代码:

/*********************************************************************************
 *      Copyright:  (C) 2014 liucehngdeng<1037398771@qq.com> 
 *                  All rights reserved.
 *
 *       Filename:  gps_test.c
 *    Description:  This file 
 *                 
 *        Version:  0.0.0(09/04/2014~)
 *         Author:  liu chengdeng <1037398771@qq.com>
 *      ChangeLog:  1, Release initial version on "09/04/2014 11:05:23 AM"
 *                 
 ********************************************************************************/
#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
#include<sys/types.h>  
#include<sys/stat.h>  
#include<fcntl.h>  
#include<unistd.h>  
#include<termios.h>  
#include<string.h>  

int open_dev(char *dev)
{
    int fd = open( dev, O_RDWR );         //| O_NOCTTY | O_NDELAY   
    if (-1 == fd)
    {
        perror("Can't Open Serial Port !");
        return -1;
    }
    else
 
    return fd;
}


int init_serial(int fd,int nSpeed, int nBits, char nEvent, int nStop)  
{  
    struct termios newtio,oldtio;  
    if  ( tcgetattr( fd,&oldtio)  !=  0) {   
        perror("SetupSerial 1");  
        return -1;  
    }  
    bzero( &newtio, sizeof( newtio ) );  
    newtio.c_cflag  |=  CLOCAL | CREAD;  
    newtio.c_cflag &= ~CSIZE;  
  
    switch( nBits )  
    {  
    case 7:  
        newtio.c_cflag |= CS7;  
        break;  
    case 8:  
        newtio.c_cflag |= CS8;  
        break;  
    }  
  
    switch( nEvent )  
    {  
    case 'O':  
        newtio.c_cflag |= PARENB;  
        newtio.c_cflag |= PARODD;  
        newtio.c_iflag |= (INPCK | ISTRIP);  
        break;  
    case 'E':   
        newtio.c_iflag |= (INPCK | ISTRIP);  
        newtio.c_cflag |= PARENB;  
        newtio.c_cflag &= ~PARODD;  
        break;  
    case 'N':    
        newtio.c_cflag &= ~PARENB;  
        break;  
    }  
  
    switch( nSpeed )  
    {  
    case 2400:  
        cfsetispeed(&newtio, B2400);  
        cfsetospeed(&newtio, B2400);  
        break;  
    case 4800:  
        cfsetispeed(&newtio, B4800);  
        cfsetospeed(&newtio, B4800);  
        break;  
    case 9600:  
        cfsetispeed(&newtio, B9600);  
        cfsetospeed(&newtio, B9600);  
        break;  
    case 115200:  
        cfsetispeed(&newtio, B115200);  
        cfsetospeed(&newtio, B115200);  
        break;  
    case 460800:  
        cfsetispeed(&newtio, B460800);  
        cfsetospeed(&newtio, B460800);  
        break;  
    default:  
        cfsetispeed(&newtio, B9600);  
        cfsetospeed(&newtio, B9600);  
        break;  
    }  
    if( nStop == 1 )  
        newtio.c_cflag &=  ~CSTOPB;  
    else if ( nStop == 2 )  
    newtio.c_cflag |=  CSTOPB;  
    newtio.c_cc[VTIME]  = 0; 
    newtio.c_cc[VMIN] = 100;  
    tcflush(fd,TCIFLUSH);  
    if((tcsetattr(fd,TCSANOW,&newtio))!=0)  
    {  
        perror("com set error");  
        return -1;  
    }  
    
    return 0;  
}  
  
int main(void)  
{  
    int  fd;
    int  nset1,nread;  
    char buf[1024];  
  
    fd = open_dev("/dev/ttyS1"); 
     
  
    nset1 = init_serial(fd,4800, 8, 'N', 1);

    if (nset1 == -1)
        exit(1);  
  
    while(1)  
    {   
        sleep(2);   

        memset(buf,0,1024);   
        nread = read(fd, buf, 1024);
        if (nread > 0)
        {  
            printf("\nGPS DATALen=%d\n",nread);   
            buf[nread] = '\0';  
            printf( "GPS information as follow:\n%s\n", buf); 
        }  
   
    }  

    close(fd);  
    
    return 0;  
}  


 


0 0
原创粉丝点击