GPS GY-NEO6MV2 con Helctec Wifi Lora 32 v3

Buenas, estoy intentado conectar el gps con la placa pero no me funciona, es más ni el gps se enciende, adjunto mi código para ver si alguien sabe del tema, el código compila, y no afecta al funcionamiento de los otros sensores pero no me funciona el gps.

#include <Wire.h>
#include <Adafruit_AHTX0.h>
#include "HT_SSD1306Wire.h"
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345_U.h>
#include <SparkFun_AS7265X.h>
#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <FS.h>
#include <SPIFFS.h>
#include <TinyGPS++.h>
#include <HardwareSerial.h>

TinyGPSPlus gps;
HardwareSerial neogps(1);  // UART1

float gpsLatitude = 0.0;
float gpsLongitude = 0.0;

#define BUTTON_PIN 20      //DIGITAL

const int buzzer = 26;  // Buzzer pin

int ledRojo = 48;
int ledVerde = 47;
int ledAzul = 33;

// Configuración de la pantalla OLED en el bus principal I²C
static SSD1306Wire display(0x3C, 500000, SDA_OLED, SCL_OLED, GEOMETRY_128_64, RST_OLED);

// Declaración de los gpios para sda y scl
uint8_t sda_aht10 = 6;  // SDA para los sensores
uint8_t scl_aht10 = 7;  // SCL para los sensores

// Declaración de variables para el muestreo de los datos en la oled
unsigned long lastUpdate = 0;
const long interval = 3000; // 3 segundos por cada conjunto de datos
bool showSensor1 = true;  // Alternador de pantallas

// Instancia del sensor AHT10
Adafruit_AHTX0 aht10;

// Instancia del sensor ADXL345
Adafruit_ADXL345_Unified adxl = Adafruit_ADXL345_Unified(12345);

// Instancia del sensor AS7265x
AS7265X as7265x;

// WiFi y Web Server
AsyncWebServer server(80);

void VextON(void) {
  pinMode(Vext, OUTPUT);
  digitalWrite(Vext, LOW);
}

void VextOFF(void) {
  pinMode(Vext, OUTPUT);
  digitalWrite(Vext, HIGH);
}

void checkSerialCommands() {
  if (Serial.available()) {
    String command = Serial.readStringUntil('\n');
    command.trim();

    if (command == "GET_CSV") {
      File file = SPIFFS.open("/data.csv", "r");
      if (!file) {
        Serial.println("ERROR: No se pudo abrir datos.csv");
        return;
      }

      Serial.println("BEGIN_CSV");
      while (file.available()) {
        Serial.write(file.read());
      }
      file.close();
      Serial.println("END_CSV");
    } 
    else if (command == "DELETE_CSV") {
      if (SPIFFS.remove("/data.csv")) {
        Serial.println("CSV_DELETED");
      } else {
        Serial.println("CSV_DELETE_FAILED");
      }
    }
  }
}

void setup() {

  Serial.begin(115200);

  neogps.begin(9600, SERIAL_8N1, 44, 43); // RX = 43, TX = 44

  pinMode(BUTTON_PIN, INPUT_PULLUP);

  pinMode(buzzer, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  pinMode(ledRojo,OUTPUT);
  pinMode(ledVerde,OUTPUT);
  pinMode(ledAzul,OUTPUT);

  VextON();
  delay(100);

  // Inicializar el bus I²C principal para la OLED
  //Wire.begin(); // No es necesario inicializarla ya que por defecto la oled está conectada a los pines especificos de I2C

  // Inicializar el segundo bus I²C en GPIO6 (SDA) y GPIO7 (SCL) para los sensores usando Wire1
  Wire1.begin(sda_aht10, scl_aht10, 400000);

  // Inicializar pantalla OLED
  display.init();
  display.clear();
  display.setFont(ArialMT_Plain_10);
  display.display();

  // Inicializar el sensor AHT10 en el bus I²C secundario
  if (!aht10.begin(&Wire1)) {
    Serial.println(F("AHT10 not connected or failed to load calibration coefficient"));
    while (1) { delay(5000); } // Bucle infinito si falla la conexión
  }

  Serial.println(F("AHT10 OK"));

  // Inicialización del sensor ADXL345 en el bus I²C secundario
  if (!adxl.begin(ADXL345_DEFAULT_ADDRESS, &Wire1)) {
    Serial.println(F("ADXL345 not connected or failed to load calibration coefficient"));
    while (1) { delay(5000); } // Bucle infinito si falla la conexión
  }

  Serial.println(F("ADXL345 OK"));

  // Inicialización del sensor AS7265x en el bus I²C secundario
  if (!as7265x.begin(Wire1)) {
    Serial.println(F("AS7265X not connected"));
    while (1) delay(5000);
  }

  Serial.println(F("AS7265X OK"));

  if (!SPIFFS.begin(true)) {
    Serial.println("Error al montar SPIFFS");
    return;
  }

  File file = SPIFFS.open("/data.csv", FILE_APPEND);
  if (!file || file.size() == 0) {
    file.println("Temperatura, Humedad, X, Y, Z, 410, 435, 460, 485, 510, 535, 560, 585, 610, 645, 680, 705, 730, 760, 810, 860, 900, 940, Latitud, Longitud");
  }
  file.close();

  WiFi.softAP("Heltec-Logger");
  Serial.println("AP IP address: " + WiFi.softAPIP().toString());

  server.on("/data.csv", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(SPIFFS, "/data.csv", "text/csv", true);
  });

  server.begin();
}

void loop() {

  checkSerialCommands();

  byte buttonState = digitalRead(BUTTON_PIN);
  
  if (buttonState == LOW) {

    for(int i = 500; i > 0 ; --i) {
      digitalWrite(buzzer, HIGH);
      digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(1);
      digitalWrite(buzzer, LOW);
      digitalWrite(LED_BUILTIN, LOW);
      delay(1);
    }

    //Hacer color rojo
    digitalWrite(ledRojo,255);
    digitalWrite(ledVerde,0);
    digitalWrite(ledAzul,0);
    //delay(1500); 

    Serial.println(digitalRead(BUTTON_PIN));

    byte buttonState = digitalRead(BUTTON_PIN);

    Serial.println("Botón Pulsado");

    // AHT10
    Serial.println(F("Reading AHT10 sensor..."));

    sensors_event_t humidity, temp;
    aht10.getEvent(&humidity, &temp);

    Serial.print(F("Temperature: "));
    Serial.print(temp.temperature);
    Serial.println(F(" °C"));

    Serial.print(F("Humidity...: "));
    Serial.print(humidity.relative_humidity);
    Serial.println(F(" %"));

    display.clear();
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.drawString(0, 0, "Temperature: ");
    display.drawString(70, 0, String(temp.temperature, 2));
    display.drawString(0, 10, "Humidity:");
    display.drawString(50, 10, String(humidity.relative_humidity, 2));
    display.display();

    // ADXL345
    Serial.println(F("Reading ADXL345 sensor..."));

    sensors_event_t event;
    adxl.getEvent(&event);

    Serial.print(F("Aceleración X: "));
    Serial.print(event.acceleration.x);
    Serial.println(F(" m/s²"));

    Serial.print(F("Aceleración Y: "));
    Serial.print(event.acceleration.y);
    Serial.println(F(" m/s²"));

    Serial.print(F("Aceleración Z: "));
    Serial.print(event.acceleration.z);
    Serial.println(F(" m/s²"));

    display.drawString(0, 20, "X:        " + String(event.acceleration.x, 2));
    display.drawString(0, 30, "Y:        " + String(event.acceleration.y, 2));
    display.drawString(0, 40, "Z:        " + String(event.acceleration.z, 2));
    display.display();

    // AS7265x 
    Serial.println(F("Reading AS7265x sensor..."));

    as7265x.takeMeasurementsWithBulb(); //This is a hard wait while all 18 channels are measured

    Serial.print(as7265x.getCalibratedA()); //410nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedB()); //435nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedC()); //460nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedD()); //485nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedE()); //510nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedF()); //535nm
    Serial.print(",");

    Serial.print(as7265x.getCalibratedG()); //560nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedH()); //585nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedR()); //610nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedI()); //645nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedS()); //680nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedJ()); //705nm
    Serial.print(",");

    Serial.print(as7265x.getCalibratedT()); //730nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedU()); //760nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedV()); //810nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedW()); //860nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedK()); //900nm
    Serial.print(",");
    Serial.print(as7265x.getCalibratedL()); //940nm
    Serial.print(",");

    Serial.println();

    // Mostrar valores del sensor AS7265X en la pantalla OLED
    display.display(); // Mostrar en la OLED
    delay(5000); // Pausa de 5 segundos antes de mostrar la primera parte

    display.clear(); // Limpiar la pantalla para la primera parte

    display.drawString(0, 0, "410nm: " + String(as7265x.getCalibratedA(), 2));
    display.drawString(0, 10, "435nm: " + String(as7265x.getCalibratedB(), 2));
    display.drawString(0, 20, "460nm: " + String(as7265x.getCalibratedC(), 2));
    display.drawString(0, 30, "485nm: " + String(as7265x.getCalibratedD(), 2));
    display.drawString(0, 40, "510nm: " + String(as7265x.getCalibratedE(), 2));
    display.drawString(0, 50, "535nm: " + String(as7265x.getCalibratedF(), 2));

    display.display(); // Mostrar en la OLED
    delay(5000); // Pausa de 5 segundos antes de mostrar la siguiente parte

    display.clear(); // Limpiar la pantalla para la segunda parte

    display.drawString(0, 0, "560nm: " + String(as7265x.getCalibratedG(), 2));
    display.drawString(0, 10, "585nm: " + String(as7265x.getCalibratedH(), 2));
    display.drawString(0, 20, "610nm: " + String(as7265x.getCalibratedR(), 2));
    display.drawString(0, 30, "645nm: " + String(as7265x.getCalibratedI(), 2));
    display.drawString(0, 40, "680nm: " + String(as7265x.getCalibratedS(), 2));
    display.drawString(0, 50, "705nm: " + String(as7265x.getCalibratedJ(), 2));

    display.display(); // Mostrar en la OLED
    delay(5000); // Pausa de 5 segundos antes de mostrar la tercera parte

    display.clear(); // Limpiar la pantalla para la tercera parte

    display.drawString(0, 0, "730nm: " + String(as7265x.getCalibratedT(), 2));
    display.drawString(0, 10, "760nm: " + String(as7265x.getCalibratedU(), 2));
    display.drawString(0, 20, "810nm: " + String(as7265x.getCalibratedV(), 2));
    display.drawString(0, 30, "860nm: " + String(as7265x.getCalibratedW(), 2));
    display.drawString(0, 40, "900nm: " + String(as7265x.getCalibratedK(), 2));
    display.drawString(0, 50, "940nm: " + String(as7265x.getCalibratedL(), 2));

    display.display();
    delay(5000); // Pausa de 5 segundos antes de mostrar la cuarta parte

    float spectrum[18] = {
      as7265x.getCalibratedA(), as7265x.getCalibratedB(), as7265x.getCalibratedC(),
      as7265x.getCalibratedD(), as7265x.getCalibratedE(), as7265x.getCalibratedF(),
      as7265x.getCalibratedG(), as7265x.getCalibratedH(), as7265x.getCalibratedR(),
      as7265x.getCalibratedI(), as7265x.getCalibratedS(), as7265x.getCalibratedJ(),
      as7265x.getCalibratedT(), as7265x.getCalibratedU(), as7265x.getCalibratedV(),
      as7265x.getCalibratedW(), as7265x.getCalibratedK(), as7265x.getCalibratedL()
    };

    unsigned long gpsStart = millis();
    while (millis() - gpsStart < 2000) {  // Esperar hasta 2 segundos por datos GPS
      while (neogps.available()) {
        gps.encode(neogps.read());
      }
    }

    if (gps.location.isValid()) {
      gpsLatitude = gps.location.lat();
      gpsLongitude = gps.location.lng();
    } else {
      gpsLatitude = 0.0;
      gpsLongitude = 0.0;
    }

    bool writeHeader = !SPIFFS.exists("/data.csv");

    File file = SPIFFS.open("/data.csv", FILE_APPEND);
    if (!file) {
      Serial.println("Error abriendo data.csv");
      return;
    }

    if (writeHeader) {
      file.println("Temperatura, Humedad, X, Y, Z, 410, 435, 460, 485, 510, 535, 560, 585, 610, 645, 680, 705, 730, 760, 810, 860, 900, 940");
    }

    file.printf("%.2f,%.2f,%.2f,%.2f,%.2f", temp.temperature, humidity.relative_humidity, event.acceleration.x, event.acceleration.y, event.acceleration.z);
    for (int i = 0; i < 18; i++) file.printf(",%.2f", spectrum[i]);
    file.printf(",%.6f,%.6f", gpsLatitude, gpsLongitude);
    file.println();
    file.close();

    // Mostrar en pantalla
    display.clear();
    display.drawString(0, 0, "Lat: " + String(gpsLatitude, 6));
    display.drawString(0, 10, "Lng: " + String(gpsLongitude, 6));
    display.display();
    delay(5000);

    display.clear(); 
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.drawString(0, 0, "Medida guardada y enviada");

    display.display(); // Mostrar en la OLED
    delay(5000);
  }
  else {

    //Hacer color verde
    digitalWrite(ledRojo,0);
    digitalWrite(ledVerde,255);
    digitalWrite(ledAzul,0);
    //delay(1500);

    display.clear();
    Serial.println("El botón no está pulsado");
    display.drawString(0, 0, "ESPERANDO... ");
    display.display(); // Mostrar en la OLED
  }

}

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @victorgu.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Si no entiendo mal la documentación, los pines 43 y 44 se conectan al CP2102 que es la interface Serial, tal vez tendrías que usar otros pines para Serial1.

Me llama la atención que no encienda la Neo6, ¿estás usando una protoboard?
Revisa que no tenga falsos contactos.

Agrega un esquema de como tienes todo conectado.

Buenas, el esquema de montaje es, gnd del gps a gnd de la heltec, vcc del gps al vcc de la placa (3.3v al igual que el resto de sensores), el tx del gps al pin 44 de la heltec, y por último el pin rx del gps al pin 43 de la heltec.

Buenas, entonces los pines 44 y 43 de la placa heltec no los podría utilizar?, a mí eso es lo que más me extraña, que no se encienda el gps, me parece raro, pero es que tengo dos iguales, y con los dos me pasa lo mismo.

Como ambos habréis podido observar, por el código tengo más sensores conectados, podría ser de un problema de que la placa no tenga fuerza para dar voltaje a todos? Ante esta duda, he cogido un polímetro y he medido en las puntas ya soldadas del sensor GPS y le llegan unos 3.34v por lo que alimentación recibe, peros sigue sin encenderse, he revisado todo de nuevo, y no hay contactos, de hecho los demás sensores, buzzer, pulsador, etc, va todo correctamente, pero el GPS no llega ni a encenderse.

Gracias de antemano a todo el que pueda ayudar!!!

Son los pines que usa Serial, y los que usa para subir el código.
Yo diría que mejor no usarlos.

Podrías usar GPIO19 y GPIO20, si están libres.

Buenas de nuevo, el 20 lo tengo cogido, por un pulsador, puedo cambiarlo, pero crees que el hecho de que los pines esos para recibir y/o transmitir los datos entre placa y gps o viceversa podría afectar a que se encienda o no el gps?, es que no se enciende, he probado solo con la placa, con otra igual a esta, comprobado en ambos casos con polimetro si le llegaba el voltaje deseado y no se enciende. Tengo dos gps, venían juntos en el mismo pedido, y también me resulta extraño que puedan venir estropeados los dos.

En cuanto a los pines, tengo esta imagen de los pines de la placa


La pregunta es: podría coger un par de pines cualquiera que estén libres como el GPIO46 y GPIO45?

En teoría se puede asignar cualquier pin que no se utilice para otra cosa.

¿No será que los módulos se deban alimentar con 5V?

Sube una foto y el link del art que compraste sería de ayuda también