Dans le kit Arduino à 18€ que j’ai commandé chez Ali certains composants n’étaient pas directement utilisables car les pins (broches de raccordement ou pattes de sortie en bon français) n’étaient pas soudées à la carte électronique (shield en langage technique). Heureusement, il y a un expert du soudage électronique dans les parages et Philippe a parfaitement soudé les pins des deux cartes concernées 🙂 .
J’ai donc fabriqué un sketch (un petit programme pour Arduino, mais qui sera pour ESP32) pour utiliser un écran LCD avec 2 lignes de 16 caractères et un lecteur de tags RFID RC522. Le scénario pour utiliser ces composants électroniques, c’est le contrôle d’une alarme que l’on active avec le lecteur RFID, le suivi des divers tags (car on va donner un tag à chaque membre de la famille) et l’information sur l’état de l’alarme grâce à l’écran LCD et à une page web consultable à distance qui nous donnera des informations sur les actions liées à l’alarme.
Je n’ai rien inventé, j’ai rassemblé et adapté dans un seul petit programme (environ 180 lignes) des exemples trouvés sur internet et sur ce site en particulier (merci à Yves Pelletier).
Deux types de bus sont mis en oeuvre dans ce sketch, un bus I2C (Inter-Integrated Circuit) pour l’écran LCD et un bus SPI (Serial Peripheral Interface) pour le lecteur de tags RFID.
Bus I2C selon Wikipedia ! mais en plus simple, le bus I2C permet de faire communiquer entre eux des composants électroniques très divers grâce à seulement trois fils : un signal de données (SDA), un signal d’horloge (SCL), et un signal de référence électrique (masse). Les utilisations possibles sont multiples, voici quelques exemples :
- récepteurs infra-rouge (télécommande RC5)
- capteurs de température
- circuits audio (égaliseur, contrôle de volume, etc.)
- drivers d’affichage LCD ou à LEDs
- décodeurs télétexte
- chargeurs de batterie
- PLL pour tuner HF
- …
Bus SPI selon Wikipedia ! c’est une autre option pour faire communiquer entre eux différents composants.
Rappel : nous avons déjà utilisé un autre bus de données pour les sondes de température (OneWire).
Première étape du projet, la construction de la maison que vous voyez sur la photo qui illustre l’article.
Pour la partie électronique, il faut respecter les connexions prévues sans oublier de rajouter des résistances sur le bus I2C pour SDA et SCL.



Voici les bibliothèques à utiliser, ne pas oublier d’indiquer le nom de votre box et son mot de passe ainsi que l’IP fixe que vous souhaitez utiliser (ligne 43).
|
1 2 3 4 5 6 7 8 9 10 |
#include <SPI.h> // Bibli qui gére le bus SPI #include <MFRC522.h> // Bibli pour le dialogue avec le module RC522 #include "WiFi.h" #include <WebServer.h> #include <WiFiClient.h> #include <time.h> #include <LiquidCrystal_I2C.h> const char* ssid = "votre-box"; const char* password = "votre-motdepasse"; |
Pour que le système fonctionne, il va falloir récupérer l’adresse de l’écran LCD, pour cela on va utiliser un sketch qui scanne les adresses sur le bus I2C et les affiche dans le moniteur série. Cette valeur est à rentrer en ligne 40 dans le sketch principal.
|
1 2 3 |
// set LCD address, number of columns and rows // if you don't know your display address, run an I2C scanner sketch LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows); |
Au début de la boucle loop, on affiche dans le moniteur série le numéro du tag lu, ce qui permet ensuite de définir un traitement en fonction du tag.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void loop() { serveur.handleClient(); if (rfid.PICC_IsNewCardPresent()) { // on a détecté un tag if (rfid.PICC_ReadCardSerial()) { // on a lu avec succès son contenu Serial.print(F("RFID tag in dec: ")); printDec(rfid.uid.uidByte, rfid.uid.size); Serial.println(); if (String(rfid.uid.uidByte[0]) == "74") { // Lecture du Tag de Clément (E) l1 = " Alarme OFF "; l2 = "Welcome Clement "; } if (String(rfid.uid.uidByte[0]) == "170") { // Lecture du Tag de Robin (B) l1 = " Alarme OFF "; l2 = "Bienvenue Robin "; } if (String(rfid.uid.uidByte[0]) == "234") { // Lecture du Tag de Maman (F) l1 = " Alarme OFF "; l2 = " Bonsoir Maman "; } if (String(rfid.uid.uidByte[0]) == "250") { // Lecture du Tag de Papa (J) l1 = " Alarme OFF "; l2 = "Bon retour Papa "; } if (String(rfid.uid.uidByte[0]) == "169") { // Lecture du Tag Alarme On l1 = " Alarme ON "; l2 = " Attention ! "; } |
|
1 2 3 4 5 6 7 8 |
void affichage() { lcd.setCursor(0, 0); // set cursor to first column, first row lcd.print(l1); // print message delay(500); lcd.setCursor(0, 1); // set cursor to first column, second row lcd.print(l2); // print message delay(500); } |
Le résultat en image sur l’afficheur LCD, en fonction du tag lu sur le lecteur RFID. Il y a un tag spécial pour activer l’alarme.
Nota : l’affichage habituel est plus lisible (en lettres blanches) mais je n’ai pas réussi à obtenir un fonctionnement correct 😥 Il y a aussi de multiples types d’écrans utilisables avec le même bus I2C.
Notre programme permet aussi la consultation sur un site web des derniers événements liés au lecteur RFID.

Voici les liens vers les 2 programmes utilisés pour faire fonctionner la maison Lego connectée 😀








