Votre mission est de transformer des composants bruts en un système de surveillance intelligent et sécurisé.
Avant de coder, il faut préparer votre matériel. Un capteur neuf ne peut pas être utilisé tel quel sur une plaque d'essai (breadboard).
Soudure : Soudez les broches (pins) sur votre capteur avec précision. Une mauvaise soudure empêchera la transmission des données.
Investigation : Observez votre composant. Cherchez sa référence (ex: DHT11, BMP280, HC-SR04...).
Rapport : Notez sur votre fiche la référence trouvée et expliquez brièvement son rôle.
Votre rôle est crucial : vous gérez la sécurité du système. Rien ne doit s'afficher si le badge n'est pas autorisé.
Matériel : Module RFID-RC522 + 3 badges/cartes.
Objectif : Identifier chaque badge.
Mission : En fonction du badge scanné, vous devez autoriser l'affichage des données du Groupe A, B ou C.
Vous êtes les yeux et les oreilles du système. Vous devez traduire les signaux électriques en informations compréhensibles.
1. Lecture : Récupérer la valeur brute du capteur.
2. Conversion : Appliquer la formule mathématique pour obtenir une unité réelle.
3. Formatage : Afficher dans le moniteur série : Valeur + Unité (ex: 25.5°C).
Attention : Un humain ne comprend pas une valeur entre 0 et 1023. Nous voulons des Degrés, des Pourcentages, etc ...
Le but ultime est de fusionner vos codes. Le moniteur série de l'ordinateur central doit rester vide, sauf si un badge est présenté :
Badge 1 présenté ➔ Le moniteur affiche les données du Capteur A trois fois de suite avant d'arrêter (boucle for).
Badge 2 présenté ➔ Le moniteur affiche les données du Capteur B trois fois de suite avant d'arrêter (boucle for).
Badge 3 présenté ➔ Le moniteur affiche les données du Capteur C trois fois de suite avant d'arrêter (boucle for).
#include <SPI.h>
#include <Ethernet.h>
#include <MySQL_Generic.h>
// --- Configuration Réseau ---
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177); // Adresse IP fixe pour l'Arduino (si pas de DHCP)
// --- Configuration MySQL ---
IPAddress server_addr(192, 168, 1, 50); // IP de votre serveur MySQL/MariaDB
uint16_t server_port = 3306;
char user[] = "votre_utilisateur"; // Utilisateur MySQL
char password[] = "votre_mot_de_passe"; // Mot de passe MySQL
char db[] = "votre_base_de_donnees"; // Nom de la base
// --- Matériel ---
const int pinCapteur = A0;
EthernetClient client;
MySQL_Connection conn((Client *)&client);
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("Initialisation du Shield Ethernet...");
// On tente de démarrer avec DHCP, sinon on utilise l'IP fixe
if (Ethernet.begin(mac) == 0) {
Serial.println("Echec DHCP, utilisation IP fixe.");
Ethernet.begin(mac, ip);
}
delay(1000); // Temps de stabilisation
Serial.print("IP Arduino: ");
Serial.println(Ethernet.localIP());
connectToSQL();
}
void loop() {
// Lecture du capteur Grove (Analogique A0)
int valeurCapteur = analogRead(pinCapteur);
// Paramètres pour la base de données
int idCapteur = 1;
String nomCapteur = "Grove_Analog_A0";
if (conn.connected()) {
envoyerDonnees(idCapteur, nomCapteur, valeurCapteur);
} else {
Serial.println("Connexion perdue. Reconnexion...");
connectToSQL();
}
delay(10000); // Pause de 10 secondes
}
void connectToSQL() {
Serial.println("Connexion au serveur SQL...");
if (conn.connect(server_addr, server_port, user, password)) {
Serial.println("Connecté avec succès !");
} else {
Serial.println("Échec de la connexion SQL.");
}
}
void envoyerDonnees(int id, String nom, int val) {
// Construction de la requête SQL
// Format : INSERT INTO table (col1, col2, col3) VALUES (val1, 'val2', val3)
String query = "INSERT INTO " + String(db) + ".ma_table ";
query += "(Id_capteur, Nom_capteur, Val_capteur) VALUES (";
query += String(id) + ", '";
query += nom + "', ";
query += String(val) + ");";
Serial.print("Exécution : ");
Serial.println(query);
// Exécution de la requête
MySQL_Query query_executor(&conn);
if (query_executor.execute(query.c_str())) {
Serial.println("Données enregistrées.");
} else {
Serial.println("Erreur lors de l'insertion.");
}
}