Получите GPS-координаты с помощью беспроводного трекера Heltec на базе Arduino
Я купил беспроводной трекер Heltec Arduino.
Я хочу получить GPS-позицию. Я взял оригинальный пример «GPSDisplayOnTFT» из IDE (я внес несколько изменений, потому что оригинальный код у меня не работал).
Мой экран всегда показывает:
peek: 0
LAT: 0.00
valid: 0
Я добавил комментарий к коду, чтобы показать строку.
Это мой код:
#include "Arduino.h"
#include "HT_st7735.h"
#include "HT_TinyGPS++.h"
TinyGPSPlus GPS;
HT_st7735 st7735;
#define VGNSS_CTRL 3
void GPS_test(void)
{
Serial.println("GPS 1");
Serial1.begin(9600,SERIAL_8N1,33,34);
Serial.println("GPS_test");
delay(1000);
while(1)
{
st7735.st7735_fill_screen(ST7735_BLACK);
if(Serial1.available()>0)
{
if(Serial1.peek()!='\n')
{
GPS.encode(Serial1.read());
String peek = "peek: " + (String)GPS.encode(Serial1.read());
Serial.println(peek);
st7735.st7735_write_str(0, 0, peek);
}
else
{
Serial1.read();
if(GPS.time.second()==0)
{
Serial.println("second==0");
continue;
}
st7735.st7735_fill_screen(ST7735_BLACK);
st7735.st7735_write_str(0, 0, (String)"GPS_test");
String time_str = (String)GPS.time.hour() + ":" + (String)GPS.time.minute() + ":" + (String)GPS.time.second()+ ":"+(String)GPS.time.centisecond();
st7735.st7735_write_str(0, 20, time_str);
Serial.println(time_str);
String latitude = "LAT: " + (String)GPS.location.lat();
st7735.st7735_write_str(0, 40, latitude);
Serial.println(latitude);
String longitude = "LON: "+ (String)GPS.location.lng();
st7735.st7735_write_str(0, 60, longitude);
Serial.println(longitude);
delay(5000);
while(Serial1.read()>0);
}
Serial.println("***************************");
Serial.println(Serial1.peek());
Serial.println(Serial1.read());
Serial.println(GPS.location.lat());
st7735.st7735_write_str(0, 20, "LAT: " + (String)GPS.location.lat());
//ПРИМЕЧАНИЕ: всегда показывает «0»
st7735.st7735_write_str(0, 40, "valid: " + (String)GPS.satellites.isValid());
Serial.println("*********** fin ***********");
}
else{
Serial.println("Serial 1 no available");
st7735.st7735_fill_screen(ST7735_BLACK);
st7735.st7735_write_str(10, 50, (String)"Unavailable");
delay(5000);
}
Serial.println("while 1");
delay(5000);
}
}
void setup(){
delay(100);
Serial.begin(115200);
Serial.println("setup 1");
pinMode(VGNSS_CTRL,OUTPUT);
digitalWrite(VGNSS_CTRL,LOW);
st7735.st7735_init();
st7735.st7735_fill_screen(ST7735_BLACK);
st7735.st7735_write_str(20, 10, (String)"Loading ...");
st7735.st7735_write_str(20, 50, (String)"GPS_test");
Serial.println("setup 2");
GPS_test();
Serial.println("setup 3");
}
void loop(){
Serial.println("loop 1");
delay(3000);
Serial.println("loop 2");
}
Я не уверен, нужно ли мне подключать антенну к модулю GNSS.
Могу ли я что-то распечатать в журналах, чтобы получить больше информации?
========= ОТРЕДАКТИРОВАНО =========
Это вывод последовательного монитора:
01:13:43.526 -> GPS_test started
01:18:12.693 -> setup 1
01:18:12.871 -> setup 2
01:18:12.871 -> GPS 1
01:18:12.904 -> GPS_test
01:18:14.201 -> peek: 0
01:18:14.232 -> ***************************
01:18:14.232 -> 106
01:18:14.232 -> 106
01:18:14.232 -> 0.00
01:18:14.329 -> *********** fin ***********
01:18:14.329 -> while 1
01:18:19.610 -> peek: 0
01:18:19.685 -> ***************************
01:18:19.685 -> 79
01:18:19.685 -> 79
01:18:19.685 -> 0.00
01:18:19.738 -> *********** fin ***********
01:18:19.738 -> while 1
01:18:25.036 -> peek: 0
@Jaime Roman, 👍0
2 ответа
Многие COTS GNSS модули, когда они не заблокированы, отправляют NMEA сообщение только с запятыми, где ожидаются широта и долгота.
UC6580, используемый в Heltec Wireless Tracker, по-видимому, использует формат данных NMEA 0183.
Поскольку сообщения NMEA не отображаются в опубликованном коде, предполагается, что некоторые или все они находятся в библиотеке TinyGPSPlus, используемой в приведенном выше коде.
Если мы перейдем в учетную запись TinyGPSPlus github.com, то увидим пример файла Arduino INO. Этот пример отслеживает несколько спутников и сообщает «Количество спутников, высота, азимут и отношение сигнал/шум». Эти данные обычно доступны еще до того, как модуль GNSS будет заблокирован (выдавая значения широты и долготы). Поэтому они полезны при исследовании проблемы.
Измените вопрос, когда появится больше информации. Сейчас это звучит как плохой модуль GNSS, плохая антенна GNSS, плохое подключение антенны или вы находитесь в помещении, где не видите спутники GNSS.
#define VGNSS_CTRL 3
На основе примера кода со страницы Heltec Github. Контакт для VGNSS_Ctrl
— это контакт 37 вместо контакта 3, как показано в вашем коде.
Дальнейшая проверка принципиальной схемы для Heltec Wireless Tracker V1.0 подтвердила, что VGNSS_Ctrl
действительно находится на контакте 37, который используется для активации VDD_GNSS (т. е. для включения питания для модуля GPS).
- GPS-модуль uBlox Neo 6M не отвечает
- Отправка команд PUBX на плату GPS (Ublox NEO-6M) через SoftwareSerial
- Arduino SoftwareSerial - не удается получить данные от модуля NEO 6M-GPS
- TinyGPS не дает долготу, широту и другие данные
- последовательная передача данных на GPS-экране duinopeak
- Интерфейс U-Blox Neo M8N GNSS-GPS с ESP32-TTGO-T-CALL
- Почему HDOP в TinyGPS++ меньше 1?
- Отправка данных GPS через модуль WiFi