* ปัจจุบันผู้เขียนไม่แนะนำให้ใช้งาน Firebase เนื่องจาก API เปลี่ยนไปมา และการเปลี่ยนแต่ละครั้งจะทำให้อุปกรณ์เก่าใช้งานไม่ได้ ต้องนำมาอัพเดทเฟิร์มแวร์ใหม่
Firebase มีบริการหลักเป็น Realtime Database เกิดขึ้นด้วยแนวคิดที่คนทำแอพพลิเคชั่นไม่จำเป็นต้องตั้งเซิฟเวอร์เอง และไม่ต้องต้องเขียนโปรแกรมหลังบ้านซ้ำ ๆ แบบเดิม ซึ่งหากคนที่ทำเว็บไซต์ ทำแอพพลิเคชั่น จะทราบดีว่างาน 1 โปรเจค จะต้องมีฐานข้อมูล และจะต้องมีการเก็บตารางของผู้ใช้งาน ระบบ Log ต่าง ๆ มีการติดต่อกับผู้ใช้ ซึ่งเป็นงานที่มีการทำซ้ำ ๆ ตลอดมา ดังนั้น Firebase จึงมาช่วยแก้ปัญหาตรงนี้ได้ ทำให้ไม่ต้องมีการจัดการฐานข้อมูลเอง ไม่ต้องเขียนโปรแกรมหลังบ้านเอง (ด้วยภาษา PHP Python และอื่นๆ) ตัว Firebase ทำไว้ให้หมดแล้ว
ในงานด้านแอพพลิเคชั่น ตัว Firebase ถือเป็นบริการฐานข้อมูลออนไลน์ตัวหนึ่ง ซึ่งแอพพลิเคชั่นส่วนใหญ่ต้องใช้งานฐานข้อมูลตรงส่วนนี้ แต่หากมองในมุมของ IoT ตัว Firebase ถือว่าเป็นตัวกลางการเชื่อมต่อทุกอุปกรณ์เข้าด้วยกันได้ โดยมีจุดเด่นคือ เรียลไทม์ และสามารถบันทึกข้อมูลไว้ได้
ในด้านของ API ตัว Firebase ไม่ได้อิงการใช้งานไปกับภาษาใดภาษาหนึ่ง กรณีที่ภาษาใด ๆ ไม่มีไลบารี่ให้ใช้งาน สามารถใช้ REST API (โปรโตคอล HTTP, HTTPs) ในการร้องขอข้อมูล (GET) หรือส่งข้อมูล (PUT) เข้าไปได้เลย
Firebase คือฐานข้อมูลประเภท NoSQL
ฐานข้อมูล MySQL MSSQL และฐานข้อมูลชนิด RDBMS ต่าง ๆ จะมีลักษณะเป็นตารางข้อมูล มีคอลั่ม มีการกำหนดชนิดของข้อมูลไว้อย่างชัดเจน และใช้ภาษา SQL ในการติดต่อเพื่อขอใช้ข้อมูล (SELECT) เพิ่มข้อมูล (INSERT) และลบข้อมูล (DELETE) สามารถกรองเอาเฉพาะข้อมูลที่ต้องการได้ด้วยการใช้ WHERE และบางครั้งมีปัญหาเรื่องช่องโหว่ (SQL Injection ถือเป็นวิธีพื้นฐานที่นิยมใช้และได้ผลมากที่สุดในขณะนี้)
ฐานข้อมูลชนิด NoSQL จะไม่ใช้ภาษา SQL ในการจัดการข้อมูล และออกแบบให้มีความยืดหยุ่น และเน้นความเร็วในการใช้งานมากที่สุด ฐานข้อมูล NoSQL ที่นิยมใช้งานในปัจจุบันคือ MongoDB ซึ่งมีการเก็บข้อมูลเป็นชนิด JSON (เจสัน) มีตารางเหมือนเดิม แต่ไม่มีคอลั่มข้อมูลที่ตายตัว ใน 1 แถว สามารถเก็บข้อมูลได้ทั้งข้อความ (String) ตัวเลข (Number) และอื่น ๆ รวมไปถึงอาเรย์ และออปเจ็ค
Firebase มีการทำงานคล้าย ๆ กับ MongoDB คือมีฐานข้อมูล แต่ไม่มีตาราง มีการเก็บข้อมูลในรูป JSON สามารถเพิ่มข้อมูลไปในออปเจ็คใด ๆ ก็ได้ แต่เก็บเป็นอาร์เรย์ไม่ได้ ถ้าต้องการเพิ่มข้อมูลแบบอาร์เรย์ จะต้องใช้การ PUT ข้อมูลเข้าไปต่อท้ายเรื่อย ๆ ซึ่งจะมี Key ที่ Firebase สร้างให้เป็นตัวอ้างอิง
Firebase กับ API เพื่ออุปกรณ์ IoT
Firebase มี API ของหลายภาษาให้เลือกใช้งาน ทั้งภาษา Python (นิยมใช้ใน Embedded OS) JavaScript (ในบนหน้าเว็บไซต์) และรวมไปถึงใน ESP8266 ที่ใช้ Arduino IDE ด้วย
Google ได้จัดทำไลบารี่ Firebase สำหรับ Arduino (ซึ่งใช้กับ ESP8266 ได้) ไว้บน GitHub ส่วน API Reference สามารถอ่านได้ที ลิ้งนี้
เตรียม Firebase ให้พร้อมใช้งาน
เข้าไปที่หน้าเว็บไซต์หลักของ Firebase https://firebase.google.com/ กด ลงชื่อเข้าใช้ ที่มุมขวาบนของหน้าเว็บไซต์
เนื่องจาก Firebase เป็นของ Google จึงต้องใช้บัญชี Google ในการเข้าสู่ระบบ กรอกรหัสและลงชื่อเข้าใช้ให้เรียบร้อย
จากนั้นจะเด้งกลับมาที่หน้าหลัก ให้กด ไปที่คอนโซล ในเมนูมุมขวาบน
กดปุ่ม CREATE NEW PROJECT
ในช่องแรกให้ตั้งชื่อโปรเจ็คใหม่ และในช่องที่ 2 เลือกเป็น Thailand แล้วกด CREATE PROJECT
หน้าเว็บจะรีไดเร็คมาที่หน้าหลักของโปรเจ็ค
กดไปที่รูปเฟืองมุมซ้ายบน แล้วคลิกที่เมนู การตั้งค่าโครงการ
คลิกที่แท๊ป บัญชีบริการ ในเมนูด้านซ้าย เลือก ข้อมูลลับฐานข้อมูล นำเมาส์เลือนไปตรงช่อง •••••• กดที่ปุ่ม แสดง
คัดลอก Key เก็บไว้ ตัว Key นี้จะใช้ในการคอนฟิกในโค้ด เพื่อให้สามารถเข้ามาแก้ไขข้อมูลในฐานข้อมูล Firebase ได้
กดไปที่เมนู Database ในเมนูด้านซ้าย
ก๊อปลิ้งตามตำแหน่งในรูปเก็บไว้ ลิ้งนี้จะเอาไว้ใช้คอนฟิกในโค้ดเช่นเดียวกัน
การกำหนดสิทธิ์การเข้าถึงข้อมูล
ส่วนนี้เป็นส่วนเสริม และมีความสำคัญหากนำไปใช้งานจริง เนื่องจาก Firebase ได้กำหนดค่าเริ่มต้นให้ต้องมี Key เท่านั้น จึงจะสามารถอ่าน - เขียนฐานข้อมูลได้ ซึ่งจะมีปัญหาหากนำไปใช้งานบนหน้าเว็บไซต์ เพราะในหน้าเว็บจะไม่สามารถเปิดเผย Key ได้ การเปิดเผย Key จะทำให้ Users สามารถเข้ามาแก้ข้อมูลในฐานข้อมูลได้ ดังนั้นจึงควรกำหนดให้ในการเขียนข้อมูลลงไปในฐานข้อมูล สามารถทำได้เฉพาะมี Key และหากมี หรือไม่มี Key จะอ่านได้ ซึ่งสามารถกำหนดได้ดังนี้
กดไปที่แท๊ป RULES ในส่วนที่คลุมแถบดำลูกศรชี้ในรูป ให้ใส่ true ลงไปแทน
เมื่อแก้ไขแล้ว ให้กดปุ่ม PUNLISH เพื่อเป็นการบันทึกค่า
แค่นี้ฐานข้อมูล Firebase ก็พร้อมใช้งานแล้วครับ
การใช้งานคอนโซลของ Firebase
กดกลับมาที่แท๊ป DATA นำเม้าส์เลื่อนไปที่ชื่อออปเจ็คแรก เครื่องหมาย + จะปรากฏขึ้นมา
กดที่เครื่องหมาย + จะมีชื่อขึ้นมา 2 ช่อง และเยื่องทางซ้ายเล็กน้อย การเยื่องทางซ้ายเพื่อให้ทราบได้ว่าเรากำลังจะเพิ่มข้อมูลลงในออปเจ็คใด ออปเจ็คที่อยู่ในระดับเดียวกันจะมีการเยื่องซ้ายเท่ากัน
ในช่อง Name จะเป็นชื่อของออปเจ็ค (Index, Key name) ส่วน Value ทดลองใส่ Hello !!! แล้วกดปุ่ม ADD
จากนั้นในระดับที่สูงกว่าทั้งหมดจะเปลี่ยนสีเป็นสีส้ม และออปเจ็คที่เพิ่มเข้ามาใหม่ (ในที่นี้คือ text) จะเป็นสีเขียว เมื่อผ่านไปช่วงเวลาหนึ่งสีจะกลับมาเป็นสีดำดังเดิม
ที่ออปเจ็คแรกสุด (อยู่สูงที่สุด) กด + อีกครั้ง พิมพ์ Name เป็น subObj แล้วกดเครื่องหมาย + ตามลูกศรชี้ในรูป
กรอก Name เป็น idOne แล้วกด Value เป็น 111 จากนั้นกด ADD
จะเห็นได้ว่าผลคือ ออปเจ็ค ledesp-86d37 จะอยู่ในระดับสูงที่สุด และมีออปเจ็ค subObj เป็นออปเจ็คย่อย แล้วมี idOne ซึ่งมีค่าเป็น 111 เป็นออปเจ็คย่อยของ subObj อีกที
หากนำไปเทียบกับเนื้อหาในวิชา โครงสร้างข้อมูล ซึ่งเป็นวิชาพื้นฐานที่โปรแกรมเมอร์จะต้องเรียน จะพบว่าการทำงานแบบนี้จะคล้าย ๆ กับโครงสร้างข้อมูลแบบต้นไม้ ให้มอง ledesp-86d37 เป็นโหนดราก มอง subObj เป็นโหนดลูกของโหนด edesp-86d37 และโหนด idOne เป็นโหนดลูกของโหนด subObj อีกที ซึ่งในโหนดใบแต่ละโหนด (โหนดที่ไม่มีโหนดลูก) สามารถมีค่าเป็นข้อความ ตัวอักษร หรือตัวเลขก็ได้
นำเมาส์เลื่อนไปตรงออปเจ็คที่ชื่อ text แล้วคลุมแถบดำ ทดลองแก้เป็น 1212312121 แล้วกดปุ่ม Enter บนคีย์บอร์ด
ผลที่ได้คือออปเจ็คที่ถูกแก้ไขจะเปลี่ยนเป็นสีส้ม แล้วออปเจ็คที่อยู่สูงกว่าทั้งหมด ก็เปลี่ยนเป็นสีส้มเช่นกัน
นำเมาส์ไปวางที่ออปเจ็ค subObj จากนั้นกด x
จะแจ้งว่าหากลบออปเจ็คนี้ไปแล้ว ออปเจ็คที่อยู่ล่าง ๆ ก็จะถูกลบไปด้วย ให้กดปุ่ม DELETE
จากนั้นออปเจ็คตั้งแต่ subObj ลงไปจะเปลี่ยนเป็นสีแดง หมายถึงออกเจ็คนั้นไม่มีอยู่แล้วนั่นเอง และออปเจ็คที่อยู่สูงกว่าจะเปลี่ยนเป็นสีส้ม หมายถึงมีการอัพเดทข้อมูลนั่นเอง
การใช้งานคอมโซลก็มีเพียงเท่านี้ ในตอนแก้ไขขอให้แก้ไขแล้วกด Enter ทันที เพราะหากไม่ทำการกด Enter ข้อมูลจะไม่ถูกแก้ไข และต้องเข้าใจไว้เสมอว่าหากลบออปเจ็คที่อยู่ในระบบดับสูง ๆ ก็จะทำให้ออปเจ็คระดับต่ำลงมาถูกลบไปด้วย และไม่สามารถกู้คืนกลับมาได้
ทำความเข้าใจกับ Realtime Database
Realtime Database หมายถึงฐานข้อมูลที่เมื่อมีการอัพเดทข้อมูล จะมีการส่งข้อมูลที่อัพเดทนี้ ไปที่อุปกรณ์อื่น ๆ ที่เชื่อมต่ออยู่ด้วย ดังตัวอย่างด้านล่างนี้
ในรูปด้านล่างนี้ ทางซ้ายผมได้เพิ่มออปเจ็คที่มี Key เป็น LED และมีค่าเป็น ON เมื่อผมกดที่ปุ่ม ADD จะมีค่าของ LED: ON ไปปรากฏในทั้ง 2 หน้าทันที
ต่อมาผมได้แก้ไขข้อมูลของออปเจ็ก LED ในหน้าเว็บทางขวาเป็น OFF ผลที่ได้คือในหน้างต่างทั้ง 2 ด้านมีการเปลี่ยนแปลงทันที
สุดท้ายผมกดลบออปเจ็ด LED ออกไป ผลคือออปเจ็ค LED หายไปทันทีจากทั้ง 2 หน้า (สีแดงหมายถึงออปเจ็คถูกลบไปแล้ว)
Firebase กับ ESP8266 ESP8285
ทดลองให้ ESP8266 อัพเดทข้อมูลในฐานข้อมูลของ Firebase
ก่อนอื่นให้ลงไลบารี่ก่อน โดยดาว์นโหลดได้ที่ https://github.com/googlesamples/firebase-arduino/archive/master.zip
เปิดโปรแกรม Arduino ขึ้นมา กดไปที่ Sketch > Include Library > Add .ZIP Library...
เลือกไฟล์ที่ได้ดาว์นโหลดไว้ กดปุ่ม Open
ก๊อบโค้ดด้านล่างนี้ลงโปรแกรม Arduino
แก้ไขข้อมูลของ FIREBASE_HOST, FIREBASE_AUTH, WIFI_SSID และ WIFI_PASSWORD ให้ถูกต้อง ดังตัวอย่างด้านล่างนี้
เมื่ออัพโหลดโค้ดเข้าไปแล้ว และรอจนกว่าจะเชื่อมต่อ WiFi เสร็จ ตัว ESP8266 / ESP8285 จะมีการเซ็ตออปเจ็ค number ให้มีค่าเพิ่มขึ้นรื่อย ๆ ทุก ๆ ครึ่งวินาที หากเปิดหน้าคอนโซลร่วมกับหน้ามอนิเตอร์จะเห็นผลที่ชัดเจน
ทำความรู้จักกับฟังก์ชั่นต่าง ๆ
คำสั่งใช้ set - เป็นคำสั่งที่ใช้เซ็คค่าในออปเจ็กต่าง ๆ เช่น เซ็ตให้ออปเจ็ค A มีค่าเป็น 10 (Int)
การใช้งานอยู่ในรูปแบบ Firebase.set???(const String &path, ??? value) ซึ่ง ??? สามารถเป็นไปได้ดังนี้
???= | รายละเอียด | ตัวอย่างการใช้ |
Int | ใช้นำตัวเลขจำนวนเต็มเข้าออปเจ็ค | Firebase.setInt("number", 10); |
Float | ใช้นำตัวเลขที่มีจุดทศนิยมเข้าออปเจ็ค | Firebase.setFloat("number", 2.56); |
Bool | ใช้นำค่า True หรือ False เข้าออปเจ็ค | Firebase.setBool("trueORfalse", true); |
String | ใช้นำข้อความเข้าออปเจ็ค | Firebase.setString("title", "Hello !"); |
คำสั่งใช้ get - เป็นคำสั่งใช้อ่านค่าจากออปเจ็กต่าง ๆ ออกมาในรูปชนิดข้อมูลต่าง ๆ
การใช้งานอยู่ในรูปแบบ Firebase.get???(const String &path) ซึ่ง ??? สามารถเป็นไปได้ดังนี้
???= | รายละเอียด | ตัวอย่างการใช้ |
Int | อ่านค่าตัวเลขจำนวนเต็มจากออปเจ็ค | int number = Firebase.getInt("number"); |
Float | อ่านค่าตัวเลขที่มีจุดทศนิยมจากออปเจ็ค | flost number = Firebase.getFloat("number"); |
Bool | อ่านค่าค่า True หรือ False จากออปเจ็ค | bool trueORfalse = Firebase.getBool("trueORfalse"); |
String | อ่านค่าข้อความจากออปเจ็ค | String title = Firebase.getString("title"); |
คำสั่งใช้ push - เป็นคำสั่งที่ใช้เพิ่มข้อมูเข้าไปต่อท้ายในออปเจ็ค โดยจะมี Key เป็นแบบ PRIMARY KEY คือชื่อ Key จะเป็นข้อความยาว ๆ และจะไม่มีการซ้ำกัน
การใช้งานอยู่ในรูปแบบ Firebase.push???(const String &path, ??? value) ซึ่ง ??? สามารถเป็นไปได้ดังนี้
???= | รายละเอียด | ตัวอย่างการใช้ |
Int | ใช้นำตัวเลขจำนวนเต็มเข้าไปต่อท้ายในออปเจ็ค | Firebase.pushInt("arrNumber", 10); |
Float | ใช้นำตัวเลขที่มีจุดทศนิยมเข้าไปต่อท้ายในออปเจ็ค | Firebase.pushFloat("arrNumber", 2.56); |
Bool | ใช้นำค่า True หรือ False เข้าไปต่อท้ายในออปเจ็ค | Firebase.pushBool("arrTrueORfalse", true); |
String | ใช้นำข้อความเข้าไปต่อท้ายในออปเจ็ค | Firebase.pushString("arrTitle", "Hello !"); |
ทดลองใช้คำสั่ง Push
ในตัวอย่างที่แล้วมีการใช้เพียงคำสั่ง set และ get ในตัวอย่างนี้จะเป็นการทดลองใช้คำสั่ง push กันครับ
คำสั่ง push เหมาะสำหรับการเก็บข้อมูลในลักษระคล้ายตาราง โดยทำการเพิ่มแถวของตารางไปเรื่อย ๆ ภายในแถวของตารางสามารถมีคอลั่มได้ไม่จำกัด แต่จะต้องมีชื่อของ Key ตามข้อกำหนดการใช้ Firebase
ในตัวอย่างนี้ผมได้ต่อ DHT11 เข้ากับ ESP8285 ที่ขา GPIO4 เพื่ออ่านค่าอุณหภูมิ และได้เขียนโค้ดให้ทำการ push ค่าอุณหภูมิลงในออปเจ็ค temperature และมีการ push ค่าของความชื้นลงออปเจ็ค humidity
อัพโหลดโค้ดด้านล่างนี้ลงบอร์ด อย่าลืมเปลี่ยน FIREBASE_HOST, FIREBASE_AUTH, WIFI_SSID และ WIFI_PASSWORD เหมือนเดิม กรณีต่อ DHT ไว้ที่ขาอื่น สามารถเปลี่ยนได้ที่ DHTPIN และหากไม่ได้ใช้ DHT11 สามารถเปลี่ยนได้ที่ DHTTYPE
เมื่อเปิดหน้ามอนิเตอร์ขึ้นมา พร้อม ๆ กับหน้าคอนโซล จะเห็นว่าค่าอุณหภูมิ และค่าความชื้นได้ถูกเพิ่มเข้ามาในทุก ๆ 5 วินาที สังเกตุได้จากสีของชื่อออปเจ็คจะเปลี่ยนเป็นสีส้ม หมายถึงมีการเพิ่มข้อมูลเข้ามาใหม่นั่นเอง
หากกดที่รูปเครื่องหมาย +(หน้าชื่อออปเจ็ค) จะพบกับ Key ของออปเจ็คที่มีลักษณะเป็นข้อความไม่มีความหมาย และจะพบค่าของออปเจ็คเป็นตัวเลขอุณหภูมิ หรือความชิ้น
ต่อมาเราจะมาลองเก็บอุณหภูมิ และความชื้นไว้ในออปเจ็คตัวเดียวกันครับ เนื่องจากข้อมูลทั้ง 2 ตัวนี้มาจากแหล่งเดียวกัน ดังนั้นมันควรจะอยู่ด้วยกันเสมอเพื่อความง่ายในการเรียกใช้
การที่จะทำให้ทั้งอุณหภูมิ และความชื้นมาอยู่ในออปเจ็คเดียวกันได้ จะต้องทำให้ข้อมูลทั้ง 2 นี้มารวมกันเสียก่อน โดยการสร้างออปเจ็คทั้ง 2 รอไว้โดยใช้ JSON แล้วค่อย Push ทั้ง 2 ออปเจ็คนี้ขึ้นไปพร้อมกัน จะทำให้ทั้ง 2 ออปเจ็คมีออปเจ็คที่สูงกว่าเป็น Key เดียวกัน
อธิบายอย่างเดียวอาจจะไม่เห็นภาพ มาลองทำกันเลยดีกว่าครับ ก๊อบโค้ดด้านล่างนี้ไปลองอัพโหลดเข้า ESP8266 ESP8285 ได้เลย (อย่าลืมแก้ไขข้อมูลที่เดิม)
จากนั้นเปิดหน้ามอนิเตอร์ขึ้นมา เทียบกับหน้าคอนโซลใน Firebase จะพบว่ามีการเพิ่มข้อมูลเข้าไปที่ออปเจ็ค logDHT เพียงออปเจ็คเดียว เมื่อกดเครื่องหมาย + (หน้าชื่อออปเจ็ค) ก็จะพบกับออปเจ็คที่มี Key เป็นรหัสไม่มีความหมาย เมื่อกดเครื่องหมาย + (หน้าชื่อออปเจ็คอีกครั้ง) ก็จะพบออปเจ็ค temperature และ humidity
การสตรีมมิ่งข้อมูล
หลังจากที่ได้เรียนรู้การเพิ่มข้อมูลเข้าไปแล้ว ต่อมาเรามาลองเรียนรู้การรออัพเดทข้อมูลกันบ้างครับ สามารถนำไปประยุกต์ใช้การรับ - ส่งข้อมูลแบบเรียลไทม์ได้ครับ
ใน void setup() จะต้องเรียกฟังก์ชั่น Firebase.stream() ขึ้นมาก่อน โดยมีรูปแบบการใช้งานดังนี้
Firebase.stream(const String &path)
โดยที่ path หมายถึงออปเจ็คที่เราต้องการตรวจจับความเปลี่ยนแปลง เช่น ถ้าหากออปเจ็ค LED ซึ่งอยู่เป็นออปเจ็คนอกสุด ตัว path ก็จะเป็น /LED , แต่หากออปเจ็ค LED อยู่ในออปเจ็ค Node1 และออปเจ็ค Node1 เป็นออปเจ็คนอกสุด ตัว path ก็จะเป็น /Node1/LED ตัวเครื่องหมาย / จะเป็นตัวคั่น Key หรือชื่อของออปเจ็ค
ผมจะเลือกใช้ path ที่ /Node1/LED ดังนั้นจึงต้องนำโค้ดด้านล่างนี้ไปไว้ใน void setup()
Firebase.stream("/Node1/LED");
ในส่วนของ void loop() สามารถก๊อบไปได้ทั้งหมด มีเพียงแต่การเรียกฟังก์ชั่น event.get???("data"); ที่ต้องระวัง เพราะหากชนิดของข้อมูลผิด ก็จะทำให้ไม่สามารถรับค่าได้เลย
ตัวอย่างเช่น หากในหน้าคอนโซล ได้กรอกไว้เป็น 1 แต่รับค่าแบบ String ผลที่ได้จะเป็นค่าว่าง เพราะ 1 ถือเป็นตัวเลข คำสั่ง event.getString("data"); จะไม่สามารถรับค่าได้ แต่ถ้าหากใช้คำสั่ง event.getInt("data"); จะสามารถรับข้อมูลได้ปกติ
ทดลองควบคุม LED แบบเรียลไทม์
ต่อวงจรด้านล่างนี้ และอัพโหลดโค้ดด้านล่างนี้ลงไป (อย่าลืมแก้ที่เดิม)
กลับไปที่คอนโซล ไปเพิ่มออปเจ็ค Node1 --> LED:0 ผลที่ได้คือหลอด LED ยังดับอยู่
เมื่อแก้ออปเจ็ค LED ให้เป็น 1 ผลคือหลอด LED ติดทันที
สรุปช่วงท้าย
ในบทความนี้จะสอนเฉพาะการใช้ Firebase พื้นฐาน และการใช้ Firebase บน Arduino ESP8266 / ESP8285 ซึ่งแค่นี้ก็สามารถนำไปประยุกต์ใช้การคุยกันระหว่างอุปกรณ์ กับ อุปกรณ์ได้แล้ว แต่หากต้องการจะให้การควบคุมอุปกรณ์ผ่านหน้าเว็บไซต์ หรือผ่านแอพพลิเคชั่น จำเป็นจะต้องเรียนรู้ API ในภาษาอื่น ๆ เพิ่มอีก แต่ยังคงมีฟังก์ชั่น set get push อยู่เหมือนเดิม เพียงแต่ในบางภาษาจะใช้งานง่ายขึ้นครับ