Enregistrer les empreinte dans une base de donnees avec un esp32

salut je voudrais lire les empreinte digitale et les stocker dans une base de données . j’utilise un ESP 32 et un lecteur d’empreinte arduino .

voici mon code pour mon esp 32 :

#include <WiFi.h>
#include <HTTPClient.h>
#include <Adafruit_Fingerprint.h>

#include <WiFi.h>

#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

const char* dbServer = « localhost »;
char dbUser[] = « root@localhost »;
char dbPassword[] = «  »;
const char* dbName = « fingerprints »;

WiFiClient client;
MySQL_Connection conn(&client);

WiFiServer server(80);

const char* ssid = « DESKTOP-1QA5MKT 1050 »;
const char* password = «  »;

const char* serverName = « localhost »; // URL de votre API
const int buttonPin = 2;

// Create a new HardwareSerial object
HardwareSerial mySerial(1);

// Use pins 16 and 17 for serial communication with fingerprint sensor
HardwareSerial serialPort(2); // use UART2
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

String name = «  »;
String surname = «  »;
MySQL_Cursor* cursor;
IPAddress dbServerIP;
String httpRequestData;
HTTPClient http;

void setup() {
Serial.begin(115200);

Serial.print("ESP32 IP address: ");
Serial.println(WiFi.localIP());

// Set button pin as input
pinMode(2, INPUT);

Serial.begin(115200);
Serial.println("\n[*] Creating AP");
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid, password);
Serial.print(" [+] AP Created with IP Gateway ");
Serial.println(WiFi.softAPIP());

// Initialize fingerprint sensor
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println(« Found fingerprint sensor! »);
} else {
Serial.println(« Did not find fingerprint sensor :( »);
while (1) { delay(1); }
}
// Connectez-vous au réseau WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println(« Connecting to WiFi… »);
}
Serial.println(« Connected to WiFi »);

// Démarrez le serveur WiFi
server.begin();

if (WiFi.hostByName(dbServer, dbServerIP)) {
if (conn.connect(dbServerIP, 3306, dbUser, dbPassword)) {
Serial.println(« Connected to database »);
cursor = new MySQL_Cursor(&conn);
} else {
Serial.println(« Failed to connect to database »);
}
} else {
Serial.println(« Failed to resolve database server IP address »);
}
}

void loop() {

// Check if a client is connected
WiFiClient client = server.available();
if (client) {
// Read the HTTP request from the client
String request = client.readStringUntil(’\r’);

// Retrieve the name and surname entered by the user from the HTTP request
int nameIndex = request.indexOf("nom=") + 4;
name = request.substring(nameIndex, request.indexOf('&', nameIndex));
int surnameIndex = request.indexOf("prenom=") + 7;
surname = request.substring(surnameIndex, request.indexOf(' ', surnameIndex));

// Display the name and surname entered by the user
Serial.println("Nom saisi: " + name);
Serial.println("Prenom saisi: " + surname);

// Send an HTTP response to the client
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<body>");
client.println("<h1>Nom saisi: " + name + "</h1>");
client.println("<h1>Prenom saisi: " + surname + "</h1>");
client.stop();

}

// Check if button is pressed
if (digitalRead(buttonPin) == HIGH) {
// Read fingerprint from sensor
uint8_t p = finger.getImage();
if (p != FINGERPRINT_OK) return;

p = finger.image2Tz();
if (p != FINGERPRINT_OK) return;

p = finger.fingerFastSearch();
if (p != FINGERPRINT_OK) return;

// Check if fingerprint is already registered in database
int fingerprint_id = finger.fingerID;
String query = "SELECT COUNT(*), name, surname FROM users WHERE fingerprint_id = ";
query += fingerprint_id;

cursor->execute(query.c_str());

column_names* cols = cursor->get_columns();
row_values* row = NULL;
String message;
while ((row = cursor->get_next_row()) != NULL) {
  int count = atoi(row->values[0]);
  if (count > 0) {
    message = "Fingerprint already registered in database";
    name = row->values[1];
    surname = row->values[2];
  } else {
    message = "Fingerprint not registered in database";
  }
  break;
}
cursor->close();

// Update form with message and name and surname from database
HTTPClient http;
http.begin(serverName);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
httpRequestData = "message=" + message + "&nom=" + name + "&prenom=" + surname;
int httpResponseCode = http.POST(httpRequestData);

// Add condition to check if fingerprint is already registered before registering it in database
if (message == "Fingerprint not registered in database") {
  // Code to register fingerprint in database
  String query = "INSERT INTO users (fingerprint_id, name, surname) VALUES (";
  query += fingerprint_id;
  query += ", '";
  query += name;
  query += "', '";
  query += surname;
  query += "')";
  cursor->execute(query.c_str());
} else {
  // Fingerprint is already registered in database, do nothing
}

}
}

Et j’ ai créer une interface web qui me permet d’ entrer le nom et le prenom et de les envoyer sous forme de requette au esp 32 qui prend le nom et le prenom et quand j’ appuye sur le bouton relier à la broche 2 de mon ESP 32 Les empreinte sont lu et comparer au empreinte déjà présent dans la base de données . si l’ empreinte lu à été enregistré sous un autre nom, le nom correspondant es renvoyé au niveau du formulaire . mais dépuis je n’ avance pas . quelqu’un pour me filler un coup de main ?

Voici le code de mon formulaire web

<title>ESP32 Form</title>

<style>

  input[type="reset"] {

    background-color: red;

    color: white;

    padding: 12px 20px;

    border: none;

    border-radius: 4px;

    cursor: pointer;

  }

  input[type="reset"]:hover {

    background-color: #dc143c;

  }

</style>
<h1>ESP32 Form</h1>

<form action="http://192.168.4.1/" method="POST">

  <label for="nom">Nom:</label>

  <input type="text" id="nom" name="nom"><br><br>

  <label for="prenom">Prenom:</label>

  <input type="text" id="prenom" name="prenom"><br><br>

  <input type="submit" value="Submit">

  <input type="reset" value="Cancel">

</form>

<script>

  // Remplacez cette URL par l'URL de votre ESP32

  const espUrl ="http://192.168.4.1/";

  // Sélectionnez le formulaire

  const form = document.querySelector('form');

  // Ajoutez un écouteur d'événements pour détecter lorsque le formulaire est soumis

  form.addEventListener('submit', (event) => {

    // Empêchez la soumission du formulaire par défaut

    event.preventDefault();

    // Récupérez les données du formulaire

    const formData = new FormData(form);

    // Envoyez les données du formulaire à l'ESP32 via une requête HTTP POST

    fetch(espUrl, {

      method: 'POST',

      body: formData

    })

    .then(response => response.text())

    .then(text => {

       // Créez un nouvel élément pour afficher un message à l'utilisateur

  const messageElement = document.createElement('p');

  messageElement.textContent = "Request received and processed successfully";

  form.appendChild(messageElement);

      // Affichez un message à l'utilisateur pour indiquer si la requête a été reçue avec succès

      alert(text);

    })

    .catch(error => {

      // Gérez les erreurs ici

    });

  });

</script>
Human Coders - Le centre de formation recommandé par les développeur·se·s pour les développeur·se·s