Metro esp32-s2 serial

Please tell us which board you are using.
For CircuitPython issues, ask in the Adafruit CircuitPython forum.

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
muttstang
 
Posts: 86
Joined: Mon May 10, 2021 3:24 pm

Metro esp32-s2 serial

Post by muttstang »

Does the esp32-s2 have other dedicated serial pins that I can use with an ultimate gps shield? Or is there a software serial library for it to use in the arduino ide? I’d use circuitpython but I want to try the esp-now functionality and the blocker for that to me now is getting the gps shield talking with the metro

User avatar
muttstang
 
Posts: 86
Joined: Mon May 10, 2021 3:24 pm

Re: Metro esp32-s2 serial

Post by muttstang »

Here's the software serial code I'm trying to run, I've changed to the inputs that I want to use for the gps shield with the metro

Code: Select all

// Test code for Adafruit GPS modules using MTK3329/MTK3339 driver
//
// This code shows how to listen to the GPS module in an interrupt
// which allows the program to have more 'freedom' - just parse
// when a new NMEA sentence is available! Then access data when
// desired.
//
// Tested and works great with the Adafruit Ultimate GPS module
// using MTK33x9 chipset
//    ------> http://www.adafruit.com/products/746
// Pick one up today at the Adafruit electronics shop
// and help support open source hardware & software! -ada

#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

// Connect the GPS Power pin to 5V
// Connect the GPS Ground pin to ground
// Connect the GPS TX (transmit) pin to Digital 8
// Connect the GPS RX (receive) pin to Digital 7

// you can change the pin numbers to match your wiring:
SoftwareSerial mySerial(13, 12);
Adafruit_GPS GPS(&mySerial);

// Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console
// Set to 'true' if you want to debug and listen to the raw GPS sentences
#define GPSECHO  true

void setup()
{

  // connect at 115200 so we can read the GPS fast enough and echo without dropping chars
  // also spit it out
  Serial.begin(115200);
  delay(5000);
  Serial.println("Adafruit GPS library basic parsing test!");

  // 9600 NMEA is the default baud rate for Adafruit MTK GPS's- some use 4800
  GPS.begin(9600);

  // uncomment this line to turn on RMC (recommended minimum) and GGA (fix data) including altitude
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  // uncomment this line to turn on only the "minimum recommended" data
  //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);
  // For parsing data, we don't suggest using anything but either RMC only or RMC+GGA since
  // the parser doesn't care about other sentences at this time

  // Set the update rate
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);   // 1 Hz update rate
  // For the parsing code to work nicely and have time to sort thru the data, and
  // print it out we don't suggest using anything higher than 1 Hz

  // Request updates on antenna status, comment out to keep quiet
  GPS.sendCommand(PGCMD_ANTENNA);

  delay(1000);
  // Ask for firmware version
  mySerial.println(PMTK_Q_RELEASE);
}

uint32_t timer = millis();
void loop()                     // run over and over again
{
  char c = GPS.read();
  // if you want to debug, this is a good time to do it!
  if ((c) && (GPSECHO))
    Serial.write(c);

  // if a sentence is received, we can check the checksum, parse it...
  if (GPS.newNMEAreceived()) {
    // a tricky thing here is if we print the NMEA sentence, or data
    // we end up not listening and catching other sentences!
    // so be very wary if using OUTPUT_ALLDATA and trytng to print out data
    //Serial.println(GPS.lastNMEA());   // this also sets the newNMEAreceived() flag to false

    if (!GPS.parse(GPS.lastNMEA()))   // this also sets the newNMEAreceived() flag to false
      return;  // we can fail to parse a sentence in which case we should just wait for another
  }

  // approximately every 2 seconds or so, print out the current stats
  if (millis() - timer > 2000) {
    timer = millis(); // reset the timer

    Serial.print("\nTime: ");
    if (GPS.hour < 10) { Serial.print('0'); }
    Serial.print(GPS.hour, DEC); Serial.print(':');
    if (GPS.minute < 10) { Serial.print('0'); }
    Serial.print(GPS.minute, DEC); Serial.print(':');
    if (GPS.seconds < 10) { Serial.print('0'); }
    Serial.print(GPS.seconds, DEC); Serial.print('.');
    if (GPS.milliseconds < 10) {
      Serial.print("00");
    } else if (GPS.milliseconds > 9 && GPS.milliseconds < 100) {
      Serial.print("0");
    }
    Serial.println(GPS.milliseconds);
    Serial.print("Date: ");
    Serial.print(GPS.day, DEC); Serial.print('/');
    Serial.print(GPS.month, DEC); Serial.print("/20");
    Serial.println(GPS.year, DEC);
    Serial.print("Fix: "); Serial.print((int)GPS.fix);
    Serial.print(" quality: "); Serial.println((int)GPS.fixquality);
    if (GPS.fix) {
      Serial.print("Location: ");
      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(", ");
      Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);

      Serial.print("Speed (knots): "); Serial.println(GPS.speed);
      Serial.print("Angle: "); Serial.println(GPS.angle);
      Serial.print("Altitude: "); Serial.println(GPS.altitude);
      Serial.print("Satellites: "); Serial.println((int)GPS.satellites);
    }
  }
}
This is the error that I get:

Code: Select all

C:\Users\aerejb\Documents\Arduino\GPS_SoftwareSerial_Parsing\GPS_SoftwareSerial_Parsing.ino:27:27: error: no matching function for call to 'Adafruit_GPS::Adafruit_GPS(SoftwareSerial*)'
 // Set to 'true' if you want to debug and listen to the raw GPS sentences
                           ^
In file included from C:\Users\aerejb\Documents\Arduino\GPS_SoftwareSerial_Parsing\GPS_SoftwareSerial_Parsing.ino:17:
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:94:3: note: candidate: 'Adafruit_GPS::Adafruit_GPS()'
   Adafruit_GPS(); // Constructor for no communications, just data storage
   ^~~~~~~~~~~~
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:94:3: note:   candidate expects 0 arguments, 1 provided
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:93:3: note: candidate: 'Adafruit_GPS::Adafruit_GPS(SPIClass*, int8_t)'
   Adafruit_GPS(SPIClass *theSPI, int8_t cspin); // Constructor when using SPI
   ^~~~~~~~~~~~
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:93:3: note:   candidate expects 2 arguments, 1 provided
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:92:3: note: candidate: 'Adafruit_GPS::Adafruit_GPS(TwoWire*)'
   Adafruit_GPS(TwoWire *theWire);    // Constructor when using I2C
   ^~~~~~~~~~~~
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:92:3: note:   no known conversion for argument 1 from 'SoftwareSerial*' to 'TwoWire*'
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:91:3: note: candidate: 'Adafruit_GPS::Adafruit_GPS(HardwareSerial*)'
   Adafruit_GPS(HardwareSerial *ser); // Constructor when using HardwareSerial
   ^~~~~~~~~~~~
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:91:3: note:   no known conversion for argument 1 from 'SoftwareSerial*' to 'HardwareSerial*'
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:83:7: note: candidate: 'constexpr Adafruit_GPS::Adafruit_GPS(const Adafruit_GPS&)'
 class Adafruit_GPS : public Print {
       ^~~~~~~~~~~~
c:\Users\aerejb\Documents\Arduino\libraries\Adafruit_GPS_Library\src/Adafruit_GPS.h:83:7: note:   no known conversion for argument 1 from 'SoftwareSerial*' to 'const Adafruit_GPS&'

Compilation error: exit status 1

User avatar
muttstang
 
Posts: 86
Joined: Mon May 10, 2021 3:24 pm

Re: Metro esp32-s2 serial

Post by muttstang »

Instead of software serial, I am getting communication from the shield using hardware serial but I had to define the pins using info I got here:

https://quadmeup.com/arduino-esp32-and- ... %20as%20TX.

Code: Select all

// Test code for Ultimate GPS Using Hardware Serial (e.g. GPS Flora or FeatherWing)
//
// This code shows how to listen to the GPS module via polling. Best used with
// Feathers or Flora where you have hardware Serial and no interrupt
//
// Tested and works great with the Adafruit GPS FeatherWing
// ------> https://www.adafruit.com/products/3133
// or Flora GPS
// ------> https://www.adafruit.com/products/1059
// but also works with the shield, breakout
// ------> https://www.adafruit.com/products/1272
// ------> https://www.adafruit.com/products/746
//
// Pick one up today at the Adafruit electronics shop
// and help support open source hardware & software! -ada

#include <Adafruit_GPS.h>
#include <HardwareSerial.h>

// what's the name of the hardware serial port?
//#define GPSSerial Serial1
HardwareSerial GPSSerial(1);

// Connect to the GPS on the hardware port
Adafruit_GPS GPS(&GPSSerial);

// Set GPSECHO to 'false' to turn off echoing the GPS data to the Serial console
// Set to 'true' if you want to debug and listen to the raw GPS sentences
#define GPSECHO false

uint32_t timer = millis();


void setup()
{
  //while (!Serial);  // uncomment to have the sketch wait until Serial is ready

  // connect at 115200 so we can read the GPS fast enough and echo without dropping chars
  // also spit it out
  GPSSerial.begin(115200, SERIAL_8N1, 13, 12);
  Serial.begin(115200);
  Serial.println("Adafruit GPS library basic parsing test!");

  // 9600 NMEA is the default baud rate for Adafruit MTK GPS's- some use 4800
  GPS.begin(9600);
  // uncomment this line to turn on RMC (recommended minimum) and GGA (fix data) including altitude
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  // uncomment this line to turn on only the "minimum recommended" data
  //GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCONLY);
  // For parsing data, we don't suggest using anything but either RMC only or RMC+GGA since
  // the parser doesn't care about other sentences at this time
  // Set the update rate
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate
  // For the parsing code to work nicely and have time to sort thru the data, and
  // print it out we don't suggest using anything higher than 1 Hz

  // Request updates on antenna status, comment out to keep quiet
  GPS.sendCommand(PGCMD_ANTENNA);

  delay(1000);

  // Ask for firmware version
  GPSSerial.println(PMTK_Q_RELEASE);
}

void loop() // run over and over again
{
  // read data from the GPS in the 'main loop'
  char c = GPS.read();
  // if you want to debug, this is a good time to do it!
  if (GPSECHO)
    if (c) Serial.print(c);
  // if a sentence is received, we can check the checksum, parse it...
  if (GPS.newNMEAreceived()) {
    // a tricky thing here is if we print the NMEA sentence, or data
    // we end up not listening and catching other sentences!
    // so be very wary if using OUTPUT_ALLDATA and trying to print out data
    Serial.print(GPS.lastNMEA()); // this also sets the newNMEAreceived() flag to false
    if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
      return; // we can fail to parse a sentence in which case we should just wait for another
  }

  // approximately every 2 seconds or so, print out the current stats
  if (millis() - timer > 2000) {
    timer = millis(); // reset the timer
    Serial.print("\nTime: ");
    if (GPS.hour < 10) { Serial.print('0'); }
    Serial.print(GPS.hour, DEC); Serial.print(':');
    if (GPS.minute < 10) { Serial.print('0'); }
    Serial.print(GPS.minute, DEC); Serial.print(':');
    if (GPS.seconds < 10) { Serial.print('0'); }
    Serial.print(GPS.seconds, DEC); Serial.print('.');
    if (GPS.milliseconds < 10) {
      Serial.print("00");
    } else if (GPS.milliseconds > 9 && GPS.milliseconds < 100) {
      Serial.print("0");
    }
    Serial.println(GPS.milliseconds);
    Serial.print("Date: ");
    Serial.print(GPS.day, DEC); Serial.print('/');
    Serial.print(GPS.month, DEC); Serial.print("/20");
    Serial.println(GPS.year, DEC);
    Serial.print("Fix: "); Serial.print((int)GPS.fix);
    Serial.print(" quality: "); Serial.println((int)GPS.fixquality);
    if (GPS.fix) {
      Serial.print("Location: ");
      Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
      Serial.print(", ");
      Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
      Serial.print("Speed (knots): "); Serial.println(GPS.speed);
      Serial.print("Angle: "); Serial.println(GPS.angle);
      Serial.print("Altitude: "); Serial.println(GPS.altitude);
      Serial.print("Satellites: "); Serial.println((int)GPS.satellites);
    }
  }
}

Locked
Please be positive and constructive with your questions and comments.

Return to “Metro, Metro Express, and Grand Central Boards”