Skocz do zawartości

Niepełne dane GPS Neo-6m na wyświetlaczu oled SSD1306


Pomocna odpowiedź

Napisano (edytowany)

Witam

Podłączyłem wyświetlacz OLED SSD1306 do modułu GPS Neo 6m. Oczywiście komunikacja jest, satelity na pewno znajduje. Wiem o tym, ponieważ wyświetla niepełne informacje na monitorze.

Jest: data, godzina, minuta, sekunda, szerokość geograficzna, długość geograficzna, prędkość oraz prędkość poprawiona (skorygowana).

Nie ma: ilości znalezionych satelit oraz wysokości. Przy tych wartościach wyświetla się zero.

Dopiero zaczynam zabawę z Arduino i nie wiem czy wszystko jest dobrze wpisane w kodzie. Proszę zobaczcie, a może coś zostało pominięte. Kod jest na bibliotece TinyGPS++.h

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <Adafruit_SSD1306.h> 
Adafruit_SSD1306 display(-1);

static const int RXPin = 3, TXPin = 2;
static const uint32_t GPSBaud = 9600;

TinyGPSPlus gps;

SoftwareSerial ss(RXPin, TXPin);
 
void setup(){
  
  ss.begin(GPSBaud);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();            
}

void loop(){
  
  while (ss.available() > 0){
    gps.encode(ss.read());
    if (gps.location.isUpdated()){
      
  display.clearDisplay();
  delay(200);   
   
  display.setTextSize(1);             
  display.setTextColor(WHITE);

  display.setCursor(0,0);          
  display.print(gps.date.day()); 
  display.print(".");
  display.print(gps.date.month());
  display.print(".");
  display.print(gps.date.year());
  display.print("     ");
  display.print(gps.time.hour()+2);
  display.print(":");
  display.print(gps.time.minute());
  display.print(":");
  display.print(gps.time.second());
  
  display.setCursor(0,8);    
  display.print("Lat ");
  display.println(gps.location.lat(), 6); 
    
  display.setCursor(0,16);  
  display.print("Lng ");  
  display.println(gps.location.lng(), 6); 
      
  display.setCursor(0,24);    
  display.print("Kmph ");
  display.println(gps. speed.kmph(),1);
   
  display.setCursor(56,24); 
  display.print("Alt ");   
  display.print(gps.altitude.meters(),0); // NIE DZIAŁA - NIE WSKAZUJE WYSOKOŚCI
  //display.println(gps. speed.knots(),1); // DZIAŁA - POPRAWIONA PRĘDKOŚĆ
  
  display.setCursor(98,24); 
  display.print("Sat ");     
  display.print(gps.satellites.value()); // NIE DZIAŁA - NIE WSKAZUJE ILOSCI SATELIT
  display.display();   
    }
  }
}

Z góry dziękuję za pomoc.

Edytowano przez mmajorek01
  • Lubię! 1

Tak widziałem tą stronę internetową. W tym projekcie są pokazane te dwie dane których nie mam u siebie (bo prędkość mam). Po wgraniu tego kodu z podanej przez Ciebie strony ciągle wyświetla mi się "No Data" na wyświetlaczu. Mam ustawione prawidłowo piny RX i TX oraz mruga kontrolka od modułu GPS potwierdzająca połączenie z satelitami a i tak wyświetla się ten powyższy komunikat. Dlatego bardziej skupiłem się na tym kodzie który umieściłem w pierwszym poście.

Mam Arduino Uno. Wygodniej mi się z niego korzysta, bo jest większe. Jak już projekt działa, to wtedy wszystko przełączam na Nano i lutuje na stałe, aby były stabilne połączenia.

Cześć @mmajorek01.

Na początek spróbuj zrobić mały test

1. przepnij Tx z GPS ( u mnie kabelek niebieski ) na pin D3 w UNO, a Rx z GPS ( u mnie kabelek zielony ) na pin D4 w UNO,

2. wgraj plik z załącznika ( "Forbot_GPS.ino" ) - jest w zip-ie,

3. sprawdź co wyświetla Ci Monitor szeregowy w Arduino, jeśli brak wysokości i satelitów, to niestety musisz wyjść pod "czyste niebo" .  Uwaga - nie sugeruj się migającą LED-ką na module GPS. Powyższe możesz sprawdzić nawet bez OLED-a. 

4. jeśli będziesz miał wyświetlane na Monitorze szeregowym prawidłowe dane ( wysokość i ilość satelitów )

1837095995_FORBOTGPS.thumb.jpg.ded0123a9133ade5633303b551ed6939.jpg

to sprawdź co pokazuje OLED. Jeśli dalej nie będzie wyświetlał wysokości i satelitek to zwróć uwagę na linie 71 oraz 81 w dołączonym pliku ( "Forbot_GPS.ino" ). 

Powyższy plik przetestowany dzisiaj rano pod "czystym niebem " ( patrz print screen ) - na zewnętrznym parapecie okna nie działała ani wysokość ani satelitki.

Daj znać co wyszło po teście.

Powodzenia ... i  niech Moc będzie z Tobą !

 

FORBOT_GPS.zip

Witaj ponownie

Już przeprowadziłem ten test, o którym pisałeś. Na monitorze szeregowym niestety dalej nie złapał wysokości i ilości satelitów.  Nie ma problemu natomiast z wyświetlaniem lokalizacji daty i czasu, tu jest wszystko OK, więc na pewno łapie sygnał GPS.

Mówiłeś, aby zwrócić uwagę na linie 71 oraz 81 w dołączonym pliku. Myślałem, że te liczby po nawiasie wskazują dokładność wyświetlanych danych (ile miejsc po przecinku), ale pewnie jestem w błędzie. Możesz mi podpowiedzieć o co chodzi z tymi dwoma liniami?

Dla porównania wgrałem inny kod z inną biblioteką   #include <TinyGPS.h>   to wtedy pokazuje 10 satelit i wysokość około 130 metrów. Po tym wnioskuje, że moduł gps na pewno jest sprawny. Ale dlaczego nie pokazuje tych danych na bibliotece   #include <TinyGPS++.h> na tym kodzie, który zamieściłeś w swoim ostatnim poście.

Poniżej zamieszczam screen z Monitora szeregowego oraz zdj. monitora oled (kod z biblioteką #include <TinyGPS.h>  )

Z góry dziękuję za pomoc

ekran com.JPG

screeen.JPG

Cześć.

W tych 2 linijkach są "odesłania" do odpowiedniej pozycji w kodach NMEA ( m.in "GPRMC", "GPGGA", "GNRMC", "GNGGA" ) które są zaszyte w bibliotece TINYGPS++ dla wysokości i ilości satelitów. To tak w baaardzo wielkim skrócie, bo to wielki temat-rzeka. Więcej informacji możesz doczytać  na stronach http://arduiniana.org/libraries/tinygpsplus/ oraz http://aprs.gids.nl/nmea/#rmb

Wykaz kodów NMEA masz w załączniku. Dodatkowo przesyłam Ci bibliotekę TINYGPS której używałem z dołączonym wcześniej plikiem "Forbot_GPS.ino" - możesz spróbować ją przetestować. 

Jeśli dobrze widzę, to chyba testowałeś na parapecie - u mnie była dokładnie taka sama sytuacja jak opisujesz ( pozycja, data, czas - OK, wysokość i satelity - NOK ). Dopiero wyjście poza dom dało prawidłowe wyniki. Jeśli nie masz laptopa to jest mały problem z dostępem "czystego nieba" 😔 i przetestowaniem GPS-a.

Super, że udało Ci się zrobić duży krok do przodu 💪

NMEA Reference Manual1.pdf TinyGPSPlus-master.zip

Na początku przeprowadzałem test na balkonie. I rzeczywiście na balkonie, na kodzie "Forbot_GPS.ino" nie łapał ani wysokości, ani ilości satelit. Jak już wyszedłem pod gołe niemo to na monitorze szeregowym widać 6 satelit i 72 metry wysokości. Dziwne jest to, że jeśli się przemieszczałem z laptopem to te wartości się nie zmieniały były ciągle te same, natomiast współrzędne geograficzne oraz czas ulegały zmianie (widać to na screen-ie).

Chciałbym jednak jeszcze nawiązać do tego kodu, który zamieściłem na początku postu. Po wgraniu go do Arduino Uno nadal nie pokazuje na OLED wysokości i satelit. Nie zależnie czy jestem na balkonie, czy pod gołym niebem. Może w kodzie coś jest źle wpisane?

satelity jest.JPG

Jeśli chodzi o ten kod, który jest zamieszczony w pierwszym poście to nawet na świeżym powietrzu, pod gołym niebem nie pokazuje mi satelit i wysokości. To dziwne, bo  wydaje się on banalnie prosty w swoim zapisie i dość regularny. Pozostałe wartości działają i zmieniają się sukcesywnie wraz ze zmianą położenia modułu GPS, a tamte ciągle pokazują "zero". Nie mam pojęcia dlaczego. W sumie głównie chodzi mi o prędkość, bo chcę ten moduł zamontować w samochodzie, ale jak bym miał więcej danych to na pewno nie zaszkodzi. Co mogę zmienić w kodzie, aby to ruszyło? Z góry dzięki za pomoc.

 

  • Lubię! 1

Cześć jeszcze raz 😀

Spróbuj sketch z załącznika. Sprawdzałem go na Nano ( Twoim docelowym module ) i wydaje się, że sprawuje się OK. Przy pierwszym uruchomieniu, po kilku sekundach ( ok. 5-10s ) na wyświetlaczu powinno się wyświetlać "WAIT..." tak długo aż LED na GPS-ie zacznie pulsować. Wtedy powinny już pojawić się wszystkie dane jakie udało się upakować na tym maleństwie - literki i cyferki są "tycie"...

Gdybyś użył Nano, to przy wgrywaniu trzeba wybrać "Procesor ATmega238P (Old Bootloader)" - tak przynajmniej miałem w IDE ARDUINO 1.8.19. Myślę, że kod powinien też zadziałać na UNO. Aha - piny Tx i Rx od GPS-u są zmienione na 2 oraz 3.

Powodzenia !

 

FORBOT_GPS_V1.ZIP

  • Pomogłeś! 1

Witaj ponownie!

Właśnie wgrałem sketch-a na Arduino Uno. Jest tak jak pisałeś. Najpierw wyświetla "Wait...", a potem jak złapie sygnał pojawiają się dane. To mały  wyświetlacz, więc i dane są małe. Widzę, że są uszeregowane równo w dwóch kolumnach, po 4 z każdej strony. Najważniejsze, że wszystko działa tak jak powinno, włącznie z wysokością i ilością satelit. Dane sukcesywnie się zmieniają, także działa idealnie. Bardzo DZIĘKUJĘ za pomoc. Projekt działa, więc lutuje i idę umieścić go w samochodzie. Jeszcze raz wielkie dzięki.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...