Send/Receive/Search Data ke Firebase | NodeMCU (Arduino)

Dalam Tutorial ini, MatGyver akan menerangkan bagaimana Arduino berkomunikasi dengan Firebase dengan kaedah SEND/RECEIVE data, dengan menggunakan NodeMCU.

Pelbagai data dapat di Send atau di Receive oleh Arduino samada:

  • Integer : Nombor dari -32,000 hingga +32,000
  • Float : Nombor yang mempunyai titik perpuluhan
  • String : Struktur ayat atau perkataan

Anda perlu peka terhadap jenis-jenis data ini ketika proses SEND/RECEIVE.

SEBELUM MEMULAKAN

Jika anda belum membuat Databse di Firebase, anda ikuti tutorial di bawah ini:

Tutorial Mencipta Database di Firebase.Google

CONNECTION WIFI DAN INTERNET

Disebabkan Firebase adalah Cloud Data Base System di internet, Arduino perlu mempunyai WiFi connection yang mempunyai connection Internet:

  • HotSpot SmartPhon
  • WiFi Router Kediaman

Oleh itu, kami sarankan penggunaan NodeMCU sebagai Microcontroller kerana ia mempunyai Built-In WiFi module yang stabil berbanding module ESP8266.

Jika korang tidak pernah menggunakan NodeMCU, kami sarankan tutorial di bawah ini dahulu sebelum meneruskan dengan Tutorial Firebase ini.

Pertama Kali Denga NodeMCU

Jika korang dah pernah menggunakan NodeMCU, teruskan membaca tutorial ini.

LIBRARY FIREBASE ESP8266

Download Library Firebase ESP8266 dari Arduino IDE.
Dalam Arduino IDE, Navigasi ke:

Sketch > Include Libraries > Manage Libraries

Dalam ruangan Search, searchkan “Firebase”,
kemudian Install Library “Firebase ESP8266 Client by Mobizt”

DEFINING AREA

Berikut adalah coding wajib di bahagian defining untuk library.
Pastikan anda mendapatkan URL Host untuk Firebase dan Authtoken dari Firebase untuk dimasukkan ke dalam coding berikut.

//FirebaseESP8266.h must be included before ESP8266WiFi.h
#include "FirebaseESP8266.h"
#include <ESP8266WiFi.h>

//Define Firbase Host, Auth Token dan WiFi SSID
#define FIREBASE_HOST "YOUR_FIREBASE_PROJECT.firebaseio.com"
#define FIREBASE_AUTH "YOUR_FIREBASE_DATABASE_SECRET"
#define WIFI_SSID "YOUR_WIFI_AP"
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"

//Define FirebaseESP8266 data objects
FirebaseData firebaseDataA;

Pastikan anda isikan/tukar 4 item ini:

1) FIREBASE_HOST = URL Firebase Anda
2) FIREBASE_AUTH = Kod SECRET Dari FireBase
3) WIFI_SSID = menggunakan WiFi name anda atau HotSpot
4) WIFI_PASSWORD = Password WiFi

VOID SETUP AREA

void setup(){
  Serial.begin(9600);                    //mulakan Serial Monitor

  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);  //connect ke WIFI
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");   //Notifikasi WiFi Connection
  Serial.println(WiFi.localIP());
  Serial.println();

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH); //Connect ke Firebase
  Firebase.reconnectWiFi(true);
  delay(200);
  
}//END OF VOID SETUP

VOID LOOP AREA

Apabila Defining Area dan Void Setup sudah complete, Main-Code dalam Void Loop sudah ready untuk menerima dan menghantardata ke atau dari Firebase.

Seterusnya, kita akan belajar bagaimana memanggil atau menghantar data dari/ke Firebase.

MENGHANTAR DATA KE FIREBASE
(setString, setInt, setFloat)

Bagi menghantar data ke Firebase, sytanx codingnya adalah seperti berikut, dan String Data” akan dihantar ke database Firebase.

Firebase.setString(firebaseDataA, "/NamaTag", "Data");

Ataupun, jika terdapat banyak “Child” dalam Firebase, syntax nya akan berupa di bawah, dan String Data” akan dihantar ke database Firebase.

Firebase.setString(firebaseDataA, "/ChildPertama/ChildKedua/NamaTag", "Data");

Lain-lain format data yang bernombor seperti Integer atau Float, menggunakan syntax di bawah:

Firebase.setInt,  Firebase.setFloat,  Firebase.setDouble,  Firebase.setBool,  Firebase.setString,  Firebase.setJSON,  Firebase.setBlob dan  Firebase.setFile

CONTOH SYNTAX LAIN

Contoh menghantar data INT:

int income = 4000;
  
Firebase.setInt(firebaseDataA, "/Tahun2020/Gaji", income);

Contoh menghantar data FLOAT:

float suhuLuar = 32.86;
  
Firebase.setFloat(firebaseDataA, "/Januari2020/Suhu", suhuLuar);

Contoh CUSTOMIZE URL/ALAMAT sebelum menghantar Data:

int x = 10;
String AttendancePath = String("/") + x + "/id" + "/Student/Name";
/**ini bersamaan**/
// "/10/id/Student/Name"
  
String NamaPelajar = "Ahmad Marzuki";
  
Firebase.setString(firebaseDataA, AttendancePath, NamaPelajar);

Bagi mendapatkan guide penuh mengenai syntax-syntax ini, anda boleh refer GitHub mengenai detail Library Firebase ini.

GitHub Firebase ESP8266 Detail

MEMANGGIL/MENERIMA DATA DARI FIREBASE
(getString, getInt, getFloat)

Sebelum MEMANGGIL DATA dari Firebase, anda perlu lihat dulu, STRUKTUR DATA dalam database, supaya ALAMAT PANGGILAN betul.

Bagi memanggil/menerima data NAMA “Ahmad” dari Contoh Database di atas, sytanx codingnya adalah seperti berikut:

String DataBaru;
  
Firebase.getString(firebaseDataA, "/1/Nama");
DataBaru = firebaseDataA.stringData();
Serial.println(DataBaru);

PENTING!:
Pastikan ALAMAT/PATH pada data tersebut adalah betul.

Data akan dipanggil dari Firebase dengan memanggil “TAG NAME” dari Firebase.

Sejurus selepas memanggil “TAG NAME” NodeMCU akan menerima data dari Firebase dalam syntax “firebaseData.stringData()”

Kemudian korang boleh store value tersebut dalam satu global variable korang sendiri.

Atau, jika value tersebut terdapat banyak “Child”, syntax codingnnya adalah seperti berikut.

Firebase.getString(firebaseDataA, "/Child1/Child2/NamaTag");
DataBaru = firebaseDataA.stringData();

LAIN SYNTAX UNTUK LAIN JENIS DATA

Syntax-syntax lain untuk mendapatkan data jenis lain:

Firebase.getInt,  Firebase.getFloat, Firebase.getString,  Firebase.getJSON

Syntax untuk RETURN VALUE pun perlu matching:

firebaseDataA.stringData,  firebaseDataA.floatData,  firebaseDataA.intData

MENCARI DATA YANG MATCHING DENGAN FIREBASE

Bab ini penting. Dalam kebanyakan Project Database, adalah penting untuk tahu KAEDAH yang betul untuk mencari data yang matching dengan Firebase.

Sebagai Contoh, DATABASE untuk Plate Nombor Kereta.

Perhatikan dalam Database di atas, terdapat satu FOLDER KHAS yang akan menyimpan JUMLAH BILANGAN data.

Maklumat JUMLAH BILANGAN data ini penting untuk digunakan oleh Coding SEARCH kita di bawah.

Dalam contoh di bawah, kita akan TEST, mencari data plate nombor kereta “MMT 0876”, samada wujud atau tidak dalam Database.

CODING PENUH UNTUK MEMBUAT PENCARIAN SEARCH

//Dapatkan Maklumat Jumlah Data Dahulu
  Firebase.getString(firebaseDataA, "/NumberOfPlate");
  delay (80);

  //Variable untuk simpan maklumat Jumlah data
  int JumlahData;
  
  //Simpan maklumat Jumlah Data yang didapati dari Firebase
  JumlahData = firebaseDataA.intData();
  
  Serial.print("Bilangan Data Adalah = ");
  Serial.println(JumlahData);

  //Data yang ingin di cari
  String NoPlate = "MMT 0876";

  //Variable Folder ID dari Data Base
  int FolderID;

  //Variable untuk lihat Matching Result
  bool Matching = false;

  //Kemudian, bina satu FOR LOOP untuk loop pencarian Data dari jumlah Data
  for(int x = 0; x < JumlahData + 1; x++){ //penambahan 1 kerana data bermula 1

     //Set Path untuk Plate Number dan gunakan X dari For Loop untuk Nombor Folder
     String VehicleNoPath = String("/plate/") + x ;

     //Panggil Data Dari FireBase
     Firebase.getString(firebaseDataA, VehicleNoPath);
     delay(80);

     String SearchResult = firebaseDataA.stringData();

     //Debug - Lihat Data yang dijumpai
     Serial.println(SearchResult);

     //Periksa dahulu, samada data betul atau tidak
     if(SearchResult == NoPlate){
      
        //Jika MATCHING ada, print kan RESULT SUCCESS
        Serial.println("Matching Found!");

        //Simpankan ID Folder untuk kegunaan Coding lain
        FolderID = x;

        //Printkan NO FOLDER ID
        Serial.print("ID Number = ");
        Serial.println(FolderID);

        //Set kan Variable Matching sebagai true untuk kegunaan code lain
        Matching = true;

        //Jika data MATCHING dijumpa, BREAK dan hentikan for loop dan exit
        break;  
     }//END IF

     //For loop akan masih diteruskan selagi tidak jumpa DATA MATCHING
  
  }//END FOR LOOP SEARCH

  //Gunakan Maklumat Variable MATCHING untuk beri notifikasi FAILED
  //Jika data matching tidak dijumpa
  
  if(Matching == false){
    Serial.println("Sorry. NO Match Data!");
  }//END IF

CODE YANG LEBIH RINGKAS

  //Dapatkan Maklumat Jumlah Data Dahulu
  Firebase.getString(firebaseDataA, "/NumberOfPlate");
  delay (80);

  int JumlahData;
  
  JumlahData = firebaseDataA.intData();
  
  Serial.print("Bilangan Data Adalah = ");
  Serial.println(JumlahData);

  //Data yang ingin di cari
  String NoPlate = "MMT 0876";

  int FolderID;
  bool Matching = false;

  //Kemudian, bina satu FOR LOOP untuk loop pencarian Data dari jumlah Data
  for(int x = 0; x < JumlahData + 1; x++){ //penambahan 1 kerana data bermula 1
     String VehicleNoPath = String("/plate/") + x ;

     Firebase.getString(firebaseDataA, VehicleNoPath);
     delay(80);

     String SearchResult = firebaseDataA.stringData();
     Serial.println(SearchResult);

     //Periksa dahulu, samada data betul atau tidak
     if(SearchResult == NoPlate){
        Serial.println("Matching Found!"); 
        FolderID = x; 

        Serial.print("ID Number = "); 
        Serial.println(FolderID);

        Matching = true;  
        break;  
        
     }//END IF
  
  }//END FOR LOOP SEARCH
  
  if(Matching == false){
    Serial.println("Sorry. NO Match Data!");
  }//END IF

Semoga Project Database Firebase anda GEMPAK!


Jika anda menyukai artikel-artikel keluaran MatGyver.my, kami mohon jasa baik tuan/cikpuan untuk sumbangkan like pada page FaceBook kami,
dan juga Subscribe ke YouTube Channel kami !

Dapatkan Tips-tips DIY dan Arduino dari FB Page Kami.
Konten Video Tips DIY Hobby MatGyver Official Channel.

end

Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Twitter picture

Anda sedang menulis komen melalui akaun Twitter anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: