问题描述
环境
- osx
- esp32
- vscode
- platformio
我正在使用带有ESP32 module的this GPS module(除了上面印有“ ublox”徽标的标签非常相似-大约2年前购买的,这非常相似)。
#include <Arduino.h>
#include <HardwareSerial.h>
#include <TinyGPS++.h>
TinyGPSPlus gps;
HardwareSerial SerialGPS(2);
void setup() {
Serial.begin(115200); // RX TX
SerialGPS.begin(9600,SERIAL_8N1,16,17);
}
void loop() {
Serial.println("------------");
Serial.print("available(): ");
Serial.println(SerialGPS.available());
Serial.println("------------");
while (SerialGPS.available() > 0) {
char c = SerialGPS.read();
Serial.print(c);
gps.encode(c);
}
Serial.println();
if (gps.location.isValid()) {
Serial.print("LAT=");
Serial.println(gps.location.lat(),6);
Serial.print("LONG=");
Serial.println(gps.location.lng(),6);
Serial.print("ALT=");
Serial.println(gps.altitude.meters());
} else {
Serial.println("not valid");
}
delay(1000);
}
我把它带到外面,跑了15分钟,发现数据仍然无效。
------------
available(): 195
------------
$GPRMC,023424.00,V,051120,N*79
$GPVTG,N*30
$GPGGA,00,99.99,*65
$GPGSA,A,1,99.99*30
$GPGSV,00*79
$GPGLL,N*49
not valid
------------
available(): 195
------------
$GPRMC,023425.00,N*78
$GPVTG,*64
$GPGSA,N*48
not valid
由于我看到有来信,所以我认为TX和RX不会混淆。 我给它5V的电压(尽管不能完全确定应该是3.3v还是5v)。
如何从此模块获取有效的GPS数据?
解决方法
在我看来,GPS模块正在正确发送数据,但是没有可用的数据。它可能仍在寻找卫星。您可以尝试打印可用的数量,然后等待更长的时间:
在if
语句之前,将以下行添加到程序中:
Serial.println(gps.time.value()); // Raw time in HHMMSSCC format (u32)
Serial.println(gps.time.hour()); // Hour (0-23) (u8)
Serial.println(gps.time.minute()); // Minute (0-59) (u8)
Serial.println(gps.time.second()); // Second (0-59) (u8)
Serial.println(gps.satellites.value()); // Number of satellites in use (u32)
第一步应该是GPS模块获得正确的时间。这可能会在几分钟后发生。然后,使用中的卫星数应该增加,一旦找到合理数量的卫星,您就应该开始获得有效的结果。我倾向于阅读大约9颗人造卫星。
如果它是便宜的模块,则可能需要一段时间,尤其是从冷启动开始。