ESP32 上的 GPS 模块未提供有效日志
GPS module on ESP32 not giving valid logs
环境
- osx
- esp32
- vscode
- 平台
我正在研究 ESP32 module with 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,023424.00,,,,,0,00,99.99,,,,,,*65
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,023424.00,V,N*49
not valid
------------
available(): 195
------------
$GPRMC,023425.00,V,,,,,,,051120,,,N*78
$GPVTG,,,,,,,,,N*30
$GPGGA,023425.00,,,,,0,00,99.99,,,,,,*64
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,023425.00,V,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 颗卫星的读数。
如果是更便宜的模块,可能需要一段时间,尤其是冷启动时。
环境
- osx
- esp32
- vscode
- 平台
我正在研究 ESP32 module with 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,023424.00,,,,,0,00,99.99,,,,,,*65
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,023424.00,V,N*49
not valid
------------
available(): 195
------------
$GPRMC,023425.00,V,,,,,,,051120,,,N*78
$GPVTG,,,,,,,,,N*30
$GPGGA,023425.00,,,,,0,00,99.99,,,,,,*64
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,1,1,00*79
$GPGLL,,,,,023425.00,V,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 颗卫星的读数。
如果是更便宜的模块,可能需要一段时间,尤其是冷启动时。