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.
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 !
end