Conexion entre esp32-cam y huella dactilar DY50 del chip as608

Buenas tardes, tengo una placa Esp32-CAM-mb con 16 pines disponibles y un sensor de huella dactilar DY50 con modelo de chip as608, mi problema es lo siguiente:
Necesito conectar este sensor de huella por el esp32cam y me gustaría saber que tipo de pines se utilizan, ya que, revisando algunas documentaciones, dice que el esp32 realiza la comunicacion con este sensor en el pin 16 y 17, la cual el esp32cam no dispone de estos pines.
Utilizando la biblioteca SoftwareSerial no funciona.


// Se incluye la libreria:
//#include <SoftwareSerial.h>
#include <Adafruit_Fingerprint.h>

SoftwareSerial mySerial(14, 15);    

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); 



uint8_t id; 

void setup()  
{
 
  Serial.begin(9600);    // Se configura la velocidad de 9600 baudios que va trabajar con el monitor serie 
  Serial2.begin(57600, SERIAL_8N1, fingerprintSensorRX, fingerprintSensorTX); // Iniciar comunicación serial para el sensor de huellas dactilares
  while (!Serial);         // Inicia la iteracion: Mientras Serial es negativo, hace lo siguiente:
  delay(100);              // Se retrasa el programa con un tiempo de 100 milisegundos. 
  Serial2.println("\n\nInscripción del sensor de huellas dactilares de Adafruit"); // Se imprime en el monitor serial el siguiente mensaje.

  finger.begin(57600);   // Establece la comunicacion del sensor de huellas a 57600 baudios.

// En este codigo se da a conocer si se detectó o no, el sensor.
  if (finger.verifyPassword()) {                                          // Realiza la verificacion: Si el sensor está activo y respondiendo, hace lo siguiente:
    Serial.println("¡Sensor de huellas dactilares encontrado!");          // Muestra el siguiente mensaje en el monitor serial.
  } else {                                                                // En caso contrario hace lo siguiente:
    Serial.println("No se encontró el sensor de huellas dactilares :(");  // Muestra el siguiente mensaje en el monitor serial.
    while (1)                                                             // Inicia el bucle infinito hasta detectar el sensor.
     { 
       delay(1);                                                          // Se retrasa el programa con un tiempo de 1 milisegundo.
     }
  }
}
// Se crea la funcion readnumber, con el parametro vacio (void)
uint8_t readnumber(void) {
  uint8_t num = 0;                // Se declara una variable local num que inicializa con valor cero, de tipo entero sin signo de 8 bits en almacenamiento  
  
  while (num == 0) {              // Inicia la iteracion: mientras numero sea igual a cero, hace lo siguiente:
    while (!Serial.available());  // Inicia la iteracion: mientras serial no esté disponible, hace lo siguiente:
    num = Serial.parseInt();      // Se le asigna a la variable num la funcion Serial.parseInt
  }         
  return num;                     // Retorna a la variable numero
}

void loop()              
{
  Serial.println("Listo para inscribir una huella digital!");
  Serial.println("Escriba el número de identificación (del 1 al 127) en el que desea guardar este dedo como...");
  id = readnumber();
  if (id == 0) {                        // Realiza la verificacion: Si id es 0, hace lo siguiente:
     return;                            // Retorna (Se debe intentar nuevamente!)
  }
  Serial.print("inscribiendo ID #");    // Imprime el  mensaje en el monitor serial.
  Serial.println(id);                   // Imprime el  mensaje en el monitor serial.
  
  while (!  getFingerprintEnroll() );   // Mientras (obtener registro de huella) devuelve falso, seguirá ejecutandose. (LOGICA NEGATIVA)
}                                       // En caso de (obtener registro de huella) devuelva verdadero, finalizará el bucle.
// Se crea la funcion para obtener o realizar una huella digital:  
uint8_t getFingerprintEnroll() {        // La funcion para obtener o realizar una huella digital como un entero sin signo de bits.

  int p = -1;                                     // Se declara una variable local de tipo entero con el nombre "p", igual al valor de -1
  Serial.print("Esperando un dedo válido para inscribir como #"); Serial.println(id);
  while (p != FINGERPRINT_OK) {                   // Inicia la iteracion: mientras p es distinto a huella_digital_ok, entonces hace lo siguiente:
    p = finger.getImage();                        // Se le asigna a la variable p, la obtencion de la imagen.
    switch (p) {                                  // Seleccionar p
    case FINGERPRINT_OK:                          // En caso de; huella digital correcta, hace lo siguiente:
      Serial.println("Imagen tomada");            // Imprime el  mensaje en el monitor serial.
      break;                                      // Realiza el  corte.
    case FINGERPRINT_NOFINGER:                    // En caso de; sin huella dactilar, hace lo siguiente:
      Serial.println(".");                        // Imprime el  mesaje en el monitor serial.
      break;                                      // Realiza el  corte.
    case FINGERPRINT_PACKETRECIEVEERR:            // En caso de; error al recibir el paquete de huella dactilar, hace lo siguiente:
      Serial.println("Error de comunicación");    // Imprime el  mensaje en el monitor serial.
      break;                                      // Realiza el  corte.
    case FINGERPRINT_IMAGEFAIL:                   // En caso de; fallo de imagen de la huella dactilar, hace lo siguiente:
      Serial.println("Error de imagen");          // Imprime el  mensaje en el monitor serial.
      break;                                      // Realiza el  corte.
    default:                                      // En caso de; que no haya coincidencia con ninguno de los casos anteriores, hace lo siguiente:
      Serial.println("Error desconocido");        // Imprime el  mensaje en el monitor serial.    
      break;                                      // Realiza el  corte.
    }
  }
// Si se establecio el registro del dedo, se pasa a la siguiente instruccion:
// Plantilla: Extraccion de la huella; islas, crestas, valles, bifurcacion, nucleos.
// Se covierte la primera imagen de la huella dactilar
  p = finger.image2Tz(1);                                   // Convierte la imagen de la huella en una plantilla y almacena el resultado en la variable.
  switch (p) {                                              // Seleccionar p
    case FINGERPRINT_OK:                                    // En caso de; huella digital correcta, hace lo siguiente:
      Serial.println("Imagen convertida");                  // Imprime el  mensaje en el monitor serial.
      break;                                                // Realiza el  corte.
    case FINGERPRINT_IMAGEMESS:                             // En caso de; imagen de huella confusa, hace lo siguiente:
      Serial.println("Imagen demasiado desordenada");       // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
    case FINGERPRINT_PACKETRECIEVEERR:                      // En caso de; error al recibir el paquete de huella dactilar, hace lo siguiente:
      Serial.println("Error de comunicación");              // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
    case FINGERPRINT_FEATUREFAIL:                           // En caso de; fallo de caracteristica de huella, hace lo siguiente
      Serial.println("No se pudieron encontrar las características de la huella digital");  // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
    case FINGERPRINT_INVALIDIMAGE:                          // En caso de; imagen de huella digital no validad, hace lo siguiente
      Serial.println("No se pudieron encontrar las características de la huella digital");  // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
    default:                                                // En caso de; que no haya coincidencia con ninguno de los casos anteriores, hace lo siguiente:
      Serial.println("Error desconocido");                  // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
  }                                                         
// Si se establecio la conversion la primera imagen de la huella dactilar , se pasa a la siguiente instruccion: 
  Serial.println("Quitar el dedo");                         // Imprime el  mensaje en el monitor serial.
  delay(2000);                                              // Se retrasa el programa con un tiempo de 2000 milisegundo.
  p = 0;                                                    // La variable p inicializa en cero.
  while (p != FINGERPRINT_NOFINGER) {                       // Inicia la iteracion: mientras p es distinto a sin dedo, entonces hace lo siguiente:
    p = finger.getImage();                                  // Se le asigna a la variable p, la obtencion de la imagen.
  }
  Serial.print("ID "); Serial.println(id);                  // Imprime el  mensaje en el monitor serial.
  p = -1;                                                   // La variable p inicializa en -1.
  Serial.println("Vuelva a colocar el mismo dedo");         // Imprime el  mensaje en el monitor serial.
  while (p != FINGERPRINT_OK) {                             // Inicia la iteracion: mientras p es distinto a huella digital correcta, entonces hace lo siguiente:
    p = finger.getImage();                                  // Se le asigna a la variable p, la obtencion de la imagen.
    switch (p) {                                            // Seleccionar p     
    case FINGERPRINT_OK:                                    // En caso de; huella digital correcta, hace lo siguiente:
      Serial.println("Imagen tomada");                      // Imprime el  mensaje en el monitor serial.
      break;                                                // Realiza el  corte.
    case FINGERPRINT_NOFINGER:                              // En caso de; sin huella dactilar, hace lo siguiente:
      Serial.print(".");                                    // Imprime el  mensaje en el monitor serial.
      break;                                                // Realiza el  corte.
    case FINGERPRINT_PACKETRECIEVEERR:                      // En caso de; error al recibir el paquete de huella dactilar, hace lo siguiente:
      Serial.println("Error de comunicacion");              // Imprime el  mensaje en el monitor serial.
      break;                                                // Realiza el  corte.
    case FINGERPRINT_IMAGEFAIL:                             // En caso de; fallo de imagen de la huella dactilar, hace lo siguiente:
      Serial.println("Error de imagen");                    // Imprime el  mensaje en el monitor serial.
      break;                                                // Realiza el  corte.
    default:                                                // En caso de; que no haya coincidencia con ninguno de los casos anteriores, hace lo siguiente:
      Serial.println("Error desconocido");                  // Imprime el  mensaje en el monitor serial.
      break;                                                // Realiza el  corte.
    }
  }                       

// Se covierte la segunda imagen capturada de la huella dactilar 
  p = finger.image2Tz(2);
  switch (p) {                                              // Seleccionar p
    case FINGERPRINT_OK:                                    // En caso de; huella digital correcta, hace lo siguiente:                        
      Serial.println("Imagen convertida");                  // Imprime el  mensaje en el monitor serial.
      break;                                                // Realiza el  corte.
    case FINGERPRINT_IMAGEMESS:                             // En caso de; imagen de huella confusa, hace lo siguiente:  
      Serial.println("Imagen demasiado desordenada");       // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p     
    case FINGERPRINT_PACKETRECIEVEERR:                      // En caso de; error al recibir el paquete de huella dactilar, hace lo siguiente: 
      Serial.println("Error de comunicacion");              // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
    case FINGERPRINT_FEATUREFAIL:                           // En caso de; fallo de caracteristica de huella, hace lo siguiente  
      Serial.println("No se pudieron encontrar las características de la huella digital");  // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
    case FINGERPRINT_INVALIDIMAGE:                          // En caso de; imagen de huella digital no validad, hace lo siguiente
      Serial.println("No se pudieron encontrar las características de la huella digital");  // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
    default:                                                // En caso de; que no haya coincidencia con ninguno de los casos anteriores, hace lo siguiente:        
      Serial.println("Error desconocido");                  // Imprime el  mensaje en el monitor serial.
      return p;                                             // Retorna en  p
  }
  
  // Una vez convertido, pasa a la siguiente instruccion:
  Serial.print("Creando modelo para #");  Serial.println(id);   // Imprime el  mensaje en el monitor serial.
  
  p = finger.createModel();                                     // Crea modelo de la plantilla en la memoria flash.
  if (p == FINGERPRINT_OK) {                                    // Realiza la verificacion: Si p es igual a huella digital correcta, hace lo siguiente:
    Serial.println("¡Estampados combinados!");                  // Imprime el  mensaje en el monitor serial.
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {               // En caso de  no cumplirse la condicion 1, entonces, si p es igual a error al recibir el paquete de huella, entonces hace lo siguiente:
    Serial.println("Error de comunicacion");                    // Imprime el  mensaje en el monitor serial.
    return p;                                                   // Retorna en  p
  } else if (p == FINGERPRINT_ENROLLMISMATCH) {                 // En caso de  no cumplirse la condicion 1 y 2, entonces,si p es igual a Incompatibilidad de inscripción de huella, entonces hace lo siguiente:
    Serial.println("Las huellas dactilares no coinciden");      // Imprime el  mensaje en el monitor serial.
    return p;                                                   // Retorna en  p
  } else {                                                      // En caso de  no cumplirse ninguna de las condiciones, hace lo siguiente:
    Serial.println("Error desconocido");                        // Imprime el  mensaje en el monitor serial.
    return p;                                                   // Retorna en  p
  }   
  
  Serial.print("ID "); Serial.println(id);                      // Imprime el  mensaje en el monitor serial.
  p = finger.storeModel(id);                                    // Almacena plantillas a la memoria flash.
  if (p == FINGERPRINT_OK) {                                    // Realiza la verificacion: Si p es igual a huella digital correcta, hace lo siguiente:
    Serial.println("¡Almacenado!");                             // Imprime el  mensaje en el monitor serial.
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {               // En caso de  no cumplirse la condicion 1, entonces, si p es igual a error al recibir el paquete de huella, entonces hace lo siguiente:  
    Serial.println("Error de comunicacion");                    // Imprime el  mensaje en el monitor serial.
    return p;                                                   // Retorna en  p
  } else if (p == FINGERPRINT_BADLOCATION) {                    // En caso de  no cumplirse la condicion 1 y 2, entonces, si p es igual a ubicacion de huella incorrecta, entonces hace lo siguiente:   
    Serial.println("No se pudo almacenar en esa ubicación");    // Imprime el  mensaje en el monitor serial.
    return p;                                                   // Retorna en  p
  } else if (p == FINGERPRINT_FLASHERR) {                       // En caso de  no cumplirse la condicion 1, 2 y 3, entonces, si p es igual a error de huella, entonces hace lo siguiente:                
    Serial.println("Error al escribir en flash");               // Imprime el  mensaje en el monitor serial.
    return p;                                                   // Retorna en  p
  } else {                                                      // En caso de  no cumplirse ninguna de las condiciones, hace lo siguiente:
    Serial.println("Error desconocido");                        // Imprime el  mensaje en el monitor serial.
    return p;                                                   // Retorna en  p  
  }   
}




Por favor edita tu post y adjunta el código de acuerdo a las Normas del Foro en Español, punto 7. También usa la opción "Autoformato" del menú "Herramientas" de la IDE antes de copiar el código así nos facilitas su lectura.

Puedes redefinir los pines que usa Serial1 o Serial2.

Ahi modificó.

:+1:t4:

Un ejemplo de como redefinir los pines para usar Serial2

Perfecto! y ahora como sería con un ESP32-CAM. Es la que utilizo, esta placa no tiene los pines GPIO9 y GPIO10, GPIO16 y GPIO17.
La necesito para conectar el sensor de huella dactilar y luego de ahí empezar la configuración.

Usa los que querías usar con SoftwareSerial.

Lo intenté en todos los pines con el SoftwareSerial pero no reconoció la huella dactilar

Que uses los pines que usaste con SoftwareSerial para asignarlos a Serial2 es lo que te digo. O sea, 14 y 15.

Estaba viendo tu código y es una ensalada, ¿Cuántos seriales usa? ¿Tres?
Tenés Serial, Serial2 y finger asignado a SoftwareSerial pero en el setup() el sensor está en Serial2.
No he trabajado con ese sensor pero seguro que no está conectado a 2 puertos a la vez.

Ok voy a probar con el 14 y 15 para asignar a Serial2

Intenté de todas formas pero no reconoce mi sensor de huellas segun lo que dice el monitor serie "Sensor no encontrado"
Mi sensor es del tipo DY50 con el chip as608

El esp32cam por lo que investigué, solamente tiene 1 UART, que son los GPIO1 y GPIO3, la cual es imposible usar esos dos dos puertos, ya que mediante eso consigo mantener la comunicacion con el monitor serie de arduinoIDE. Luego tiene un GPIO16 que supuestamente es el U2RXD "UART2 Receive Data", tambien probé con todos los pines y tampoco me reconoce el sensor.

#include <Adafruit_Fingerprint.h>

#include <HardwareSerial.h>

#define UART_RX_PIN 16 // GPIO 16 (U2RXD) para RX

#define UART_TX_PIN 15 // GPIO 15 (HS2_CMD) para TX

HardwareSerial fingerSerial(2); // Uso de Serial1 para UART2

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerSerial);

uint8_t id;

void setup()

{

Serial.begin(57600);


fingerSerial.begin(115200);

while (!Serial); // For Yun/Leo/Micro/Zero/...

delay(100);

Serial.println("\n\nAdafruit Fingerprint sensor enrollment");

// set the data rate for the sensor serial port

finger.begin(57600);

if (finger.verifyPassword()) {

Serial.println("Found fingerprint sensor!");

} else {

Serial.println("Did not find fingerprint sensor :(");

while (1) { delay(1); }

}

}

uint8_t readnumber(void) {

uint8_t num = 0;

while (num == 0) {

while (! Serial.available());

num = Serial.parseInt();

}

return num;

}

void loop() // run over and over again

{

Serial.println("Ready to enroll a fingerprint!");

Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");

id = readnumber();

if (id == 0) {// ID #0 not allowed, try again!

return;

}

Serial.print("Enrolling ID #");

Serial.println(id);

while (! getFingerprintEnroll() );

}

uint8_t getFingerprintEnroll() {

int p = -1;

Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);

while (p != FINGERPRINT_OK) {

p = finger.getImage();

switch (p) {

case FINGERPRINT_OK:

Serial.println("Image taken");

break;

case FINGERPRINT_NOFINGER:

Serial.println(".");

break;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println("Communication error");

break;

case FINGERPRINT_IMAGEFAIL:

Serial.println("Imaging error");

break;

default:

Serial.println("Unknown error");

break;

}

}

// OK success!

p = finger.image2Tz(1);

switch (p) {

case FINGERPRINT_OK:

Serial.println("Image converted");

break;

case FINGERPRINT_IMAGEMESS:

Serial.println("Image too messy");

return p;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println("Communication error");

return p;

case FINGERPRINT_FEATUREFAIL:

Serial.println("Could not find fingerprint features");

return p;

case FINGERPRINT_INVALIDIMAGE:

Serial.println("Could not find fingerprint features");

return p;

default:

Serial.println("Unknown error");

return p;

}

Serial.println("Remove finger");

delay(2000);

p = 0;

while (p != FINGERPRINT_NOFINGER) {

p = finger.getImage();

}

Serial.print("ID "); Serial.println(id);

p = -1;

Serial.println("Place same finger again");

while (p != FINGERPRINT_OK) {

p = finger.getImage();

switch (p) {

case FINGERPRINT_OK:

Serial.println("Image taken");

break;

case FINGERPRINT_NOFINGER:

Serial.print(".");

break;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println("Communication error");

break;

case FINGERPRINT_IMAGEFAIL:

Serial.println("Imaging error");

break;

default:

Serial.println("Unknown error");

break;

}

}

// OK success!

p = finger.image2Tz(2);

switch (p) {

case FINGERPRINT_OK:

Serial.println("Image converted");

break;

case FINGERPRINT_IMAGEMESS:

Serial.println("Image too messy");

return p;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println("Communication error");

return p;

case FINGERPRINT_FEATUREFAIL:

Serial.println("Could not find fingerprint features");

return p;

case FINGERPRINT_INVALIDIMAGE:

Serial.println("Could not find fingerprint features");

return p;

default:

Serial.println("Unknown error");

return p;

}

// OK converted!

Serial.print("Creating model for #"); Serial.println(id);

p = finger.createModel();

if (p == FINGERPRINT_OK) {

Serial.println("Prints matched!");

} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

Serial.println("Communication error");

return p;

} else if (p == FINGERPRINT_ENROLLMISMATCH) {

Serial.println("Fingerprints did not match");

return p;

} else {

Serial.println("Unknown error");

return p;

}

Serial.print("ID "); Serial.println(id);

p = finger.storeModel(id);

if (p == FINGERPRINT_OK) {

Serial.println("Stored!");

} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

Serial.println("Communication error");

return p;

} else if (p == FINGERPRINT_BADLOCATION) {

Serial.println("Could not store in that location");

return p;

} else if (p == FINGERPRINT_FLASHERR) {

Serial.println("Error writing to flash");

return p;

} else {

Serial.println("Unknown error");

return p;

}

}

También probé con ese código de arriba, tampoco me reconoció el sensor de huellas. Alguna sugerencia o corrección?, soy nuevo en este mundo. Tengo un proyecto nada más que entregar a tiempo límite, la cual el desafío es grande y la necesidad obliga día a día.

Veamos así (hay un corte de energía en casa y no puedo probarlo)

#include <Adafruit_Fingerprint.h>

//#include <HardwareSerial.h>

#define UART_RX_PIN 16 // GPIO 16 (U2RXD) para RX

#define UART_TX_PIN 15 // GPIO 15 (HS2_CMD) para TX

//HardwareSerial fingerSerial(2); // Uso de Serial1 para UART2

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);

uint8_t id;

void setup()

{

Serial.begin(57600);


Serial2.begin(57600, SERIAL_8N1, UART_RX_PIN, UART_TX_PIN);

while (!Serial); // For Yun/Leo/Micro/Zero/...

delay(100);

Serial.println("\n\nAdafruit Fingerprint sensor enrollment");

// set the data rate for the sensor serial port

//finger.begin(57600);

if (finger.verifyPassword()) {

Serial.println("Found fingerprint sensor!");

} else {

Serial.println("Did not find fingerprint sensor :(");

while (1) { delay(1); }

}

}

uint8_t readnumber(void) {

uint8_t num = 0;

while (num == 0) {

while (! Serial.available());

num = Serial.parseInt();

}

return num;

}

void loop() // run over and over again

{

Serial.println("Ready to enroll a fingerprint!");

Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");

id = readnumber();

if (id == 0) {// ID #0 not allowed, try again!

return;

}

Serial.print("Enrolling ID #");

Serial.println(id);

while (! getFingerprintEnroll() );

}

uint8_t getFingerprintEnroll() {

int p = -1;

Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);

while (p != FINGERPRINT_OK) {

p = finger.getImage();

switch (p) {

case FINGERPRINT_OK:

Serial.println("Image taken");

break;

case FINGERPRINT_NOFINGER:

Serial.println(".");

break;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println("Communication error");

break;

case FINGERPRINT_IMAGEFAIL:

Serial.println("Imaging error");

break;

default:

Serial.println("Unknown error");

break;

}

}

// OK success!

p = finger.image2Tz(1);

switch (p) {

case FINGERPRINT_OK:

Serial.println("Image converted");

break;

case FINGERPRINT_IMAGEMESS:

Serial.println("Image too messy");

return p;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println("Communication error");

return p;

case FINGERPRINT_FEATUREFAIL:

Serial.println("Could not find fingerprint features");

return p;

case FINGERPRINT_INVALIDIMAGE:

Serial.println("Could not find fingerprint features");

return p;

default:

Serial.println("Unknown error");

return p;

}

Serial.println("Remove finger");

delay(2000);

p = 0;

while (p != FINGERPRINT_NOFINGER) {

p = finger.getImage();

}

Serial.print("ID "); Serial.println(id);

p = -1;

Serial.println("Place same finger again");

while (p != FINGERPRINT_OK) {

p = finger.getImage();

switch (p) {

case FINGERPRINT_OK:

Serial.println("Image taken");

break;

case FINGERPRINT_NOFINGER:

Serial.print(".");

break;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println("Communication error");

break;

case FINGERPRINT_IMAGEFAIL:

Serial.println("Imaging error");

break;

default:

Serial.println("Unknown error");

break;

}

}

// OK success!

p = finger.image2Tz(2);

switch (p) {

case FINGERPRINT_OK:

Serial.println("Image converted");

break;

case FINGERPRINT_IMAGEMESS:

Serial.println("Image too messy");

return p;

case FINGERPRINT_PACKETRECIEVEERR:

Serial.println("Communication error");

return p;

case FINGERPRINT_FEATUREFAIL:

Serial.println("Could not find fingerprint features");

return p;

case FINGERPRINT_INVALIDIMAGE:

Serial.println("Could not find fingerprint features");

return p;

default:

Serial.println("Unknown error");

return p;

}

// OK converted!

Serial.print("Creating model for #"); Serial.println(id);

p = finger.createModel();

if (p == FINGERPRINT_OK) {

Serial.println("Prints matched!");

} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

Serial.println("Communication error");

return p;

} else if (p == FINGERPRINT_ENROLLMISMATCH) {

Serial.println("Fingerprints did not match");

return p;

} else {

Serial.println("Unknown error");

return p;

}

Serial.print("ID "); Serial.println(id);

p = finger.storeModel(id);

if (p == FINGERPRINT_OK) {

Serial.println("Stored!");

} else if (p == FINGERPRINT_PACKETRECIEVEERR) {

Serial.println("Communication error");

return p;

} else if (p == FINGERPRINT_BADLOCATION) {

Serial.println("Could not store in that location");

return p;

} else if (p == FINGERPRINT_FLASHERR) {

Serial.println("Error writing to flash");

return p;

} else {

Serial.println("Unknown error");

return p;

}

}

Solo modifiqué un par de líneas, no se si el resto del código está bien.
Recuerda que los pines RX y TX van cruzados.
TX del sensor al RX del ESP (en este caso el pin 16) y RX del sensor al TX del ESP (15)

voy a probarlo

Ahora si detectó el sensor sin problemas, ahora lo que aparace es "Error desconocido", despues de almacenar la huella. Cosa que no pasa con la placa arduino.
Ahora por una parte esta solucionado, que es detectar el sensor de huella. Solo falta saber que es ese error desconocido despues de guardar la huella