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>