Модуль GPS на ESP32 не дает действительных журналов

Среды

  • OSX
  • esp32
  • vscode
  • Platformio

Я работаю над модулем ESP32 с этот модуль GPS (очень похожий, за исключением того, что у меня есть с логотипом 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 перепутались. Я даю ему 5 В (хотя не совсем уверен, должно ли оно быть 3,3 В или 5 В).

Как я могу получить действительные данные GPS, поступающие от этого модуля?


person kukrt    schedule 05.11.2020    source источник
comment
Мне кажется, что модуль GPS отправляет данные правильно, но их нет. Он все еще может искать спутники. Вы можете попробовать распечатать количество доступных и просто подождать дольше. Если это более дешевый модуль, это может занять некоторое время, особенно при холодном запуске.   -  person Oliver Mason    schedule 05.11.2020


Ответы (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 спутниками.

Если это более дешевый модуль, это может занять некоторое время, особенно при холодном запуске.

person Oliver Mason    schedule 05.11.2020
comment
Да, это был холодный старт. Я попробовал это снова ночью более 20 минут, и я действительно получил действительные данные GPS. Поскольку я не вел журналы, я не знаю, сколько времени это заняло, но я прочитал статью, в которой говорится, что это займет не менее 12,5 минут, если это был холодный запуск. - person kukrt; 06.11.2020