基于ublox 7的GPS模块-在大多数情况下,使用Arduino从板上的UART引脚检索数据时,数据不完整/格式不正确

问题描述 投票:0回答:2

我看过很多关于此主题的教程,但是我无法确定我从GT-U7接收到的所有消息中大部分(> 90%)是不完整的,该消息是基于ublox NEO-7(虽然令人困惑的亚马逊商店中的商品描述为NEO-6,但评论以及u中心状态为NEO-7):

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS95Q3R2dC5qcGcifQ==” width =“ 400” height =“ 400”>

这里是代码:

#include <SoftwareSerial.h> 
#include <TinyGPS.h>

float lat = 0.0,lon = 0.0; // create variable for latitude and longitude object  
SoftwareSerial gpsSerial(10,11);   //rx,tx 
TinyGPS gps; // create gps object 

void setup(){ 
  Serial.begin(9600); // connect serial 
  gpsSerial.begin(9600); // connect gps sensor 
} 
void loop(){ 
  if (!gpsSerial.available()) Serial.println("GPS device not available");

  while(gpsSerial.available()){ // check for gps data 
    char d = gpsSerial.read();
    Serial.print(d);
    if(gps.encode(d))// encode gps data 
    {
      Serial.println("Encoding data successful");

      gps.f_get_position(&lat,&lon); // get latitude and longitude 

      // display position
      Serial.println("----------------------------------");
      Serial.println("Position: "); 
      Serial.print("\tlat : "); 
      Serial.println(lat,6); 
      Serial.print("\tlong : "); 
      Serial.println(lon,6);
    }
  }

  Serial.println();

  /*
  String latitude = String(lat,6); 
  String longitude = String(lon,6); 
  Serial.println(latitude+";"+longitude);
  */
  delay(1000); 
}

u-center可以正常使用该设备,该设备可以通过USB电缆连接到笔记本电脑。但是,在串行通信方面(当然USB电缆已断开!)看起来并不那么亮。

起初我以为该模块根本不起作用。但是,LED闪烁(每秒一次)表示位置固定。而且u-center能够提取所有数据(卫星,速度,经度和纬度,UTC时间等)的事实也告诉我。

我在上面的代码中,我注释了整个循环,并添加了if

if (!gpsSerial.available()) Serial.println("GPS device not available");

[令我惊讶的是,在串行监视器中,我在开始时仅收到此消息一次,此后我得到了最后一个注释掉的输出(lonlat都等于0.0)。下一步是在不编码的情况下读取数据。

我注意到的是,大多数消息都带有类似,,,,或结尾不完整的内容。输出中的某些行是前一行的不完整部分。我在在线解码器中粘贴了几条消息,但出现错误,告诉我格式是错误的(我是新手,因此查看它并不能告诉我有关其正确性的任何信息。)

基本上是

if(gps.encode(d))
{
    ...
}

几乎总是执行失败。偶尔我会在这里和那里得到正确的消息(例如$GPGLL),但总的来说,这比实际的可靠数据检索更可喜。

我读过波特率很重要,但是到目前为止我发现应该使用9600。

知道这是怎么回事吗?我应该为Serial.begin(...)尝试其他波特率吗?我确实尝试过使用该值,并将其提升会产生根本无法读取的垃圾数据。因此,至少我确信波特率会影响数据流的完整性和结构完整性。

[请注意,这是在我自己将引脚接头焊接到的“合适的” Arduino Uno和Arduino Nano上发生的。

我看过很多关于此主题的教程,但是我无法确定我从GT-U7接收到的所有消息中大部分(> 90%)是不完整的,该消息是基于ublox NEO-7(尽管...

arduino gps uart
2个回答
0
投票

波特值必须设置为与模块NEO-7相同的值。据我所知,9600是它的默认值,您不需要使用任何其他值。但是您可以准确检查为模块设置了什么值。


0
投票

数据的不完整本质实际上是正常的。至少在开始时或每当模块失去GPS定位并尝试获取新的GPS定位。

© www.soinside.com 2019 - 2024. All rights reserved.