Loading...
OUR BLOG

Hantar data dari NodeMCU ESP8266 ke Firebase

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

 

8. Litar

 

Ultrasonic sensor

 

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!

Unsure Whether You Need Our Help?

Have you got an awesome new idea or project that you want to talk about? We're here to talk you through it. Flick us an email or give us a call to get started.