Bonjour je suis en train de fabriquer une speedometer avec le module gps BZ-181 et un esp32 S3 zero. Mais je suis bloqué car je n'arrive pas recevoir des données du module gps. Pourtant il est bien alimenté en 5V et les tension sur le module me semble normal.
Je me demande si ça ne viens pas du code que j'utilise (c'est du chat gpt avec des petite modifications(.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <TinyGPSPlus.h>
// --- CONFIG PINS ---
#define GPS_RX_PIN 43 // RX ESP32 ← TX GPS
#define GPS_TX_PIN 44 // TX ESP32 → RX GPS
#define OLED_SDA_PIN 10
#define OLED_SCL_PIN 11
// --- OBJETS ---
TinyGPSPlus gps;
HardwareSerial GPSSerial(1); // UART1
Adafruit_SSD1306 display(128, 64, &Wire, -1);
// --- SETUP ---
void setup() {
Serial.begin(115200);
delay(200);
// GPS UART (vérifie baudrate : souvent 9600 ou 115200 selon module)
GPSSerial.begin(115200, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
// I2C OLED
Wire.begin(OLED_SDA_PIN, OLED_SCL_PIN);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("Erreur OLED !");
while (true);
}
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
display.setCursor(0,0);
display.println("Test GPS...");
display.display();
}
// --- LOOP ---
void loop() {
// Lecture GPS
while (GPSSerial.available()) {
char c = GPSSerial.read();
gps.encode(c);
}
display.clearDisplay();
// Nb satellites
display.setCursor(0, 0);
display.print("Sats: ");
if (gps.satellites.isValid()) display.print(gps.satellites.value());
else display.print("NA");
// Latitude
display.setCursor(0, 16);
display.print("Lat: ");
if (gps.location.isValid()) display.print(gps.location.lat(), 6);
else display.print("NA");
// Longitude
display.setCursor(0, 28);
display.print("Lon: ");
if (gps.location.isValid()) display.print(gps.location.lng(), 6);
else display.print("NA");
// Vitesse
display.setCursor(0, 44);
display.print("V: ");
if (gps.speed.isValid()) display.print(gps.speed.kmph());
else display.print("NA");
display.print(" km/h");
display.display();
delay(300);
}