Temperatuur- en vochtigheidsdata overdragen tussen twee Arduinos via Firebase
Onderdelen & Benodigdheden
| Arduino UNO | × | 2 |
| ESP8266 ESP-01 | × | 2 |
| DHT11 Temperatuur- & Vochtigheidssensor (3-pins) | × | 1 |
| DFRobot I2C 16x2 LCD Display | × | 1 |
| Breadboard (generiek) | × | 2 |
| Male/Female Jumper Draden | × | 1 |
Apps & Online Diensten
- Arduino IDE
- Google Firebase
Projectoverzicht
In deze IoT-tutorial lees je temperatuur en vochtigheid van een DHT11-sensor op één Arduino UNO, push je de waarden naar Firebase via een ESP8266, en haal je die waarden weer op op een tweede Arduino UNO om ze weer te geven op een I2C LCD. Deze praktische voorbeeld demonstreert seriële communicatie, Wi-Fi-netwerken en cloud-datastopslag — alle essentiële vaardheden voor moderne embedded-ontwikkelaars.
Stap 1 – Begrijp de rol van elk bord
De UNO fungeert als sensorinterface terwijl de ESP8266 fungeert als Wi-Fi-gateway. Ze communiceren via de seriële poort; de ESP8266 maakt nooit direct verbinding met het internet, alleen de Wi-Fi-module doet dat. Houd de code voor elk bord gescheiden om verwarring te voorkomen.
Stap 2 – Sluit de LCD aan op de UNO
Gebruik I2C voor eenvoud en minder piningebruik. Het 20x4 LCD-voorbeeld in de DFRobot-module werkt out-of-the-box. Als je een 20x4 display gebruikt, werk de constructor bij naar LiquidCrystal_I2C lcd(0x3F, 20, 4);.
Stap 3 – Sluit de DHT11 aan op de tweede UNO
Volg de officiële Arduino DHT11-tutorial voor bedrading en bibliotheekinstallatie. De sensor vereist slechts een enkele datapin (A0 in ons voorbeeld).
Stap 4 – Stel de ESP8266 in met Firebase
Configureer Wi-Fi-gegevens en Firebase-projectdetails in de sketch. De Firebase Realtime Database biedt een simpele JSON-boomstructuur waar de ESP8266 temperature en humidity knooppunten naar schrijft. Voor beginners behandelt de tutorialvideo elke stap in detail.
Stap 5 – Beheers seriële communicatie
Bij het verzenden van data via seriële poort, geef alleen de vereiste string uit. Extra debug-prints kunnen het protocol breken. In onze implementatie stuurt de sensor-UNO een komma-gescheiden string (bijv. 25,3,60,1) naar de ESP8266, die deze parset en elke waarde naar Firebase doorstuurt.
Stap 6 – Uploaden en testen
Upload de sensor-sketch naar de eerste UNO, de sensor-ESP8266-sketch naar de eerste ESP8266, en de LCD-ESP8266-sketch naar de tweede ESP8266. Controleer of de LCD elke paar seconden met nieuwe metingen wordt bijgewerkt. Los altijd de Arduino USB-kabel los voordat je jumperdraden verwijdert om ongewilde kortsluitingen te voorkomen.
Veelvoorkomende problemen & oplossingen
- Uploadmislukking naar ESP8266: Selecteer het generieke ESP8266-bord in de IDE. Als de sketch nog steeds niet uploadt, reset het bord, plaats de module opnieuw, en probeer opnieuw.
- Uploadmislukking naar UNO: Zorg dat de USB-kabel is aangesloten voordat je de uploader start. Verwijder de ESP8266's GPIO-0 (IO0) van GND tijdens programmeren.
- Seriële mismatch: Verbind ESP8266 TX met UNO RX en ESP8266 RX met UNO TX (gekrust). Print geen non-data strings tijdens communicatie.
- LCD-storingen: Seriële vertragingen kunnen ervoor zorgen dat de LCD willekeurige karakters toont. Het uitvoeren van
lcd.clear()voor het printen van elke nieuwe waardenset lost de meeste problemen op.
Code-fragmenten
- 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("Temperatuur: ");
lcd.setCursor(18, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Vochtigheid: ");
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 "JOUW_FIREBASE_LINK"
#define FIREBASE_AUTH "JOUW_FIREBASE_TOKEN"
#define WIFI_SSID "JOUW_WIFI_SSID"
#define WIFI_PASSWORD "JOUW_WIFI_WACHTWOORD"
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 "JOUW_FIREBASE_LINK"
#define FIREBASE_AUTH "JOUW_FIREBASE_TOKEN"
#define WIFI_SSID "JOUW_WIFI_SSID"
#define WIFI_PASSWORD "JOUW_WIFI_WACHTWOORD"
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("Schrijven naar Firebase mislukt");
}
}
delay(2000);
}
Productieproces
- Real-time Temperatuurdata Streamen van een ppDAQC Pi-Plate naar InitialState met een Headless Raspberry Pi
- Real-time zonnepaneelmonitoring met Arduino: Goedkope data-acquisitie
- Arduino Uno Gebaseerde Mensendetectie Robot: Stap-voor-stap Sensorintegratie
- Bouw een betrouwbare infrarode hartslagsensor met Arduino: stapsgewijze handleiding
- Realtime afstandsmeting met Arduino Sonar & Processing visualisatie
- Naadloze LED-dimmer met Bolt IoT en Arduino UNO
- MAX30100 hartslagsensor integreren met Arduino: Stapsgewijze handleiding
- Stapsgewijze handleiding: YL-39/YL-69 bodemvochtigheidsensor aan Arduino UNO koppelen
- Een PHP-webinterface bouwen om je Arduino Uno te besturen
- Kantelhoeken berekenen uit MPU6050 versnelling met Arduino Nano en Visuino
- Naadloze CMMS Migratie: Expert Richtlijnen voor Dataoverdracht