• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦>學習電腦>操作系統(tǒng)>Linux教程>

    linux下串口gps應用

    時間: 志藝942 分享

      嵌入式系統(tǒng)是計算機技術的一種重要應用形式。從概念上講,嵌入式系統(tǒng)并不是近來才出現(xiàn)的產(chǎn)品,但隨著計算技術和通信技術的迅速發(fā)展以及Internet的廣泛應用,嵌入式系統(tǒng)卻從來沒有象現(xiàn)在這樣風靡過。接下來是小編為大家收集的linux下串口gps應用,希望能幫到大家。

      linux下串口gps應用

      一、Gps數(shù)據(jù)格式標準(nmea0183)

      http://en.wikipedia.org/wiki/NMEA

      這次只要獲取經(jīng)緯度信息,所有主要針對下面2個Gps命令

      (1)位置信息(GGA)

      $GPGGA、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、M, <11>、<12>*hh

      <1>UTC時間,hh mm ss格式(定位它的)

      <2>經(jīng)度dd mm mmmm 格式(非0)

      <3>經(jīng)度方向 N或S

      <4>緯度ddd mm mmmm 格式(非0)

      <5>緯度方向E或W

      <6>GPS狀態(tài)批示0—未定位 1—無差分定位信息 2—帶差分定位信息

      <7>使用衛(wèi)星號(00~08)

      <8>精度百分比

      <9>海平面高度

      <10>大地隨球面相對海平面的高度

      <11>差分GPS信息

      <12>差分站ID號 0000-123

      (2)最簡特性(RMC)

      $GPRMC、<1>、<2>、<3>、<4>、<5>、<6>、<7>、<8>、<9>、<10>、<11>、*hh

      <1>定位時UTC時間hhmmss 格式

      <2>狀態(tài)A=定位V=導航

      <3>經(jīng)度ddmm.mmm 格式

      <4>經(jīng)度方向N 或S

      <5>緯度dddmm.mmmm

      <6>緯度方向E或W

      <7>速率

      <8>方位敬愛(二維方向指向,相當于二維羅盤)

      <9>當前UTC日期ddmmyy 格式

      <10>太陽方位

      <11>太陽方向

      二、nmealib庫的使用

      (1) 獲取nmealib源碼,并交叉編譯成.so文件

      nmealib 最新版本為0.53,可在http://sourceforge.net/projects/nmea/下載獲取到

      獲取源碼后,修改源碼結構如下:

      a. 在源碼目錄新建include目錄,將源碼中所有.h文件移到該include目錄中,

      b. 編寫Makefile文件,文件內(nèi)容如下:

      # 制作的目標文件名libnmeagps.so

      TARGET = libnmeagps.so

      # 包含所有頭文件

      INCLUDE_FILE = context.h generate.h parse.h parser.h gtime.h

      INCLUDE_FILE += tok.h units.h gmath.h nmea.h sentence.h info.h generator.h config.h

      # 設置交叉編譯工具

      COMPILER_PATH = arm-linux-

      CC = $(COMPILER_PATH)gcc

      CXX = $(COMPILER_PATH)g++

      LD = $(COMPILER_PATH)ld

      AR = $(COMPILER_PATH)ar

      LIBRARY = ./lib/

      INCLUDE_DIR = ./include/

      FLAGS = -Wall -O3 -s -I. -I$(INCLUDE_DIR)

      ifdef S3C2440

      FLAGS += -DPLAT_S3C2440

      else ifdef TI6446

      FLAGS += -DPLAT_TI6446

      else

      endif

      OBJS = $(patsubst %.c, %.o, $(wildcard *.c))

      %.o:%.c

      @$(CC) -c $(FLAGS) $< -o $@

      all:$(OBJS)

      @$(CC) -shared -Wall -fPIC -s $(OBJS) -o $(TARGET)

      @cp $(TARGET) $(LIBRARY) 1>/dev/null

      @cp $(INCLUDE_FILE) $(INCLUDE_DIR) 1>/dev/nul

      update:

      @cp -a $(INCLUDE_FILE) $(INCLUDE_DIR) 1>/dev/null

      clean:

      rm $(TARGET) *.o -f

      執(zhí)行make命令,編譯生成動態(tài)庫文件libnmeagps.so

      (2) 移植nmealib庫到項目中

      在項目源碼目錄中新建nmea_gps目錄,將(1)中編譯生成的libnmeagps.so和所有頭文件拷貝到nmea_gps

      目錄中,在需要應用庫借口的代碼中增加相應頭文件的聲明即可。

      項目Makefile增加下面內(nèi)容:

      NMEA_LIB=-L./nmea_gps/ -lnmeagps

      $(CXX) -o $@ $^ $(NMEA_LIB)

      (3) 測試

      /* nmea_lib測試程序 */

      void trace(const char *str, int str_size)

      {

      printf("Trace: ");

      write(1, str, str_size);

      printf("\n");

      }

      void error(const char *str, int str_size)

      {

      printf("Error: ");

      write(1, str, str_size);

      printf("\n");

      }

      int main()

      {

      nmeaINFO info;

      nmeaPARSER parser;

      FILE *file;

      char buff[2048];

      int size, it = 0;

      nmeaPOS dpos;

      file = fopen("gpslog.txt", "rb");

      if(!file)

      return -1;

      nmea_property()->trace_func = &trace;

      nmea_property()->error_func = &error;

      nmea_zero_INFO(&info);

      nmea_parser_init(&parser);

      /*

      while(1)

      {

      */

      while(!feof(file))

      {

      size = (int)fread(&buff[0], 1, 100, file);

      nmea_parse(&parser, &buff[0], size, &info);

      nmea_info2pos(&info, &dpos);

      /* 獲取 lat經(jīng)度,lon緯度,sig信號指標,fix操作模式 */

      printf("%03d, Lat: %f, Lon: %f, Sig: %d, Fix: %d\n", it++, info.lat, info.lon, info.sig, info.fix);

      }

      fseek(file, 0, SEEK_SET);

      /*

      }

      */

      nmea_parser_destroy(&parser);

      fclose(file);

      return 0;

      }

      三、應用

      1. 打開串口設備

      hGpshandle = open("/dev/ttyS2", O_RDWR);

      2. 設置串口波特率

      set_serial_param(hGpshandle, 9600, 8, 1, 'n', 0);

      3. 循環(huán)從串口讀取數(shù)據(jù),數(shù)據(jù)大小1024kb

      readlen = read(hGpshandle, tmp_buf, 1500);

      4. 數(shù)據(jù)取滿,解析gps數(shù)據(jù)

      pThis->DoParserGpsData(pArg);

      5. 從解析結果判斷gps信號質(zhì)量

      /* 0 = Invalid; 1 = Fix; 2 = Differential, 3 = Sensitive */

      if(info.sig == GPS_SIG_OK)

      6. 經(jīng)緯度數(shù)據(jù)單位轉換

      /* 經(jīng)緯度轉換為位置點 */

      nmea_info2pos(&info, &pos[it]);

      7. gps校時

      pThis->DoCheckTimeByGps(info);

      8. 計算前后2個gps坐標點之間距離

      dist = nmea_distance(&pos[it - 1], &pos[it]);

      9. 將gps坐標信息,距離寫入記錄文件

      pThis->DoWriteGpsInfoToFile(g_sCurGpsInfoPath, info, dist);

      四、gps經(jīng)緯度數(shù)據(jù)單位相關

      gps數(shù)據(jù)單位是一個需要注意的問題。

      (以下內(nèi)容摘自網(wǎng)絡)

      1. GPS串口讀取的數(shù)據(jù)格式:

      GPS 串口讀出的是 DDMM.MMMM格式

      一般上位機是 DD.DDDDDD°或 DD°MM'SS" 格式, 這兩種都可以在 GE 里直接輸入

      舉例說明: 3147.8749 (示例,經(jīng)緯度一樣) 格式為 DDMM.MMMM

      轉換成度:

      1. 度的部分直接就是31,

      2.剩下的 MM.MMMM/60=度, 所以 47.8749/60=0.797915

      則 轉換成度是 31.797915°

      轉換成度分秒:

      1. 同樣,度的部分直接就是31,

      2. 分直接是整數(shù)部分 47

      3. 秒則是 后面的 0.MMMM*60. 例子中為: 0.8749*60=52.494

      4. 則度分秒即是 31°47'52.494"


    看了“linux下串口gps應用”還想看:

    1.ftp應用實例和命令匯總

    2.關于GPS RTK技術在工程測量中的應用分析

    2806415 主站蜘蛛池模板: 加勒比色综合久久久久久久久| 亚洲精品视频久久久| 色欲色av免费观看| 国产日韩欧美综合在线| 777成影片免费观看| 天堂а√在线中文在线新版| 一本色道久久综合亚洲精品| 我的娇妻acome| 久久九九久精品国产| 日韩成人精品日本亚洲| 亚洲av日韩av无码污污网站| 欧美寡妇XXXX黑人猛交| 亚洲欧美日韩小说| 波多野结衣xxxxx在线播放| 人妻无码久久一区二区三区免费 | 曰批视频免费40分钟试看天天| 国精品无码一区二区三区左线| av免费不卡国产观看| 天天综合色天天综合| www..99557c..com| 女同学下面粉粉嫩嫩的p| 一个人hd高清在线观看| 婷婷色在线播放| yy6080理论影院旧里番| 好爽又高潮了毛片免费下载| 一级毛片不收费| 字幕网免费高清观看电影| 一本久久a久久精品亚洲| 婷婷影院在线观看| www.天天操.com| 天天5g天天爽永久免费看欧美| hdjapanhdsexxx| 在线观看亚洲免费| 97碰视频人人做人人爱欧美| 国产麻豆91网在线看| 91av在线免费视频| 国产精品国产三级国产专不∫| 男人资源在线观看| 国产破外女出血视频| 韩国福利一区二区美女视频| 国产成人久久综合热|