Metro esp32-s2 serial
Moderators: adafruit_support_bill, adafruit
Please be positive and constructive with your questions and comments.
- muttstang
- Posts: 86
- Joined: Mon May 10, 2021 3:24 pm
Metro esp32-s2 serial
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
- muttstang
- Posts: 86
- Joined: Mon May 10, 2021 3:24 pm
Re: Metro esp32-s2 serial
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
This is the error that I get:
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);
}
}
}
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
- muttstang
- Posts: 86
- Joined: Mon May 10, 2021 3:24 pm
Re: Metro esp32-s2 serial
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.
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);
}
}
}
Please be positive and constructive with your questions and comments.