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

Hasta acá llego, no tengo idea de lo que puede ser, nunca he usado un sensor de huellas (bueno tampoco una cam :wink: ).

Por otro lado, ¿viste que se podía cambiar de pines? Solo había que hacerlo bien (te di todo casi servido), no todo es copiar y pegar. :stuck_out_tongue_winking_eye:

Saludos

Habría que ver bien el código porque por lo que se ve llega a guardar la imagen.
No sé a cual de los tantos "Unknown error" corresponde el que aparece en la captura.
Podrías imprimir un número a continuación de cada uno como para saber a cual corresponde.
Algo así

Serial.println("Unknown error"); 
Serial.println("** 1 **"); 

Lo raro es que no se identifique el error y salte ese por defecto.
Intenta hacer esto y vemos si puedo aportar algo más.
Saludos

Vaya ensalada y revuelto de verduras!! Tal como dijo @MaximoEsfuerzo
Siempre que tengas un problema de este tipo separa las cosas.
Resuelve algo primero y lo siguiente despues y al final une a ver si funciona todo.
Pero primero interiorízate de lo que esas haciendo. Dudo mucho que entiendas gran parte de lo anterios.
Ejemplo. Un ESP32 no maneja Softwareserial. Con todas las opciones que tiene solo requieres de un puerto serie para comunicarte.
SoftwareSerial es usado solo en Arduinos que tienen un solo puerto Serie como UNO, NANO, ProMini y estos trabajan a 5V.
En cambio el ESP32 trabaja en 3.3V asi que ojo con las conexiones del detector de huellas unido al ESP32. Los pines del ESP32 no son 5V tolerantes.
Otra cosa, no uses cosas con delay() o luego no veras que algo que funcionaba individualmente, lo haga junto a otro código.
Se que no te aporto nada o tal vez te replantees algunas cosas.
Separa códigos, resuelve y luego une códigos.

Está bien, Nikola Tesla

Ok, probaré paso por paso para identificar el error. Cualquier cosa vuelvo a publicar que error esta arrojando

Probá como te dije, fijate que hay varios "Unknown error", imprimi un numero en cada uno así sabemos en cual paso está dando el error y vemos si deducimos que puede ser.

#include <Adafruit_Fingerprint.h>


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

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


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");
Serial.println("** 1 **"); 

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");
Serial.println("** 2 **"); 

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");
Serial.println("** 3 **"); 

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");
Serial.println("** 4 **"); 

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");
Serial.println("** 5 **"); 
Serial.println(p); 

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");    
Serial.println("** 6 **"); 

return p;

}

}

En el 5 arroja el "unknown error"

La verdad que si se cumple FINGERPRINT_OK no deberia de enviar ese mensaje de error, es muy raro.
En este caso arroja los dos mensajes: "Prints matched!" y el "Unknown error"

Cambiá

Serial.println("** 5 **"); 

por

Serial.println(p); 

A ver que código devuelve y vemos si hay algo en internet al respecto.

Envía un 0, creo que hay algun problema con finger.createModel();

Es gracioso, según la documentación de la librería

#define FINGERPRINT_OK   0x00
    Command execution is complete.

O sea que, en teoría, no hay error porque 0 es OK.

Editá el post #29 y formatea el código (ya te había dicho, opción Autoformato de la IDE) y vuelve a pegarlo, porque así como está cuesta mucho seguir el orden de las llaves y ver si alguna está mal puesta.

Ok, lo haré ahora mismo

Creo que ahi arregló el código. Está en la opción autodormato IDE

Si, pero editá el #29, borrá el código y pegá el que formateaste en la IDE.

Ahí está el nuevo código

Moderador
Donde esta?
No modifques posteos anteriores a menos que un moderador te lo solicite o tu estes en respuesta a alguien y corresponda, pero si se menciona algo y luego lo cambias quien lee la historia de tu posteo no entiende lo que acabas de escribir.
El ultimo código del post#29 acaba de ser modificado. A eso me refiero

#include <Adafruit_Fingerprint.h>


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

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


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");
Serial.println("** 1 **"); 

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");
Serial.println("** 2 **"); 

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");
Serial.println("** 3 **"); 

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");
Serial.println("** 4 **"); 

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");
Serial.println("** 5 **"); 
Serial.println(p); 

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");     
Serial.println("** 6 **"); 

return p;

}

}