Temperatur- und Luftfeuchtedaten zwischen zwei Arduinos via Firebase übertragen
Komponenten & Zubehör
| Arduino UNO | × | 2 |
| ESP8266 ESP-01 | × | 2 |
| DHT11 Temperatur- & Luftfeuchtigkeitssensor (3-polig) | × | 1 |
| DFRobot I2C 16x2 LCD Display | × | 1 |
| Steckbrett (generisch) | × | 2 |
| Male/Female Jumper-Kabel | × | 1 |
Apps & Online-Dienste
- Arduino IDE
- Google Firebase (Realtime Database)
Projektübersicht
In diesem IoT-Tutorial lesen Sie Temperatur und Luftfeuchtigkeit von einem DHT11-Sensor an einem Arduino UNO aus, senden die Werte via ESP8266 an Firebase und rufen sie auf einem zweiten Arduino UNO ab, um sie auf einem I2C-LCD anzuzeigen. Dieses praxisnahe Beispiel demonstriert serielle Kommunikation, Wi-Fi-Netzwerke und Cloud-Datenspeicherung – alles essenzielle Fähigkeiten für moderne Embedded-Entwickler.
Schritt 1 – Rollen der Boards verstehen
Der UNO dient als Sensor-Schnittstelle, während der ESP8266 als Wi-Fi-Gateway fungiert. Sie kommunizieren über den seriellen Port; der ESP8266 verbindet sich nicht direkt mit dem Internet, nur das Wi-Fi-Modul tut dies. Halten Sie den Code für jedes Board separat, um Verwirrung zu vermeiden.
Schritt 2 – LCD an den UNO anschließen
Nutzen Sie I2C für Einfachheit und reduzierten Pin-Verbrauch. Das 20x4 LCD-Beispiel im DFRobot-Modul funktioniert out-of-the-box. Bei einem 20x4 Display aktualisieren Sie den Konstruktor zu LiquidCrystal_I2C lcd(0x3F, 20, 4);.
Schritt 3 – DHT11 am zweiten UNO verdrahten
Folgen Sie dem offiziellen Arduino DHT11 Tutorial für Verdrahtung und Bibliotheksinstallation. Der Sensor benötigt nur einen einzelnen Datenpin (in unserem Beispiel A0).
Schritt 4 – ESP8266 mit Firebase einrichten
Konfigurieren Sie Wi-Fi-Zugangsdaten und Firebase-Projektdetails im Sketch. Die Firebase Realtime Database bietet einen einfachen JSON-Baum, in den der ESP8266 temperature und humidity Knoten schreibt. Für Einsteiger deckt das Tutorial-Video jeden Schritt detailliert ab.
Schritt 5 – Serielle Kommunikation meistern
Bei der Datenübertragung über Serial geben Sie nur den benötigten String aus. Zusätzliche Debug-Ausgaben können das Protokoll brechen. In unserer Implementierung sendet der Sensor-UNO einen kommagetrennten String (z. B. 25,3,60,1) an den ESP8266, der parst und jeden Wert an Firebase weiterleitet.
Schritt 6 – Hochladen und Testen
Laden Sie den Sensor-Sketch auf den ersten UNO, den Sensor-ESP8266-Sketch auf den ersten ESP8266 und den LCD-ESP8266-Sketch auf den zweiten ESP8266 hoch. Verifizieren Sie, dass das LCD alle paar Sekunden mit frischen Werten aktualisiert wird. Trennen Sie stets das Arduino-USB-Kabel, bevor Sie Jumper-Kabel abziehen, um versehentliche Kurzschlüsse zu vermeiden.
Häufige Probleme & Lösungen
- Upload-Fehler beim ESP8266: Wählen Sie im IDE das generische ESP8266-Board. Wenn der Sketch trotzdem nicht hochlädt, setzen Sie das Board zurück, stecken Sie das Modul neu ein und versuchen Sie es erneut.
- Upload-Fehler beim UNO: Stellen Sie sicher, dass das USB-Kabel vor dem Start des Uploaders verbunden ist. Entfernen Sie den ESP8266 GPIO-0 (IO0) von GND während der Programmierung.
- Serial-Mismatch: Verbinden Sie ESP8266 TX mit UNO RX und ESP8266 RX mit UNO TX (gekreuzt). Drucken Sie keine Nicht-Daten-Strings während der Kommunikation.
- LCD-Fehler: Serielle Verzögerungen können zufällige Zeichen auf dem LCD verursachen.
lcd.clear()vor jedem neuen Wertesatz löst die meisten Probleme.
Code-Snippets
- 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("Temperatur: ");
lcd.setCursor(18, 0);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Luftfeuchte: ");
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 "DEIN_FIREBASE_LINK"
#define FIREBASE_AUTH "DEIN_FIREBASE_TOKEN"
#define WIFI_SSID "DEIN_WIFI_SSID"
#define WIFI_PASSWORD "DEIN_WIFI_PASSWORT"
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 "DEIN_FIREBASE_LINK"
#define FIREBASE_AUTH "DEIN_FIREBASE_TOKEN"
#define WIFI_SSID "DEIN_WIFI_SSID"
#define WIFI_PASSWORD "DEIN_WIFI_PASSWORT"
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("Fehler beim Schreiben in Firebase");
}
}
delay(2000);
}
Herstellungsprozess
- Echtzeit-Temperaturdaten vom ppDAQC Pi‑Plate zu InitialState streamen – Headless Raspberry Pi
- Echtzeit-Solarmonitoring mit Arduino: Low-Cost Datenerfassungssystem
- Arduino-Uno-Roboter zur Personenerkennung – Sensorintegration Schritt für Schritt
- DIY Infrarot-Herzschlag-Sensor mit Arduino: Schritt-für-Schritt-Anleitung
- Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
- Stufenlose LED-Helligkeitssteuerung mit Bolt IoT und Arduino UNO
- MAX30100 Puls-Sensor mit Arduino integrieren: Schritt-für-Schritt-Anleitung
- Schritt-für-Schritt: YL-39/YL-69 Bodenfeuchtesensor an Arduino UNO anschließen
- PHP-Webinterface zur Steuerung des Arduino Uno – Komplettanleitung
- Nahtlose CMMS-Migration: Experten-Leitfaden für Datentransfer