logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Kod do obsługi GPS NEO 6M z TinyGPSPlus, wyświetlanie szer. i dług. geograficznej

CC_PL 04 Maj 2023 21:36 2271 15
  • #1 20566891
    CC_PL
    Poziom 13  
    Posty: 497
    Pomógł: 4
    Ocena: 57
    Mam poniższy kod:

    
    #include <TinyGPSPlus.h>
    #include <SoftwareSerial.h>
    
    static const int RXPin = 4, TXPin = 3;
    static const uint32_t GPSBaud = 4800;
    
    TinyGPSPlus gps;
    SoftwareSerial ss(RXPin, TXPin);
    
    void setup()
    {
      Serial.begin(115200);
      ss.begin(GPSBaud);
    }
    
    
    char buffer[25];
    
    void showData()
    {
    
      if (gps.location.isValid() && (gps.location.age() < 2000))
       {
       sprintf(buffer, "LATITUDE-%f", gps.location.lat());
       Serial.println(buffer);
    
       sprintf(buffer, "LONGITUDE-%f", gps.location.lng());
       Serial.println(buffer);
    }
    
      if (millis() > 5000 && gps.charsProcessed() < 10)
      {
        Serial.println(F("No GPS detected: check wiring."));
        while(true);
      }
    }
    


    Ale odpalenie funkcji ShowData(); nie daje porządanych efektów. Jaki może być powód tego? Nie dostaję współrzędnych GPS...

    Z góry dzięki za podpowiedzi!
  • #2 20566935
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1464
    CC_PL napisał:
    Ale odpalenie funkcji ShowData(); nie daje porządanych efektów.



    Nie jest nikogo obowiązkiem zastanawiać się jakie są wg ciebie "pożądane efekty" - i jakie są te "niepożądane"
    Masz jakąś diagnostykę, ale my mamy się domyślać.

    CC_PL napisał:
    Mam poniższy kod:


    Ta formuła zwykle znaczy "zarypałem kod gdzieś z netu". Dzięki za szczerość.

    ps. nie widzę f. loop()
  • #3 20566948
    CC_PL
    Poziom 13  
    Posty: 497
    Pomógł: 4
    Ocena: 57
    Pożądane efekty to wyświetlenie współrzędnych LAT LNG :) A przykład to prostu przykład do biblioteki.

    loop() nie ma bo wkleiłem tylko część kodu. Jak odpalam przykład z Git Hub to ciągle dostaje:

    No GPS detected: check wiring.

    Przewody sprawdzałem wiele razy :)
  • Pomocny post
    #4 20566991
    Konto nie istnieje
    Poziom 1  
  • #5 20567002
    CC_PL
    Poziom 13  
    Posty: 497
    Pomógł: 4
    Ocena: 57
    #include <TinyGPSPlus.h>
    
    #define RXD2 16
    #define TXD2 17
    static const uint32_t GPSBaud = 9600;
    
    
    TinyGPSPlus gps;
    
    void setup() {
      Serial.begin(115200);
      Serial2.begin(GPSBaud, SERIAL_8N1, RXD2, TXD2);
    }
    
    void loop()
    {
    
      while (Serial2.available() > 0)
    
        if (gps.encode(Serial2.read()))
    
          displayInfo();
    
     
    
      if (millis() > 5000 && gps.charsProcessed() < 10)
    
      {
    
        Serial.println(F("No GPS detected: check wiring."));
    
        while(true);
    
      }
    
    }
    
    void displayInfo()
    
    {
    
      Serial.print(F("Location: "));
    
      if (gps.location.isValid())
    
      {
    
        Serial.print(gps.location.lat(), 6);
    
        Serial.print(F(","));
    
        Serial.print(gps.location.lng(), 6);
    
      }
    
      else
    
      {
    
        Serial.print(F("INVALID"));
    
      }
    
      Serial.print(F("  Date/Time: "));
    
      if (gps.date.isValid())
    
      {
    
        Serial.print(gps.date.month());
    
        Serial.print(F("/"));
    
        Serial.print(gps.date.day());
    
        Serial.print(F("/"));
    
        Serial.print(gps.date.year());
    
      }
    
      else
    
      {
    
        Serial.print(F("INVALID"));
    
      }
    
      Serial.print(F(" "));
    
      if (gps.time.isValid())
    
      {
    
        if (gps.time.hour() < 10) Serial.print(F("0"));
    
        Serial.print(gps.time.hour());
    
        Serial.print(F(":"));
    
        if (gps.time.minute() < 10) Serial.print(F("0"));
    
        Serial.print(gps.time.minute());
    
        Serial.print(F(":"));
    
        if (gps.time.second() < 10) Serial.print(F("0"));
    
        Serial.print(gps.time.second());
    
        Serial.print(F("."));
    
        if (gps.time.centisecond() < 10) Serial.print(F("0"));
    
        Serial.print(gps.time.centisecond());
    
      }
      else
    
      {
        Serial.print(F("INVALID"));
    
      }
    
      Serial.println("OK");
    
    }
    


    Też nie działa :(
  • Pomocny post
    #6 20567038
    Konto nie istnieje
    Poziom 1  
  • #7 20567048
    CC_PL
    Poziom 13  
    Posty: 497
    Pomógł: 4
    Ocena: 57
    Zasilam 3.3V. Mam dwa moduły (NEO6M i SAM M8Q), przelutowałem kable i nic.

    Ciągle GPS not detected, check wiring.
  • Pomocny post
    #8 20567054
    Konto nie istnieje
    Poziom 1  
  • #9 20567064
    CC_PL
    Poziom 13  
    Posty: 497
    Pomógł: 4
    Ocena: 57
    Tak, jak to w UART,

    Dodano po 7 [godziny] 56 [minuty]:

    Wypróbowałem taki kod:

    Cytat:
    #include <HardwareSerial.h>
    #include <TinyGPSPlus.h>

    HardwareSerial GPSSerial (2);
    TinyGPSPlus gps;

    void setup()
    {
    Serial.begin(9600);
    GPSSerial.begin ( 9600, SERIAL_8N1, 16, 17 ); // begin GPS hardware serial
    }

    void loop()
    {

    Serial.begin(9600);
    // This sketch displays information every time a new sentence is correctly encoded.
    while (GPSSerial.available() > 0)
    if (gps.encode(GPSSerial.read()))
    displayInfo();

    if (millis() > 10000 && gps.charsProcessed() < 10)
    {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
    }
    }

    void displayInfo()
    {
    Serial.print(F("Location: "));
    if (gps.location.isValid())
    {
    Serial.print(gps.location.lat(), 9);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 9);
    }
    else
    {
    Serial.print(F("INVALID"));
    }
    }


    i ten sam bład: Check wiring

    Korzystałem jeszcze z testu "echo":
    Cytat:

    #define RXDATA 16 //pin where data from GPS is received, default for Serial2, but can be changed
    #define TXDATA 17 //pin where data is sent to GPS, default for Serial2, but can be changed

    void loop()
    {
    while (Serial2.available())
    {
    Serial.write(Serial2.read());
    }
    }

    void setup()
    {
    Serial2.begin(9600, SERIAL_8N1, RXDATA, TXDATA); //serial for GPS

    Serial.begin(115200);
    Serial.println();
    Serial.println("GPS_Echo Starting");
    }


    I dostaje:

    Cytat:

    08:19:15.815 ->
    08:19:15.815 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    08:19:15.815 -> configsip: 0, SPIWP:0xee
    08:19:15.815 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    08:19:15.849 -> mode:DIO, clock div:1
    08:19:15.849 -> load:0x3fff0030,len:1344
    08:19:15.849 -> load:0x40078000,len:13924
    08:19:15.849 -> ho 0 tail 12 room 4
    08:19:15.849 -> load:0x40080400,len:3600
    08:19:15.849 -> entry 0x400805f0
    08:19:15.948 ->
    08:19:15.948 -> GPS_Echo Starting
    08:19:15.948 ->


    Dodano po 2 [godziny] 33 [minuty]:

    Na forum ESP32 dostałem odpowiedź, że PIN 17 nie może być wykorzystany.... Prawdę piszą?? Z pinoutu tej płytki wynika, że to jest TX z UART2.
  • #10 20567380
    Konto nie istnieje
    Poziom 1  
  • #11 20567402
    CC_PL
    Poziom 13  
    Posty: 497
    Pomógł: 4
    Ocena: 57
    Dzięki za tabele.

    To główne forum Esspressif. Chyba chodziło gościowi o jakąś rzadką płytkę z pamięciami PSRAM.
  • #12 20567405
    Konto nie istnieje
    Poziom 1  
  • #14 20567457
    Konto nie istnieje
    Poziom 1  
  • #15 20567561
    CC_PL
    Poziom 13  
    Posty: 497
    Pomógł: 4
    Ocena: 57
    Mam Neo 6M i dwa SAM M8Q.

    Dodano po 52 [minuty]:

    Mam nowy zestaw kabelków. Działa zasilanie wreszcie (czerwona dioda na GPS się pali). Powinna się zapalić jeszcze niebieska.

    W serial monitor mam: "współrzędne błędne" - Location Invalid.
  • #16 20567737
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik zadał pytanie dotyczące kodu do obsługi modułu GPS NEO 6M z biblioteką TinyGPSPlus, w kontekście wyświetlania współrzędnych geograficznych. W odpowiedziach zasugerowano, aby zmienić piny dla SoftwareSerial w przypadku użycia ESP32, ponieważ wybrane piny 3 i 4 są niewłaściwe. Użytkownik potwierdził, że zasilanie modułu GPS wynosi 3.3V, a połączenia są poprawne, jednak nadal otrzymuje komunikat "No GPS detected: check wiring". Wskazano również, że moduł GPS może potrzebować czasu na złapanie sygnału z satelitów, a zmiana lokalizacji może pomóc w uzyskaniu sygnału.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA