【问题标题】:GPS module on ESP32 not giving valid logsESP32 上的 GPS 模块未提供有效日志
【发布时间】:2020-11-05 03:43:07
【问题描述】:

环境

  • osx
  • esp32
  • vscode
  • platformio

我正在使用ESP32 modulethis 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 模块正在正确发送数据,但没有任何可用数据。它可能仍在寻找卫星。您可以尝试打印可用的数量,然后等待更长的时间。如果它是一个更便宜的模块,则可能需要一段时间,尤其是从冷启动开始。

标签: arduino gps esp32 arduino-c++


【解决方案1】:

在我看来,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 颗卫星。

如果它是更便宜的模块,则可能需要一段时间,尤其是从冷启动开始。

【讨论】:

  • 是的,这是冷启动。我晚上又试了20多分钟,我确实得到了GPS有效数据。因为我没有保留日志不知道花了多少时间,但是我看了一篇文章说如果是冷启动至少需要12.5分钟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
相关资源
最近更新 更多