Mentransfer Data Suhu dan Kelembaban antara Dua Arduino menggunakan Firebase
Komponen dan Perlengkapan
 | | × | 2 | |
 | | × | 2 | |
 | | Sensor Suhu dan Kelembaban DHT11 (3-pin) |
| × | 1 | |
 | | Tampilan LCD I2C 16x2 DFRobot |
| × | 1 | |
 | | Papan Breadboard (generik) |
| × | 2 | |
 | | Kabel Jumper Machan/Femina |
| × | 1 | |
Aplikasi dan Layanan Online
Ringkasan Proyek
Dalam tutorial IoT ini, Anda akan membaca suhu dan kelembaban dari sensor DHT11 pada satu Arduino UNO, mengirimkan nilai ke Firebase melalui ESP8266, lalu menarik kembali pembacaan pada Arduino UNO kedua untuk ditampilkan pada LCD I2C. Contoh praktis ini menunjukkan komunikasi serial, jaringan Wi-Fi, dan penyimpanan data cloud—semua keterampilan penting bagi pengembang embedded modern.
Langkah 1 – Pahami Peran Setiap Papan
UNO berfungsi sebagai antarmuka sensor sementara ESP8266 bertindak sebagai gateway Wi-Fi. Mereka berkomunikasi melalui port serial; ESP8266 tidak terhubung langsung ke internet, hanya modul Wi-Fi yang melakukannya. Pisahkan kode untuk setiap papan untuk menghindari kebingungan.
Langkah 2 – Hubungkan LCD ke UNO
Gunakan I2C untuk kesederhanaan dan penggunaan pin yang lebih sedikit. Contoh LCD 20x4 di modul DFRobot berfungsi langsung. Jika Anda menggunakan layar 20x4, perbarui konstruktor menjadi LiquidCrystal_I2C lcd(0x3F, 20, 4);.
Langkah 3 – Pasang DHT11 pada UNO Kedua
Ikuti tutorial resmi Arduino DHT11 untuk pemasangan dan pemasangan library. Sensor hanya memerlukan satu pin data (A0 dalam contoh kami).
Langkah 4 – Siapkan ESP8266 dengan Firebase
Konfigurasikan kredensial Wi-Fi dan detail proyek Firebase dalam sketsa. Firebase Realtime Database menyediakan pohon JSON sederhana di mana ESP8266 menulis node temperature dan humidity. Untuk pemula, video tutorial mencakup setiap langkah secara detail.
Langkah 5 – Kuasai Komunikasi Serial
Saat mentransmisikan data melalui serial, keluarkan hanya string yang diperlukan. Print debug tambahan dapat merusak protokol. Dalam implementasi kami, UNO sensor mengirimkan string yang dipisahkan koma (misalnya, 25.3,60.1) ke ESP8266, yang kemudian mengurai dan meneruskan setiap nilai ke Firebase.
Langkah 6 – Unggah dan Uji
Unggah sketsa sensor ke UNO pertama, sketsa sensor-ESP8266 ke ESP8266 pertama, dan sketsa LCD-ESP8266 ke ESP8266 kedua. Verifikasi bahwa LCD memperbarui pembacaan segar setiap beberapa detik. Selalu lepaskan kabel USB Arduino sebelum mencabut kabel jumper apa pun untuk mencegah kesedutan sengaja.
Jebakan Umum & Perbaikan
- Gagal Mengunggah ke ESP8266: Pilih papan ESP8266 generik di IDE. Jika sketsa masih tidak dapat diunggah, reset papan, masukkan kembali modul, dan coba lagi.
- Gagal Mengunggah ke UNO: Pastikan kabel USB terhubung sebelum meluncurkan pengunggah. Lepaskan GPIO-0 (IO0) ESP8266 dari GND selama pemrograman.
- Ketidakcocokan Serial: Hubungkan TX ESP8266 ke RX UNO dan RX ESP8266 ke TX UNO (silang). Jangan mencetak string non-data selama komunikasi.
- Gangguan LCD: Jeda serial dapat menyebabkan LCD menampilkan karakter acak. Menjalankan
lcd.clear() sebelum mencetak setiap set nilai baru memecahkan sebagian besar masalah.
Cuplikan Kode
- 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 "YOUR_FIREBASE_LINK" #define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN" #define WIFI_SSID "YOUR_WIFI_SSID" #define WIFI_PASSWORD "YOUR_WIFI_PASSWORD" 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 "YOUR_FIREBASE_LINK" #define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN" #define WIFI_SSID "YOUR_WIFI_SSID" #define WIFI_PASSWORD "YOUR_WIFI_PASSWORD" 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("Failed to write to Firebase"); } } delay(2000); }