极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 55023|回复: 13

ublox GPS采用TinyGPS_UBX库无法工作的问题,谢谢

[复制链接]
发表于 2013-12-20 23:29:01 | 显示全部楼层 |阅读模式
本人搞了个ubloxGPS,连接到arduino UNO板子上,红线接5v,黑线GND,绿线到2,黄线3。采用了TinyGPS_UBX库的EXAMPLE,可正常编译和load,可是怎么都只显示如下内容。请高手诊断。先谢过!
time: 198:96:72
latitude: 100.00000
longitude: 100.00000
altitude: -0 m
speed: 42949672.00 km/h
vert. speed: -1 cm/s
bearing: 99999
satellites: 99
has fix: 0
fix quality: 0
fix age: 4294967295
  1. // TinyGPS test for uBlox GPS proprietary PUBX format
  2. // tested on Arduino 0022 and 1.0.1
  3. // x-f, 2012

  4. #include <avr/pgmspace.h>

  5. // latest (former NewSoftSerial), not the one supplied with Arduino 0022
  6. // SoftwareSerial's buffer size must be increased in SoftwareSerial.h:
  7. // #define _SS_MAX_RX_BUFF 128 // RX buffer size
  8. #include <SoftwareSerial.h>
  9. #include <TinyGPS_UBX.h>

  10. SoftwareSerial GPS_Serial( 2,3);
  11. TinyGPS gps;

  12. #define DEBUG true

  13. byte gps_hour, gps_minute, gps_second;
  14. long gps_lat, gps_lon;
  15. unsigned long gps_fix_age;


  16. // no need to store these in the RAM anyway
  17. static char str_buffer[25];
  18. prog_char GPSstr_poll[] PROGMEM = "$PUBX,00*33";
  19. prog_char GPSstr_setup1[] PROGMEM = "$PUBX,40,ZDA,0,0,0,0*44";
  20. prog_char GPSstr_setup2[] PROGMEM = "$PUBX,40,GLL,0,0,0,0*5C";
  21. prog_char GPSstr_setup3[] PROGMEM = "$PUBX,40,VTG,0,0,0,0*5E";
  22. prog_char GPSstr_setup4[] PROGMEM = "$PUBX,40,GSV,0,0,0,0*59";
  23. prog_char GPSstr_setup5[] PROGMEM = "$PUBX,40,GSA,0,0,0,0*4E";
  24. prog_char GPSstr_setup6[] PROGMEM = "$PUBX,40,GGA,0,0,0,0*5A";
  25. prog_char GPSstr_setup7[] PROGMEM = "$PUBX,40,RMC,0,0,0,0*47";
  26. PROGMEM const char *str_table[] = {
  27.   GPSstr_poll, GPSstr_setup1, GPSstr_setup2, GPSstr_setup3,
  28.   GPSstr_setup4, GPSstr_setup5, GPSstr_setup6, GPSstr_setup7
  29. };


  30. void setup() {
  31.   Serial.begin(9600);

  32.   GPS_setup();
  33.   
  34.   // if you're using Arduino 1.0, you can have
  35.   // Serial.println(F("we are go!"));
  36.   // to print text strings from flash memory
  37.   Serial.println("we are go!");
  38. }

  39. void loop() {

  40.   GPS_poll();

  41.   gps.crack_time(&gps_hour, &gps_minute, &gps_second, &gps_fix_age);
  42.   gps.get_position(&gps_lat, &gps_lon, &gps_fix_age);

  43.   char time[8];
  44.   sprintf(time, "%02d:%02d:%02d", gps_hour, gps_minute, gps_second);

  45.   Serial.println();
  46.   Serial.print("time: "); Serial.println(time);
  47.   //Serial.print("latitude: "); Serial.println(gps_lat, DEC);
  48.   //Serial.print("longitude: "); Serial.println(gps_lon, DEC);
  49.   Serial.print("latitude: "); Serial.println(gps_lat/100000.0, 5);
  50.   Serial.print("longitude: "); Serial.println(gps_lon/100000.0, 5);
  51.   Serial.print("altitude: "); Serial.print(gps.altitude()/100.0, 0); Serial.println(" m");
  52.   //Serial.print("speed: "); Serial.print(gps.speed()/100.0, 0); Serial.println(" km/h");
  53.   Serial.print("speed: "); Serial.print(gps.f_speed_kmph(), 2); Serial.println(" km/h");
  54.   Serial.print("vert. speed: "); Serial.print(gps.vspeed(), DEC); Serial.println(" cm/s");
  55.   Serial.print("bearing: "); Serial.println(gps.course()/100, DEC);
  56.   Serial.print("satellites: "); Serial.println(gps.sats(), DEC);
  57.   Serial.print("has fix: "); Serial.println(gps.has_fix(), DEC);
  58.   Serial.print("fix quality: "); Serial.println(gps.fix_quality(), DEC);
  59.   Serial.print("fix age: "); Serial.println(gps_fix_age, DEC);
  60.   Serial.println("------------");

  61.   delay(5000);
  62. }


  63. void GPS_setup() {
  64.   GPS_Serial.begin(9600);
  65.   // switch baudrate to 4800 bps
  66.   //GPS_Serial.println("$PUBX,41,1,0007,0003,4800,0*13");
  67.   //GPS_Serial.begin(4800);
  68.   //GPS_Serial.flush();
  69.   
  70.   delay(500);
  71.   
  72.   // turn off all NMEA sentences for the uBlox GPS module
  73.   // ZDA, GLL, VTG, GSV, GSA, GGA, RMC
  74.   GPS_Serial.println(strcpy_P(str_buffer, (char*)pgm_read_word(&str_table[1])));
  75.   GPS_Serial.println(strcpy_P(str_buffer, (char*)pgm_read_word(&str_table[2])));
  76.   GPS_Serial.println(strcpy_P(str_buffer, (char*)pgm_read_word(&str_table[3])));
  77.   GPS_Serial.println(strcpy_P(str_buffer, (char*)pgm_read_word(&str_table[4])));
  78.   GPS_Serial.println(strcpy_P(str_buffer, (char*)pgm_read_word(&str_table[5])));
  79.   GPS_Serial.println(strcpy_P(str_buffer, (char*)pgm_read_word(&str_table[6])));
  80.   GPS_Serial.println(strcpy_P(str_buffer, (char*)pgm_read_word(&str_table[7])));

  81.   delay(500);
  82. }

  83. // request uBlox to give fresh data
  84. boolean GPS_poll() {
  85.   //GPS_Serial.println("$PUBX,00*33");
  86.   GPS_Serial.println(strcpy_P(str_buffer, (char*)pgm_read_word(&str_table[0])));
  87.   delay(300);
  88.   unsigned long starttime = millis();
  89.   while (true) {
  90.     if (GPS_Serial.available()) {
  91.       char c = GPS_Serial.read();
  92.       #if DEBUG
  93.         Serial.print(c);
  94.       #endif
  95.       if (gps.encode(c))
  96.         return true;
  97.     }
  98.     // that's it, can't wait any longer
  99.     // i have short attention span..
  100.     if (millis() - starttime > 1000) {
  101.       #if DEBUG
  102.         Serial.println("timeout");
  103.       #endif
  104.       break;
  105.     }
  106.   }
  107.   return false;
  108. }
复制代码
回复

使用道具 举报

发表于 2013-12-20 23:43:25 | 显示全部楼层
1. GPS在室内无法定位;要拿到户外开阔地,或窗户外,尽量没有楼遮挡信号;
2. 首次定位的时间要比较长,有点耐心;
3. 一定要GPS的tx接arduino的rx;GPS的rx接不接无所谓;如果不确定哪个是tx,哪个是rx。可以交换下接线。
4. GPS的波特率也可能会是4800;
5. 最好还是先把GPS接TTL转USB的模块,开串口调试助手看下GPS的输出信息。搞清楚那个线是GPS的TX,GPS的波特率是多少。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-20 23:50:20 | 显示全部楼层
i7456 发表于 2013-12-20 23:43
1. GPS在室内无法定位;要拿到户外开阔地,或窗户外,尽量没有楼遮挡信号;
2. 首次定位的时间要比较长,有 ...

非常感谢你的回复。
我把gps放在窗外测试的,同样条件同一个GPS用ardupilot自驾仪是可以获得位置的,但是接到uno板子上就不行了。
rx tx我也确认过,反复了好几次了,还是不行啊。
波特率也改过,不行。
哎啊,不知怎么搞啊。
回复 支持 反对

使用道具 举报

发表于 2013-12-21 00:00:17 | 显示全部楼层
非线性动态逆 发表于 2013-12-20 23:50
非常感谢你的回复。
我把gps放在窗外测试的,同样条件同一个GPS用ardupilot自驾仪是可以获得位置的,但是 ...

换下IDE试试
// tested on Arduino 0022 and 1.0.1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-21 00:17:51 | 显示全部楼层
i7456 发表于 2013-12-21 00:00
换下IDE试试
// tested on Arduino 0022 and 1.0.1

换了个1.01的,还是搞不定啊,崩溃。
回复 支持 反对

使用道具 举报

发表于 2013-12-21 09:05:49 | 显示全部楼层
你先用UBLOX的测试软件看一下,该模块目前是什么数据格式吧。。。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-22 23:36:41 | 显示全部楼层
自己顶一下啊
回复 支持 反对

使用道具 举报

发表于 2014-4-29 15:29:53 | 显示全部楼层
楼上的gps库哪儿来的,能不能分享一下。
回复 支持 反对

使用道具 举报

发表于 2014-7-21 14:41:50 | 显示全部楼层
最近也在玩ublox的gps,看到这个帖子,不知道楼主解决了没有。
我顺利使用了这个库。
一。请注意代码中的这一段重要注释。
// latest (former NewSoftSerial), not the one supplied with Arduino 0022
// SoftwareSerial's buffer size must be increased in SoftwareSerial.h:
// #define _SS_MAX_RX_BUFF 128 // RX buffer size
这句话要求在SoftwareSerial.h里面,把原来的接受缓存从64改到128。

二。有玩家提醒注意RX,TX是对的,你可以交换倒一下。
三。冷淡上电后,有几分钟的启动时间,你别着急折腾,放着别动,等到模块上红灯闪(gps定位,我的模块是红灯)。
回复 支持 反对

使用道具 举报

发表于 2014-7-31 00:09:37 | 显示全部楼层
本帖最后由 Andy20000729 于 2014-7-31 11:23 编辑

我试了一下,同问题
回复 支持 反对

使用道具 举报

发表于 2014-7-31 11:32:08 | 显示全部楼层
这就是那个库

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-5-27 23:19:51 | 显示全部楼层
楼主你成功了么,我用别人的示例代码都没问题,用着个TinyGPS的库跟你是一样的问题。
我还测试了新的TinyGPSplus库,也不行
回复 支持 反对

使用道具 举报

发表于 2015-5-28 00:21:14 | 显示全部楼层
本帖最后由 frankpian 于 2015-5-28 00:22 编辑

刚刚用tinygps++库成功了,不知道为毛,我把软串口改成硬串口就成功了
  1. #include <TinyGPS++.h>

  2. TinyGPSPlus gps;


  3. void setup() {
  4. Serial.begin(9600);
  5. Serial1.begin(9600);

  6. }

  7. void loop() {
  8. while (Serial1.available()>0)
  9.   if (gps.encode(Serial1.read()))
  10.     displayInfo();
  11.   
  12. if (millis() > 5000 && gps.charsProcessed() < 10)
  13.   {
  14.     Serial.println(F("No GPS detected: check wiring."));
  15.     while(true);
  16.   }  
  17. }

  18. void displayInfo()
  19. {
  20.   Serial.print(F("Location: "));
  21.   if (gps.location.isValid())
  22.   {
  23.     Serial.print(gps.location.lat(), 6);
  24.     Serial.print(F(","));
  25.     Serial.print(gps.location.lng(), 6);
  26.   }
  27.   else
  28.   {
  29.     Serial.print(F("INVALID"));
  30.   }

  31.   Serial.print(F("  Date/Time: "));
  32.   if (gps.date.isValid())
  33.   {
  34.     Serial.print(gps.date.month());
  35.     Serial.print(F("/"));
  36.     Serial.print(gps.date.day());
  37.     Serial.print(F("/"));
  38.     Serial.print(gps.date.year());
  39.   }
  40.   else
  41.   {
  42.     Serial.print(F("INVALID"));
  43.   }

  44.   Serial.print(F(" "));
  45.   if (gps.time.isValid())
  46.   {
  47.     if (gps.time.hour() < 10) Serial.print(F("0"));
  48.     Serial.print(gps.time.hour());
  49.     Serial.print(F(":"));
  50.     if (gps.time.minute() < 10) Serial.print(F("0"));
  51.     Serial.print(gps.time.minute());
  52.     Serial.print(F(":"));
  53.     if (gps.time.second() < 10) Serial.print(F("0"));
  54.     Serial.print(gps.time.second());
  55.     Serial.print(F("."));
  56.     if (gps.time.centisecond() < 10) Serial.print(F("0"));
  57.     Serial.print(gps.time.centisecond());
  58.   }
  59.   else
  60.   {
  61.     Serial.print(F("INVALID"));
  62.   }

  63.   Serial.println();
  64. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2021-1-14 20:05:08 | 显示全部楼层
frankpian 发表于 2015-5-28 00:21
刚刚用tinygps++库成功了,不知道为毛,我把软串口改成硬串口就成功了

我是库一直是灰色的,但是上面又显示库在里面加载成功,是一个原因吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 10:04 , Processed in 0.051037 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表