Lecture octets (d'un module gps) et enregistrement/ NMEA et GPX

Bonsoir leg2027

Voilà une version qui ne garde que les $GPGGA
if (gpsDonnees.startsWith("$GPGGA"))
S'il te manque des données dis moi dans quelle sentence NMEA elles se trouvent.

/*
    Name:       ARDFR_leg2027_GPSsd.ino
    Created:	29.09.2021
    Author:     jpbbricole

	GPS - NMEA sentence information http://aprs.gids.nl/nmea/
	Protocol specification
	https://www.u-blox.com/sites/default/files/products/documents/u-blox6_ReceiverDescrProtSpec_%28GPS.G6-SW-10018%29_Public.pdf
	https://www.gpsworld.com/what-exactly-is-gps-nmea-data/
	Except $GPGSA et $GPGSV
*/
 
//#define programmeur

#include <SoftwareSerial.h>
SoftwareSerial gpsSerial(4, 3);     // Connexion vers le module GPS

//===================================== Carte SD
#include <SPI.h>     // Interface pour carte SD
#include <SD.h>
#ifdef programmeur
	const int sdCardCsPin = 9;     // Chip Select du lecteur de carte SD
#else
	const int sdCardCsPin = 7;     // Chip Select du lecteur de carte SD config leg2027
#endif
const char* gpsDataFileName = "GPSDAT00.TXT";

//===================================== Reception des données GPS
String gpsDonnees;     // Données recues
boolean gpsNouvellesDonnees = false;     // Si nouvelles données

void setup()
{
	Serial.begin(9600);
	gpsSerial.begin(9600);
	delay(500);
	Serial.flush();
	gpsSerial.flush();
  
	//------------------------------------- Demarrage carte SD
	Serial.println("Initialisation carte SD...");
	if (!SD.begin(sdCardCsPin))     // Si la carte SD ne repond pas
	{
		Serial.println(F("Carte SD out ou absente"));
		return;
	}
	Serial.println("Carte SD OK");

	delay(1000);
}

void loop()
{
	/*---------------------------------------------------------------------------------------------------------------------- 
		Ecoute du port serie du GPS 
		----------------------------------------------------------------------------------------------------------------------
	*/
	gpsSerialEvent();     // Lecture du port du GPS
	
	if (gpsNouvellesDonnees)     // Si recu de nouvelles données
	{		
		if (gpsDonnees.startsWith("$GPGGA"))
		{
			logFileAddLine(gpsDonnees);
		}
 
		gpsDonnees = "";
		gpsNouvellesDonnees  = false;
	}
}

//------------------------------------- Ecriture des données sur carte SD
void logFileAddLine(String dataLine)
{
	noInterrupts();
	File dataFile = SD.open(gpsDataFileName, FILE_WRITE);
	if (dataFile)
	{
		dataFile.println(dataLine);
		dataFile.close();
		Serial.println("SD > " + dataLine);
	}
	else
	{
		Serial.println("error opening  " + (String)gpsDataFileName);
		dataFile.clearWriteError();
		dataFile.close();
	}

	interrupts();

}

//===================================== Ecoute du port serie du GPS
void gpsSerialEvent()                                                   
{
	while (gpsSerial.available())
	{
		char gpsChar = (char)gpsSerial.read();     // Char received from IDE monitor
		if (gpsChar == '\n')     // If new line char received = end of command line
		{
			gpsNouvellesDonnees  = true;
		}
		else
		{
			if (gpsChar >= ' ') {gpsDonnees += gpsChar;}     // >= ' ' to avoid not wanted ctrl char.
		}
	}
}

A+
Bonne soirée
jpbbricole