Hi BDX-ian!
Tutorial kali ini kita akan belajar tentang cara nak hantar data dari NodeMCU ESP8266 ke Realtime Database Firebase. Data yang akan dihantar adalah jarak obejk dari ultrasonic sensor dan Timestamp dari NTP Server.
Apa itu Firebase?
Firebase merupakan platform yang dibangunkan oleh Google untuk menghasilkan aplikasi mobile dan web. Ia pada asalnya merupakan sebuah syarikat bebas yang diasaskan pada tahun 2011. Pada tahun 2014, Google memperoleh platform ini untuk membantu developers menghasilkan Real-Time Apps yang lebih baik.
Jika anda belum pernah membuat projek dengan NodeMCU ESP8266, lihat tutorial kami sebelum ini Cara install board NodeMCU pada Arduino IDE untuk mengikuti langkah di bawah.
1. Install library Firebase ESP8266 ke dalam Arduino IDE
Download Library Firebase ESP8266 dari Arduino IDE.
Dalam Arduino IDE, Navigasi ke:
Sketch > Include Libraries > Manage Libraries
Dalam ruangan Search, buat carian “Firebase ESP8266 Client”,
kemudian Install Library “Firebase ESP8266 Client by Moozbit”
2. Install library NTP Client ke dalam Arduino IDE
Download Library NTP Client dari Arduino IDE.
Dalam Arduino IDE, Navigasi ke:
Sketch > Include Libraries > Manage Libraries
Dalam ruangan Search, searchkan “NTP Client”,
kemudian Install Library “NTPClient by Fabrice Weinberg”
Setting up Google Firebase
3. Create Account di Google Firebase
Pergi ke Firebase (https://firebase.google.com/)
Jika anda sudah ada id Gmail, anda sudah pun Sign Up untuk Firebase. Tetapi jika anda tidak ada id Gmail, Sign Up akaun Gmail terlebih dahulu di https://gmail.com/
4. Mulakan dengan “Get Started” & "Create Project"
Klik pada “Get Started”, kemudian klik pada “Create a Project”.
Berikan nama pada projek anda. Kemudian, tekan “Continue”.
Tekan “I Accept the Firebase Terms”. Kemudian, tekan "Create project"
5. Disable” Google Analytics ”
Pilih Disable “Google Analytics” kerana projek ini tidak perlukan pilihan ini. Kemudian, klik “Create Project”.
Klik “Continue” untuk ke page Project console anda.
6. Create Realtime Database
Pada Sidebar kiri page, klik “Realtime Database”.
Klik pada “Create Database”.
Pilih lokasi database anda dan klik “Next”.
Set up Security Rules. Untuk tujuan ujian, pilih “Start in Test Mode”.
Copy dan Paste Database URL untuk memasukkan ke dalam code anda.
Tekan "Project Settings".
Pergi ke "Service accounts", kemudian tekan "Database secrets". Kemudian, tekan "Show" untuk menunjukkan Database Secret projek anda. Copy dan paste kod Secret ke dalam code anda.
7. Komponen
Komponen yang diperlukan
- Ultrasonic Sensor
- NodeMCU ESP8266 dan USB
- Breadboard
- Jumper wire
8. Litar
Ultrasonic sensor
- VCC → pin Vin ESP8266
- TRIG → pin D7 ESP8266
- ECHO → pin D8 ESP8266
- GND → GND ESP8266
9. Code
#include "FirebaseESP8266.h" #include <ESP8266WiFi.h> #include <NTPClient.h> #include <WiFiUdp.h>
#define FIREBASE_HOST "Database URL projek anda" //<databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app #define FIREBASE_AUTH "Database Secret anda" #define WIFI_SSID "Nama WiFi anda" #define WIFI_PASSWORD "Password WiFi anda"
WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org");
const int trigPin = 13; const int echoPin = 15;
//Define Firebase Data object FirebaseData firebaseData; FirebaseData fbdo; long duration; int distance;
unsigned long dataMillis = 0;
void setup() { Serial.begin(115200); Serial.println(); Serial.println(); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(300); } Serial.println(); Serial.print("Connected with IP: "); Serial.println(WiFi.localIP()); Serial.println(); timeClient.begin(); timeClient.setTimeOffset(28800); Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); Firebase.reconnectWiFi(true); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); }
void loop() { if (millis() - dataMillis > 5000) { dataMillis = millis(); Serial.println("------------------------------------"); Serial.println("Set Timestamp test..."); getTime(); getDistance(); delay(500); } }
void getDistance() { // trigPin HIGH por 10ms digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration/2)/29.1;
if (Firebase.setInt(fbdo, "/Set/Distance", distance)) { // Prints the distance value to the serial monitor Serial.print("Distance: "); Serial.println(distance); } else { Serial.println("DISTANCE FAILED"); Serial.println("REASON: " + firebaseData.errorReason()); Serial.println("------------------------------------"); Serial.println(); return; } }
void getTime() { timeClient.update();
unsigned long long epochTime = timeClient.getEpochTime();
if (Firebase.setInt(firebaseData, "/Set/Timestamp/Epoch time", epochTime)){ Serial.print("Epoch Time: "); Serial.println(epochTime); } String formattedTime = timeClient.getFormattedTime(); if (Firebase.setString(firebaseData, "/Set/Timestamp/Formatted_time", formattedTime)){ Serial.print("Formatted Time: "); Serial.println(formattedTime); } int currentHour = timeClient.getHours(); if (Firebase.setString(firebaseData, "/Set/Timestamp/current_hour", String(currentHour))){ Serial.print("Hour: "); Serial.println(currentHour); } int currentMinute = timeClient.getMinutes(); if (Firebase.setString(firebaseData, "/Set/Timestamp/current_minutes", String(currentMinute))){ Serial.print("Minutes: "); Serial.println(currentMinute); } int currentSecond = timeClient.getSeconds(); if (Firebase.setString(firebaseData, "/Set/Timestamp/current_seconds", String(currentSecond))){ Serial.print("Seconds: "); Serial.println(currentSecond); }
Serial.println("");
delay(2000); }
|
Penting
Gantikan perkara ini ke dalam code anda.
#define FIREBASE_HOST "Database URL projek anda" //<databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app #define FIREBASE_AUTH "Database Secret projek anda" #define WIFI_SSID "Nama WiFi anda" #define WIFI_PASSWORD "Password WiFi anda" |
11. Output
Apabila objek berada dihadapan sensor.
-Firebase
Firebase menunjukkan data jarak dan Timestamp Realtime Database dari NodeMCU ESP8266.
-Serial Monitor
Output Serial Monitor menunjukkan jarak dan Timestamp dari NodeMCU ESP8266.
Jika anda suka dengan perkongsian tutorial dalam blog kami ni, jangan lupa untuk follow Facebook dan Instagram kami, kat situ ada bermacam info dan update terkini yang akan kami kongsikan kepada anda. Itu sahaja untuk tutorial kami. Stay update dan selamat mencuba!