Dalam panduan ini, kalian akan mempelajari cara mengirim pembacaan sensor DHT11 ke Firebase Realtime Database menggunakan board NodeMCU ESP8266. Board ESP akan mengautentikasi sebagai user dengan alamat email dan password, dan kalian akan menambahkan security database untuk mengamankan data kalian.
Apa itu Firebase?
Firebase adalah platform pengembangan Mobile Application dari Google yang dapat membantu kalian membangun, meningkatkan, dan mengembangkan aplikasi kalian. Firebase memiliki banyak layanan yang dapat digunakan untuk mengelola data dari aplikasi Android, iOS, atau web seperti otentikasi, realtime database, hosting, dll.
Komunikasi ESP8266 dengan Firebase
- ESP8266 mengautentikasi sebagai user dengan Alamat email dan password.
- Setelah autentikasi, ESP mendapatkan UID pengguna.
- Database diproteksi dengan security rules. Pengguna hanya dapat mengakses node database yang terhubung dengan UID penggunanya.
- Setelah mendapatkan UID pengguna, ESP dapat mempublikasikan data ke database.
- ESP mengirimkan suhu dan kelembaban ke database.
Membuat Project Firebase
- Buka website Firebase https://firebase.google.com/ dan masuk menggunakan Akun Google.
- Klik “Get Started” lalu “Add project” untuk membuat project baru.
- Beri nama pada project kalian, misalnya ESP8266 Firebase Test.
- Disable opsi “Enable Google Analytics for this project”.
- Kalian telah membuat sebuah database Project di firebase.
Setting Metode Autentikasi
Untuk autentikasi dengan email dan password, pertama-tama kalian perlu mengkonfigurasi metode autentikasi untuk aplikasi kalian.
Sebagian besar aplikasi perlu mengetahui identitas pengguna dalam hal ini ESP8266. Dengan mengetahui identitas pengguna memungkinkan aplikasi menyimpan data pengguna dengan aman di cloud dan memberikan personalized experience yang sama di semua perangkat pengguna.
1. Pada sidebar sebelah kiri, klik Build > Authentication lalu klik Get started.
2. Pilih opsi “Email/Password”
3. Enable metode autentikasi tersebut, lalu klik “Save”.
4. Autentikasi dengan email dan password saat ini sudah enable.
5. Sekarang, kalian perlu menambahkan pengguna. Pada tab Authentication, pilih tab Users di bagian atas. Kemudian, klik Add User.
6. Tambahkan alamat email pengguna. Bisa berupa email akun Google kalian atau email lainnya. Tambahkan password yang akan digunakan untuk masuk ke aplikasi dan mengakses database. Jangan lupa untuk menyimpan passwordnya di tempat yang aman karena nanti kalian akan membutuhkannya. Setelah selesai, klik Add user.
7. Pengguna baru berhasil dibuat dan ditambahkan ke tabel Users.
Firebase telah membuat UID unik untuk setiap pengguna yang terdaftar. UID pengguna memungkinkan kita untuk mengidentifikasi pengguna dan melacak pengguna, juga dapat digunakan untuk memberikan atau menolak akses pengguna tersebut ke project atau database. Ada juga kolom yang mencatat tanggal login terakhir. Saat ini kosong karena kita belum masuk dengan pengguna tersebut.
Mendapatkan API Key Project
Untuk berinteraksi dengan project Firebase menggunakan ESP8266, kalian perlu mendapatkan API Key project kalian. Ikuti langkah selanjutnya untuk mendapatkan API Key project kalian.
1. Pada menu sidebar disebelah kiri, klik “Project Settings”.
2. Copy Web API Key,kita akan gunakan nanti.
Setup Realtime Database
1. Pada menu sidebar disebelah kiri, klik “Realtime Database” lalu klik “Create Database”.
2. Pilih lokasi database, sebaiknya pilih lokasi yang terdekat dengan lokasi kalian.
3. Set Security Rules untuk database kalian. Kalian dapat memilih “Start in test mode” Kita akan mengubahnya nanti
4. Database kalian sudah dibuat. Kalian perlu copy dan paste URL database kalian. Kita akan menggunakannya nanti
Setup Security Rules
Sekarang saatnya kita setting database security rules. Pada halaman “Realtime Database”, pilih tab “Rules” dibagian atas. Copy format rules dibawah, lalu paste dan klik “Publish”
{
"rules": {
"UsersData": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
Rules ini akan memberikan akses ke node yang cocok dengan UID pengguna yang diautentikasi. Hal ini memberikan hak kepada setiap pengguna yang diautentikasi agar hanya dapat mengakses datanya sendiri. Ini berarti pengguna hanya dapat mengakses node dengan UID pengguna yang sesuai. Jika ada data lain yang dipublikasikan di database, bukan dengan node dengan UID pengguna, pengguna tersebut tidak dapat mengakses data tersebut.
ESP8266 Mengirim Pembacaan Data dari Sensor ke Database
Di bagian ini, kita akan memprogram ESP8266 untuk melakukan tugas berikut:
- Autentikasi sebagai pengguna dengan email dan password (gunakan email dan password yang telah kalian tentukan sebelumnya).
- Kirim pembacaan sensor ke realtime database sebagai pengguna.
Sekarang mari sambungkan sensor DHT ke ESP8266 kalian:
Pertama, letakkan sensor pada bread board. Kemudian, sambungkan pin VCC dari sensor DHT11 ke pin 3V3 ESP8266, pin DATA dari sensor DHT11 ke pin 5 ESP8266, dan pin GND dari sensor ESP8266 ke pin GND ESP8266 menggunakan kabel jumper. Seperti pada gambar dibawah:
Untuk membaca data dari sensor DHT, kita akan menggunakan library DHT dari Adafruit. Untuk menggunakan library ini kita juga perlu menginstall library Adafruit Unified Sensor. Ikuti langkah dibawah untuk menginstall library:
- Buka Arduino IDE kalian dan buka Sketch > Include Library > Manage Libraries. Library Manager akan terbuka.
- Cari “DHT” di kotak Pencarian dan install library DHT dari Adafruit.
- Setelah menginstall library DHT dari Adafruit, ketik “Adafruit Unified Sensor” di kotak pencarian. Pilih dan install.
- Install Library “Firebase Arduino Client Library for ESP8266 and ESP32”.
- Setelah menginstall libraries, restart Arduino IDE kalian
Kemudian copy baris kode dibawah dan paste ke dalam Arduino IDE.
// Import libraries yang dibutuhkan
#include "DHT.h"
#include
#if defined(ESP32)
#include
#elif defined(ESP8266)
#include
#endif
#include
#include
#include
// Tambahkan token generation process info.
#include "addons/TokenHelper.h"
// Tambahkan RTDB payload printing info dan fungsi pendukung lainnya.
#include "addons/RTDBHelper.h"
// Masukkan WiFi Credential kalian
#define WIFI_SSID "Nama WiFi"
#define WIFI_PASSWORD "Password WiFi"
// Masukkan Web API Key Firebase
#define API_KEY "XXXXXXXXXXXXXXXXXXXXXXXXX"
// Masukkan email dan password pengguna
#define USER_EMAIL "XXXXXX@XXXXX.com"
#define USER_PASSWORD "XXXXXXXXXX"
// Masukkan Database URL Firebase
#define DATABASE_URL "XXXXXXXXXXXXXXXXXXXXXXXX"
// Tentukan digital pin yang terkoneksi ke DATA sensor DHT11
#define DHTPIN D1
// Tentukan sensor yang kita gunakan
#define DHTTYPE DHT11
// Inisialisai sensor DHT.
DHT dht(DHTPIN, DHTTYPE);
// Definisikan object Firebase
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
// Buat sebuah variabel untuk menyimpan data UID
String uid;
// Buat sebuah variabel untuk menyimpan path Database
String databasePath;
String tempPath;
String humPath;
// Kirim pembacaan dari sensor setiap 1 menit
unsigned long sendDataPrevMillis = 0;
unsigned long timerDelay = 60000;
// Inisialisasi WiFi
void initWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
Serial.println();
}
// Menulis data ke database
void sendFloat(String path, float value) {
if (Firebase.RTDB.setFloat(&fbdo, path.c_str(), value)) {
Serial.print("Menulis data: ");
Serial.print(value);
Serial.print(" kedalam path database: ");
Serial.println(path);
Serial.println("BERHASIL");
Serial.println("PATH: " + fbdo.dataPath());
Serial.println("TYPE: " + fbdo.dataType());
} else {
Serial.println("GAGAL");
Serial.println("ALASAN: " + fbdo.errorReason());
}
}
void setup() {
Serial.begin(115200);
initWiFi();
// Menentukan API Key
config.api_key = API_KEY;
// Menentukan Credential Pengguna
auth.user.email = USER_EMAIL;
auth.user.password = USER_PASSWORD;
// Menentukan Database URL
config.database_url = DATABASE_URL;
Firebase.reconnectWiFi(true);
fbdo.setResponseSize(4096);
// Menentukan Callback function status
config.token_status_callback = tokenStatusCallback;
// Menentukan maksimal generate token
config.max_token_generation_retry = 5;
// Inisialisasi Library dengan autentikasi dan config Firebase
Firebase.begin(&config, &auth);
// Mengambil data UID pengguna
Serial.println("Mengambil Data UID Pengguna");
while ((auth.token.uid) == "") {
Serial.print('.');
delay(1000);
}
// Print UID pengguna
uid = auth.token.uid.c_str();
Serial.print("UID Pengguna: ");
Serial.println(uid);
// Update path database
databasePath = "/UsersData/" + uid;
// Update path database untuk pembacaan sensor
tempPath = databasePath + "/temperature"; // --> UsersData//temperature
humPath = databasePath + "/humidity"; // --> UsersData//humidity
// Menghubungkan sensor DHT
dht.begin();
}
void loop() {
// Mengirim Pembacaan sensor ke database
if (Firebase.ready() && (millis() - sendDataPrevMillis > timerDelay || sendDataPrevMillis == 0)) {
sendDataPrevMillis = millis();
// Membaca kelembaban dan suhu dari DHT
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
sendFloat(tempPath, temperature);
sendFloat(humPath, humidity);
}
}
Upload Sketch
Pilih Tools > Board > ESP8266 Boards > Lalu pilih jenis board yang kalian gunakan. (Dalam contoh ini saya menggunakan board ESP8266 NodeMCU.
Kalian harus memilih model board ESP8266 dan COM port. Dalam contoh ini, kami menggunakan papan NodeMCU 1.0. Klik OK setelah selesai.
Sekarang, kalian hanya perlu mengklik tombol Upload.
Setelah beberapa detik, upload akan selesai.
Serial Monitor
Kalian dapat mengklik ikon Serial Monitor untuk membuka tab Serial Monitor. Akan tampil status pengiriman data ke Database Firebase.
Data kalian sudah masuk kedalam Realtime Database Firebase.
Selamat… Kalian telah berhasil mengirimkan data suhu dan kelembaban dari sensor DHT ke Realtime Database Firebase.