การใช้งานไลบรารี่ IOXhop_FirebaseESP32 จะต้องติดตั้งไลบรารี่ ArduinoJson เวอร์ชั่น 5.13.x เพิ่มเติม (ไลบรารี่ ArduinoJson เวอร์ชั่น 6.x.x ใช้งานไม่ได้)
Firebase ยังเป็นบริการฐานข้อมูลเรียลไทม์ที่น่าสนใจอยู่เหมือนเดิม เพียงแต่ในช่วงหลังที่มีการแก้ CA (ใบรับรอง TLS) ทำให้อุปกรณ์ IoT ใช้งานไม่ได้อยู่หลายครั้งก็ตาม แต่หากนำไปเทียบกับบริการฐานข้อมูลกลางที่เราไม่ต้องมาบริหารจัดการเองแล้ว ตัว Firebase ยังเป็นบริการที่ดีที่สุดในตอนนี้แล้ว
ปัญหาการใช้งาน Firebase บน ESP32 เริ่มต้นมาจาก ไลบรารี่ที่ใช้กับ ESP8266 ที่ชื่อ firebase-arduino ไม่สามารถนำมาใช้งานร่วมกับ ESP32 ได้ โดยจะไม่สามารถเรียกใช้ get set push และฟีเจอร์อื่น ๆ ที่ไลบรารี่มีได้เลย สาเหตุมาจากไลบรารี่ HTTPClient ที่ใช้กับ ESP32 เปลี่ยนวิธีการตรวจสอบ CA ใหม่ จากเดิมที่ ESP8266 จะใช้วิธีตรวจสอบค่า fingerprinting แต่บน ESP32 ใช้การตรวจสอบ CA ทั้งใบแทน
จากปัญหาดังกล่าว ทำให้ร้านไอโอเอ็กซ์ฮ๊อบพยามจะแก้ไลบรารี่ firebase-arduino ให้ใช้งานกับ ESP32 ได้ แต่ด้วยปัญหาต่าง ๆ ทำให้ร้านเลือกสร้างไลบรารี่ขึ้นมาใหม่ทั้งตัวแทน รวมทั้งเปลี่ยนวิธีการใช้งานไลบรารี่ในบางฟีเจอร์ เพื่อให้สะดวกต่อการเขียนโปรแกรมมากขึ้น และเรียกใช้ประสิทธิภาพของ ESP32 ให้ออกมาได้มากที่สุด
ไลบรารี่ตัวใหม่ที่ทางร้านได้จัดทำ คือ IOXhop_FirebaseESP32 ซึ่งในบทความนี้เราจะมาเรียนรู้วิธีการใช้งานไลบรารี่ตัวใหม่นี้กัน
ไลบรารี่ firebase-arduino ที่มีฟังก์ชัน set get push ในไลบรารี่ IOXhop_FirebaseESP32 ยังมีเหมือนเดิมทุกประการ ไลารี่ที่ร้านจัดทำพยามที่จะเลียนแบบชื่อฟังก์ชัน ค่าที่ส่งกลับ และวิธีใช้งานมาให้ครบ เพื่อให้สามารถย้ายโค้ดจาก ESP8266 ที่ใช้ไลบรารี่ firebase-arduino มาบน ESP32 ที่ใช้ไลบรารี่ IOXhop_FirebaseESP32 ได้โดยไม่ต้องแก้ไขโค้ดมากนัก
ตัวอย่างการเซ็ตค่า (set) อ่านค่า (get) เพิ่มข้อมูลต่อท้าย (push) ในออบเจ็คต่าง ๆ (เทียบไลบรารี่ firebase-arduino และ IOXhop_FirebaseESP32)
กรณีท่านยังไม่เคยรู้จัก Firebase หรือยังไม่เคยแม้แต่จะใช้ไลบรารี่ firebase-arduino มาก่อน ท่านสามารถอ่านบทความเก่าได้ที่ ESP8266 ESP8285 กับการใช้งาน Firebase ระบบฐานข้อมูลเรียลไทม์จาก Google ซึ่งวิธีการใช้งานยังคงเหมือนเดิม เพียงแต่เปลี่ยนการอ้าง ESP8266WiFi.h เป็น WiFi.h และเปลี่ยน FirebaseArduino.h เป็น IOXhop_FirebaseESP32.h เท่านั้น
ESP8266 มี CPU เพียงคอร์เดียวเท่านั้น การทำงานแบบมัลติทาสกิ้งจึงค่อนข้างยากลำบากมาก ในไลบรารี่ firebase-arduino จึงจำเป็นต้องมีการเรียกฟังก์ชันขึ้นมาตรวจสอบอยู่ตลอดเวลา ว่ามีการส่งข้อมูลใหม่เข้ามาแล้วหรือไม่ โดยใช้วิธีนำฟังก์ชัน Firebase.available() ไปไว้ภายใน void loop() แต่ใน ESP32 ที่มี CPU ถึง 2 คอร์ ทำให้สามารถที่จะทำมัลติทาสกิ้งได้ง่ายขึ้นมาก โดยใช้ฟีเจอร์ของ FreeRTOS ที่ ESP32 ใช้งานอยู่
ไลบรารี่ IOXhop_FirebaseESP32 จึงเปลี่ยนวิธีการสตรีมข้อมูลใหม่ โดยใช้วิธีที่เรียกว่า Event-driver แทน
Event-driver คือวิธีการเขียนโปรแกรมที่ใช้เหตุการณ์เป็นตัวดำเนินการต่าง ๆ เช่น เมื่อเกิดเหตุการณ์คลิกที่ปุ่ม จะไปเรียกฟังก์ชันที่กำหนดไว้ เป็นต้น วิธีการเขียนโปรแกรมแบบ Event-driver เป็นที่นิยมมากในภาษาโปรแกรมสมัยใหม่ และไลบรารี่ IOXhop_FirebaseESP32 ได้นำวิธีการเขียนโปรแกรมแบบนี้มาใช้ ร่วมกับการทำมัลติทาสกิ้ง
การสตรีมข้อมูลของไลบรารี่ IOXhop_FirebaseESP32 จะกำหนดผ่านฟังก์ชัน Firebase.stream() มีรูปแบบการใช้งานดังนี้
void Firebase.stream(String path, StreamHandlerCallback callback);
พารามิเตอร์มี 2 ตัว ดังนี้
และไม่มีค่าที่ส่งกลับ (void)
ฟังก์ชันที่นำมาเป็น callback จะต้องประกอบไปด้วยพารามิเตอร์เพียงตัวเดียว และพารามิเตอร์ตัวนั้นต้องมีชนิดข้อมูลเป็น FirebaseStream (คลาส FirebaseStream)
รายชื่อฟังก์ชันทั้งหมดที่มีในคลาส FirebaseStream มีดังนี้
ฟังก์ชันที่ต้องเรียกใช้ คือ .getEvent() และ .getPath() ส่วน .getData...() นั้นเลือกใช้ได้ตามชนิดข้อมูลที่ต้องการ
ตัวอย่างการสตรีมข้อมูลในไลบรารี่ IOXhop_FirebaseESP32 (โค้ดเต็ม)
จำเป็นต้องติดตั้งไลบรารี่ ArduinoJson เพิ่มเติมด้วย เนื่องจากการส่งข้อมูลไปให้ Firebase จะทำในรูปแบบ Json
เพื่อไม่ให้อุปกรณ์ IoT ที่ทำขึ้นมานั้นไม่สามารถสามารถใช้งานได้เพราะ Firebase เปลี่ยน CA ตัวไลบรารี่ IOXhop_FirebaseESP32 จึงแก้ปัญหาด้วยการไม่ตรวจสอบ CA ของ Firebase เลย ทำให้การรับ-ส่งข้อมูลแม้จะเป็น https แต่ยังต้องระวังเรื่องการแฮกข้อมูลเนื่องจากการปลอม CA ระหว่างทางด้วย
** โปรดพิจารณาความเสี่ยงที่ข้อมูลของท่านอาจจะส่งไปยังเซิร์ฟเวอร์ Firebase ตัวปลอม กรณีรับ - ส่งข้อมูลที่สำคัญ ไม่ควรใช้ไลบรารี่นี้โดยเด็ดขาด **
รองรับการใช้งานกับ Realtime Database เต็มความสามารถ แต่ไม่สามารถใช้งาน Cloud Messaging ได้ในขณะนี้ (และไม่มีแผนจะรองรับในอนาคตอันใกล้)
เนื่องจากไลบรารี่ firebase-arduino ที่ใช้บน ESP8266 ไม่สามารถใช้งานได้ ทางร้านจึงจัดทำไลบรารี่ IOXhop_FirebaseESP32 ขึ้นมาเพื่อใช้งานทดแทน การใช้งานจะเหมือนกับไลบรารี่ firebase-arduino ทุกประการ ยกเว้นการสตรีมข้อมูลที่เปลี่ยนรูปแบบไป และไม่สามารถใช้ Cloud Messaging ได้
บทความนี้เป็นบทความสั้น ๆ เพื่อแนะนำไลบรารี่ IOXhop_FirebaseESP32 ที่ทางร้านได้จัดทำขึ้นมา ในบทความถัดไปจะเป็นเรื่องเกี่ยวกับอะไร ก็ฝากติดตามกันด้วยนะครับ
~ สวัสดีครับ ~