我看过很多关于此主题的教程,但是我无法确定我从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");
[令我惊讶的是,在串行监视器中,我在开始时仅收到此消息一次,此后我得到了最后一个注释掉的输出(lon
和lat
都等于0.0
)。下一步是在不编码的情况下读取数据。
我注意到的是,大多数消息都带有类似,,,,
或结尾不完整的内容。输出中的某些行是前一行的不完整部分。我在在线解码器中粘贴了几条消息,但出现错误,告诉我格式是错误的(我是新手,因此查看它并不能告诉我有关其正确性的任何信息。)
基本上是
if(gps.encode(d))
{
...
}
几乎总是执行失败。偶尔我会在这里和那里得到正确的消息(例如$GPGLL
),但总的来说,这比实际的可靠数据检索更可喜。
我读过波特率很重要,但是到目前为止我发现应该使用9600。
知道这是怎么回事吗?我应该为Serial.begin(...)
尝试其他波特率吗?我确实尝试过使用该值,并将其提升会产生根本无法读取的垃圾数据。因此,至少我确信波特率会影响数据流的完整性和结构完整性。
[请注意,这是在我自己将引脚接头焊接到的“合适的” Arduino Uno和Arduino Nano上发生的。
我看过很多关于此主题的教程,但是我无法确定我从GT-U7接收到的所有消息中大部分(> 90%)是不完整的,该消息是基于ublox NEO-7(尽管...
波特值必须设置为与模块NEO-7
相同的值。据我所知,9600是它的默认值,您不需要使用任何其他值。但是您可以准确检查为模块设置了什么值。
数据的不完整本质实际上是正常的。至少在开始时或每当模块失去GPS定位并尝试获取新的GPS定位。