// https://wokwi.com/projects/470207715218039809
// from PrintNMEA.ino:
// https://github.com/ttlappalainen/NMEA0183/blob/master/Examples/PrintNMEA/PrintNMEA.ino
#include <NMEA0183.h>
#include <NMEA0183Msg.h>
#include <NMEA0183Messages.h>
// Uncomment below to use SoftwareSerial for NMEA0183 port instead of hw. This works e.g., with Arduino Uno
// #define USE_SOFTWARE_SERIAL 1
// If you use SoftwareSerial, define NMEA0183 port Rx/Tx pins below
#define NMEA0183_RX_PIN 0
#define NMEA0183_TX_PIN 1
#if defined(USE_SOFTWARE_SERIAL)
#include <SoftwareSerial.h>
SoftwareSerial NMEA0183Port(NMEA0183_RX_PIN, NMEA0183_TX_PIN, false);
#else
//HardwareSerial &NMEA0183Port=Serial2;
HardwareSerial NMEA0183Port(2);
#endif
tNMEA0183Msg NMEA0183Msg;
tNMEA0183 NMEA0183;
void setup() {
Serial.begin(115200);
NMEA0183Port.begin(19200, SERIAL_8N1,16,17); //
NMEA0183.SetMessageStream(&NMEA0183Port,4); // Set a stream ID for this source
#if defined(USE_SOFTWARE_SERIAL)
Serial.println("Open SoftwareSerial for NMEA0183 port");
#else
Serial.println("Open HardwareSerial for NMEA0183 port");
Serial.println("On ESP32, Serial2 RX/TX is 16/17");
#endif
NMEA0183.Open();
}
void loop() {
tNMEA0183Msg NMEA0183Msg;
// getMessage non-blocking consumes chars
// and returns false, until a complete message is recieved
while (NMEA0183.GetMessage(NMEA0183Msg)) {
Serial.print(NMEA0183Msg.Sender());
Serial.print(NMEA0183Msg.MessageCode()); Serial.print(" ");
for (int i=0; i < NMEA0183Msg.FieldCount(); i++) {
Serial.print(NMEA0183Msg.Field(i));
if ( i<NMEA0183Msg.FieldCount()-1 ) Serial.print(" ");
}
Serial.print("\n");
}
}