Loading...
OUR BLOG

Terima data dari Firebase menggunakan NodeMCU ESP8266

Hi BDX-ian! 

 

Tutorial sebelum ini kita dah belajar tentang Hantar data dari NodeMCU ESP8266 ke Firebase. Jadi untuk tutorial kali ini kita akan belajar nak terima data dari Firebase Realtime Database dengan menggunakan NodeMCU ESP8266.

User akan terima data jarak objek dan formatted time dari Realtime Database setiap 10 saat dan data dipaparkan pada Serial Monitor. NodeMCU ESP8266 pula akan menghantar data jarak dan timestamp ke Realtime Database setiap 5 saat dan data dipaparkan pada Serial Monitor.

 

Apa itu Firebase?

Firebase adalah database NoSQL yang membolehkan anda menyimpan dan menyelaraskan data antara user lain dalam realtime. 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 menggunakan Firebase, anda hendaklah mengikut semua langkah yang terdapat di tutorial: Hantar data dari NodeMCU ESP8266 ke Firebase.

 

Untuk memulakan tutorial ini, pertama sekali, anda perlu create project baru Firebase dan create Realtime Database untuk projek ini. Kemudian, anda akan memprogramkan ESP8266 untuk menyimpan dan membaca data daripada database.

 

 

Komponen 

Komponen yang diperlukan

 

  1. Ultrasonic Sensor
  2. NodeMCU ESP8266 dan USB 
  3. Breadboard 
  4. Jumper wire

 

Litar

 

Ultrasonic sensor

 

 

Code 

#include "FirebaseESP8266.h"

#include <ESP8266WiFi.h>

#include <NTPClient.h>

#include <WiFiUdp.h>

 

// Provide the RTDB payload printing info and other helper functions.

#include <addons/RTDBHelper.h>

 

#define WIFI_SSID "Nama WiFi anda"

#define WIFI_PASSWORD "Password WiFi anda"

 

#define DATABASE_URL "Database URL projek anda //<databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app

 

 

WiFiUDP ntpUDP;

NTPClient timeClient(ntpUDP, "pool.ntp.org");

 

const int trigPin = 13;

const int echoPin = 15;

 

//Define Firebase Data object

FirebaseData fbdo;

FirebaseAuth auth;

 

FirebaseConfig config;

 

long duration;

int distance;

 

String formattedTime;

 

unsigned long dataMillis = 0;

unsigned long sendDataPrevMillis = 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();

 

  Serial.printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION);

 

  config.database_url = DATABASE_URL;

 

  config.signer.test_mode = true;

  timeClient.begin();

  timeClient.setTimeOffset(28800);

 

  Firebase.reconnectWiFi(true);

  Firebase.begin(&config, &auth);

  

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);

}

 

void loop()

{

  if (millis() - dataMillis > 5000)

  {

    dataMillis = millis();

 

    Serial.println("------------------------------------");

    Serial.println("Set Timestamp test...");

    

    getTime();

    getDistance();

 

    if (millis() - sendDataPrevMillis > 10000)

  {

    sendDataPrevMillis = millis();

    

    Serial.println();

    Serial.printf("Get distance... %s\n", Firebase.getInt(fbdo, F("/set/distance"), &distance) ? String(distance).c_str() : fbdo.errorReason().c_str());

    Serial.printf("Get formatted time... %s\n", Firebase.getString(fbdo, F("/set/timestamp/formatted_time"), &formattedTime) ? String(formattedTime).c_str() : fbdo.errorReason().c_str());  

  }

 }

}

 

void getDistance()

{

   digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);

  distance = (duration / 2) / 29.1;

 

  if (Firebase.setInt(fbdo, "/set/distance", distance))

  {

    Serial.print("Distance: ");

    Serial.println(distance);

  }

 

else

  {

    Serial.println("DISTANCE FAILED");

    Serial.println("REASON: " + fbdo.errorReason());

    Serial.println("------------------------------------");

    Serial.println();

    return;

  }   

}

 

void getTime()

{

  timeClient.update();

 

  unsigned long epochTime = timeClient.getEpochTime();

  if (Firebase.setInt(fbdo, "/set/timestamp/epoch_time", epochTime)) {

    Serial.print("Epoch Time: ");

    Serial.println(epochTime);

  }

  String formattedTime = timeClient.getFormattedTime();

  if (Firebase.setString(fbdo, "/set/timestamp/formatted_time", formattedTime)) {

    Serial.print("Formatted Time: ");

    Serial.println(formattedTime);

  }

  

  int currentHour = timeClient.getHours();

  if (Firebase.setString(fbdo, "/set/timestamp/current_hour", String(currentHour))) {

    Serial.print("Hour: ");

    Serial.println(currentHour);

  }

 

  int currentMinute = timeClient.getMinutes();

  if (Firebase.setString(fbdo, "/set/timestamp/current_minutes", String(currentMinute))) {

    Serial.print("Minutes: ");

    Serial.println(currentMinute);

  }

 

  int currentSecond = timeClient.getSeconds();

  if (Firebase.setString(fbdo, "/set/timestamp/current_seconds", String(currentSecond))) {

    Serial.print("Seconds: ");

    Serial.println(currentSecond);

  }

 

  Serial.println("");

 

  delay(2000);

}

 

Peringatan

Ganti dan tukar perkara ini ke dalam code anda.

#define WIFI_SSID "Nama WiFi anda"

#define WIFI_PASSWORD "Password WiFi anda"

#define DATABASE_URL "Database URL projek anda //<databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app

 

Output

 

Setiap 5 saat, ESP8266 akan hantar data ke database.

 

Setiap 5 saat, output Serial Monitor memaparkan jarak dan timestamp apabila hantar data ke database.

Setiap 10 saat, output Serial Monitor memaparkan jarak dan formatted time apabila dapat data dari databse.

 

 

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.