Codey Online › Bibliothèque de composants Arduino & ESP32 › GPS NEO-6M
GPS NEO-6M
Capteurs

GPS NEO-6M

Le NEO-6M est un module récepteur GPS utilisé pour déterminer la position, la vitesse et l'heure à partir des signaux satellites. Il communique généralement avec un microcontrôleur via UART série en utilisant TX et RX, avec VCC et GND pour l'alimentation, et une broche PPS pour une sortie de temps précise.

Largeur: 42.3 mm

Brochage — GPS NEO-6M

Broche Signal Description
TX TX UART transmit output from the GPS module — connect to the host MCU RX.
GND ground Ground reference for power and UART signals.
VCC power Power input for the GPS module, typically 3.3–5V depending on board regulator.
RX RX UART receive input to the GPS module — connect to the host MCU TX.
PPS digital Pulse-per-second timing output from GPS lock for precise synchronization.

Exemple de schéma de câblage — GPS NEO-6M

De Vers Fil
board:5V x1:VCC red
board:GND x1:GND black
board:D4 x1:TX green
board:D3 x1:RX blue

Exemple de code Arduino — GPS NEO-6M

Cet exemple a été écrit et vérifié à la compilation pour le arduino-uno. Codey Online l'adapte pour vous à toute autre carte prise en charge.

#include <SoftwareSerial.h>

// GPS NEO-6M canonical example for Arduino Uno
// Wiring:
// GPS VCC -> 5V
// GPS GND -> GND
// GPS TX  -> D4 (Arduino receives on this pin)
// GPS RX  -> D3 (Arduino transmits on this pin)

SoftwareSerial gpsSerial(4, 3); // RX, TX

char lineBuffer[120];
uint8_t lineIndex = 0;

void setup() {
  Serial.begin(9600);
  gpsSerial.begin(9600);

  Serial.println(F("GPS NEO-6M example started."));
  Serial.println(F("Waiting for NMEA sentences..."));
}

void printField(const char *label, const char *value) {
  Serial.print(label);
  Serial.print(value);
}

void handleRMC(char *sentence) {
  // Example: $GPRMC,hhmmss.sss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,,,A*hh
  char *fields[12] = {0};
  uint8_t count = 0;
  char *token = strtok(sentence, ",");
  while (token && count < 12) {
    fields[count++] = token;
    token = strtok(NULL, ",");
  }

  if (count < 10) return;
  if (fields[2] == NULL || fields[2][0] != 'A') {
    Serial.println(F("No GPS fix yet."));
    return;
  }

  Serial.println(F("--- Valid Fix (RMC) ---"));
  if (fields[1]) printField("Time (UTC): ", fields[1]), Serial.println();
  if (fields[3] && fields[4]) {
    Serial.print(F("Latitude: "));
    Serial.print(fields[3]);
    Serial.println(fields[4]);
  }
  if (fields[5] && fields[6]) {
    Serial.print(F("Longitude: "));
    Serial.print(fields[5]);
    Serial.println(fields[6]);
  }
  if (fields[7]) {
    Serial.print(F("Speed (knots): "));
    Serial.println(fields[7]);
  }
  if (fields[8]) {
    Serial.print(F("Course (deg): "));
    Serial.println(fields[8]);
  }
  if (fields[9]) {
    Serial.print(F("Date (ddmmyy): "));
    Serial.println(fields[9]);
  }
}

void handleGGA(char *sentence) {
  // Example: $GPGGA,time,lat,N,lon,E,fixquality,numsat,hdop,alt,M,...
  char *fields[15] = {0};
  uint8_t count = 0;
  char *token = strtok(sentence, ",");
  while (token && count < 15) {
    fields[count++] = token;
    token = strtok(NULL, ",");
  }

  if (count < 8) return;
  int fixQuality = fields[6] ? atoi(fields[6]) : 0;
  int satellites = fields[7] ? atoi(fields[7]) : 0;

  Serial.println(F("--- GGA Status ---"));
  Serial.print(F("Fix quality: "));
  Serial.println(fixQuality);
  Serial.print(F("Satellites: "));
  Serial.println(satellites);
  if (fields[8]) {
    Serial.print(F("HDOP: "));
    Serial.println(fields[8]);
  }
  if (fields[9] && fields[10]) {
    Serial.print(F("Altitude: "));
    Serial.print(fields[9]);
    Serial.print(' ');
    Serial.println(fields[10]);
  }
}

void loop() {
  while (gpsSerial.available()) {
    char c = (char)gpsSerial.read();

    if (c == '\n') {
      lineBuffer[lineIndex] = '\0';
      lineIndex = 0;

      // Trim trailing carriage return if present
      char *sentence = lineBuffer;
      size_t len = strlen(sentence);
      if (len > 0 && sentence[len - 1] == '\r') {
        sentence[len - 1] = '\0';
      }

      if (strncmp(sentence, "$GPRMC", 6) == 0 || strncmp(sentence, "$GNRMC", 6) == 0) {
        char temp[120];
        strncpy(temp, sentence, sizeof(temp));
        temp[sizeof(temp) - 1] = '\0';
        handleRMC(temp);
      } else if (strncmp(sentence, "$GPGGA", 6) == 0 || strncmp(sentence, "$GNGGA", 6) == 0) {
        char temp[120];
        strncpy(temp, sentence, sizeof(temp));
        temp[sizeof(temp) - 1] = '\0';
        handleGGA(temp);
      }
    } else {
      if (lineIndex < sizeof(lineBuffer) - 1) {
        lineBuffer[lineIndex++] = c;
      } else {
        lineIndex = 0; // overflow protection
      }
    }
  }
}

Composants similaires

HX711 Load Cell Amplifier

HX711 Load Cell Amplifier

RFID RC522 Module 13.56MHz

RFID RC522 Module 13.56MHz

HC-SR501 PIR Motion Sensor

HC-SR501 PIR Motion Sensor

Mini PIR

Mini PIR

Construisez votre projet Arduino ou ESP32 avec l'IA

Décrivez ce que vous voulez créer. Codey Online écrit le code, dessine le schéma de câblage, le compile et flashe votre carte directement depuis le navigateur.

Commencez gratuitement