Transfert de données température/humidité entre deux Arduinos via Firebase
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 2 |
| ESP8266 ESP-01 | 2 |
| Capteur température/humidité DHT11 (3 broches) | 1 |
| Écran LCD I2C 16x2 DFRobot | 1 |
| Plaque d'essai (breadboard) | 2 |
| Fils de connexion mâle/femelle | 1 |
Applications et services en ligne
- Arduino IDE
- Google Firebase (Realtime Database)
Présentation du projet
Dans ce tutoriel IoT, vous lirez la température et l'humidité depuis un capteur DHT11 sur un Arduino UNO, enverrez les valeurs vers Firebase via un ESP8266, puis récupérerez ces mesures sur un second Arduino UNO pour les afficher sur un écran LCD I2C. Cet exemple pratique illustre la communication série, le réseau Wi-Fi et le stockage cloud – des compétences essentielles pour les développeurs embarqués modernes.
Étape 1 – Comprendre le rôle de chaque carte
L'UNO sert d'interface capteur tandis que l'ESP8266 agit comme passerelle Wi-Fi. Ils communiquent par le port série ; l'ESP8266 ne se connecte pas directement à Internet, seul le module Wi-Fi le fait. Gardez le code séparé pour chaque carte pour éviter toute confusion.
Étape 2 – Connecter le LCD à l'UNO
Utilisez l'I2C pour la simplicité et l'économie de broches. Le module DFRobot 20x4 fonctionne directement. Si vous utilisez un afficheur 20x4, mettez à jour le constructeur : LiquidCrystal_I2C lcd(0x3F, 20, 4);.
Étape 3 – Câbler le DHT11 sur le second UNO
Suivez le tutoriel officiel Arduino DHT11 pour le câblage et l'installation de la bibliothèque. Le capteur ne nécessite qu'une seule broche de données (A0 dans notre exemple).
Étape 4 – Configurer l'ESP8266 avec Firebase
Configurez les identifiants Wi-Fi et les détails du projet Firebase dans le sketch. La Firebase Realtime Database offre une arborescence JSON simple où l'ESP8266 écrit les nœuds temperature et humidity. Pour les débutants, la vidéo tutorielle couvre chaque étape en détail.
Étape 5 – Maîtriser la communication série
Lors de la transmission de données par série, n'envoyez que la chaîne requise. Toute impression de débogage supplémentaire peut casser le protocole. Dans notre implémentation, l'UNO capteur envoie une chaîne séparée par des virgules (ex: 25.3,60.1) à l'ESP8266, qui l'analyse et transmet chaque valeur à Firebase.
Étape 6 – Téléverser et tester
Téléversez le sketch capteur sur le premier UNO, le sketch capteur-ESP8266 sur le premier ESP8266, et le sketch LCD-ESP8266 sur le second ESP8266. Vérifiez que le LCD se met à jour avec de nouvelles lectures toutes les quelques secondes. Débranchez toujours le câble USB de l'Arduino avant de déconnecter les fils pour éviter les courts-circuits accidentels.
Problèmes courants et solutions
- Échec de téléversement sur ESP8266 : Sélectionnez la carte ESP8266 générique dans l'IDE. Si le sketch ne se téléverse toujours pas, réinitialisez la carte, réinsérez le module et réessayez.
- Échec de téléversement sur UNO : Assurez-vous que le câble USB est connecté avant de lancer le téléversement. Retirez le GPIO-0 (IO0) de l'ESP8266 de la masse pendant la programmation.
- Désaccord série : Connectez TX de l'ESP8266 à RX de l'UNO et RX de l'ESP8266 à TX de l'UNO (croisés). N'imprimez aucune chaîne non-données pendant la communication.
- Artefacts sur le LCD : Les délais série peuvent provoquer l'affichage de caractères aléatoires. L'exécution de
lcd.clear()avant chaque nouvel affichage résout la plupart des problèmes.
Extraits de code
- lcd_arduino.ino
- lcd_esp8266.ino
- sensor_arduino.ino
- sensor_esp8266.ino
lcd_arduino.ino (Arduino)
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
String sensorData;
void setup() {
Serial.begin(9600);
lcd.begin(20, 4);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.setCursor(18, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.setCursor(15, 1);
lcd.print("%");
}
void loop() {
if (Serial.available()) {
sensorData = Serial.readString();
String temp = sensorData.substring(0, sensorData.indexOf(','));
String hum = sensorData.substring(sensorData.indexOf(',') + 1);
lcd.clear();
lcd.setCursor(13, 0);
lcd.print(temp);
lcd.setCursor(10, 1);
lcd.print(hum);
}
delay(2000);
}
lcd_esp8266.ino (ESP8266)
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "VOTRE_LIEN_FIREBASE"
#define FIREBASE_AUTH "VOTRE_JETON_FIREBASE"
#define WIFI_SSID "VOTRE_SSID_WIFI"
#define WIFI_PASSWORD "VOTRE_MOT_DE_PASSE_WIFI"
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
String temp = Firebase.getString("temperature");
String hum = Firebase.getString("humidity");
Serial.flush();
Serial.print(temp + "," + hum);
delay(2000);
}
sensor_arduino.ino (Arduino)
#include <SoftwareSerial.h>
#include <dht.h>
#define DHT_PIN A0
DHT dht;
void setup() {
Serial.begin(9600);
}
void loop() {
dht.read11(DHT_PIN);
String data = String(dht.temperature) + "," + String(dht.humidity);
Serial.flush();
Serial.print(data);
delay(2000);
}
sensor_esp8266.ino (ESP8266)
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST "VOTRE_LIEN_FIREBASE"
#define FIREBASE_AUTH "VOTRE_JETON_FIREBASE"
#define WIFI_SSID "VOTRE_SSID_WIFI"
#define WIFI_PASSWORD "VOTRE_MOT_DE_PASSE_WIFI"
void setup() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.begin(9600);
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop() {
if (Serial.available()) {
String payload = Serial.readString();
int comma = payload.indexOf(',');
String temp = payload.substring(0, comma);
String hum = payload.substring(comma + 1);
Firebase.setString("temperature", temp);
Firebase.setString("humidity", hum);
if (Firebase.failed()) {
Serial.println("Échec d'écriture vers Firebase");
}
}
delay(2000);
}
Processus de fabrication
- Streaming de données de température en temps réel depuis un ppDAQC Pi‑Plate vers InitialState avec un Raspberry Pi headless
- Surveillance temps réel de panneau solaire avec Arduino : Acquisition de données bas coût
- Robot de détection humaine basé sur Arduino Uno : Intégration capteurs étape par étape
- Construire un Capteur de Rythme Cardiaque Infrarouge Fiable avec Arduino : Guide Étape par Étape
- Mesure de distance en temps réel par sonar Arduino et visualisation Processing
- Contrôle fluide de la luminosité LED avec Bolt IoT et Arduino UNO
- Intégrer le capteur de pouls MAX30100 avec Arduino : Guide complet
- Guide pas à pas : Connecter le capteur d'humidité du sol YL-39/YL-69 à un Arduino UNO
- Migration CMMS sans heurts : directives expertes pour le transfert de données