esp32 เชื่อมต่อ firebase
esp32 เชื่อมต่อ firebase

Firebase คือ Platform ที่รวบรวมเครื่องมือต่าง ๆ ช่วยให้การจัดการในส่วนของ Backend หรือ Service side ทำให้สามารถสร้าง Mobile App ได้อย่างมีประสิทธิภาพ ยังลดเวลาและค่าใช้จ่าย หรือการวิเคราะห์ข้อมูลให้อีกด้วย โดยมีทั้งเครื่องมือที่ฟรี และเครื่องมือที่มีค่าใช้จ่าย อุปกรณ์ ESP32 ใช้งานร่วมกับ firebase ได้อย่างมีประสิทธิ์ภาพ เป็นอีกช่องทางในการเก็บข้อมูล

ข้อดีของ Realtim Database ของ Firebase

สิ่งที่ใช้งานจะเป็นในส่วนของ Realtime Database คือบริการฐานข้อมูล NoSQL ใช้วิธีการเก็บข้อมูลเป็น JSON Tree ขนาดใหญ่ และสามารถ Sync สถานะข้าม Client ได้แบบ Realtime กล่าวคือ หากเชื่อมต่อ Database เดียวกัน 2 ที่ เมื่อใดที่ที่นึงมีการอัพเดตข้อมูล อีกที่นึงก็จะมีการอัพเดตข้อมูลให้เหมือนกันโดยอัตโนมัติ และสามารถทำงานแบบ Offline ได้

วิธีสร้าง Firebase ให้ใช้งานร่วมกับ ESP32 ได้

1.สร้าง User ที่ https://firebase.google.com/ -> สร้างเสร็จ -> ไปที่คอนโซล จากนั้น เพิ่มโปรเจ็กต์

2.จากนั้นจะเลือก Google Analytics เลือก Email ของเรา

3.สร้างเสร็จแล้ว ก็ไปที่ การตั้งค่าโครงการ -> บัญชีบริการ -> เก็บ Key ข้อมูลลับ

4.ไปที่ Database ทำการ สร้างฐานข้อมูล เลือก เริ่มต้นในโหมดทดสอบ -> เลือที่ตั้ง Server ให้เลือกไปที่ Asia-east2

5.สร้างเสร็จแล้ว เลือไปที่ Realtime Database สร้างเสร็จแล้ว ด้านบนจะ บอกชื่อที่อยู่ของ Database

จากนั้น เขียนโปรแกรม ESP32 เชื่อมต่อ Firebase

            ทำการติดตั้ง library ชื่อว่า IOXhop_FirebaseESP32-master และ Firebase-ESP32-master โหลดได้จาก ที่นี้ google.drive

ของตัว Firebase จะมีตัวของ Json ติดตั้งมาแล้วสามารถใช้งานได้โดยไม่ติดตั้งปัญหาการทำงาน ใช้ Json v5.13.x

เลือกไปที่ Excemple -> IOXSHOP_Firebase32 -> FirebaseDemo_Esp32 จะเป็นตัวอย่างของการทำงาน ตัวอย่าง Code โปรแกรมด้านล้าง

//
// Copyright 2015 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

// FirebaseDemo_ESP32 is a sample that demo the different functions
// of the FirebaseArduino API.

#include <WiFi.h>
#include <IOXhop_FirebaseESP32.h>

// Set these to run example.
#define FIREBASE_HOST "example.firebaseio.com"
#define FIREBASE_AUTH "token_or_secret"
#define WIFI_SSID "SSID"
#define WIFI_PASSWORD "PASSWORD"

void setup() {
  Serial.begin(115200);

  // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());
  
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

int n = 0;

void loop() {
  // set value
  Firebase.setFloat("number", 42.0);
  // handle error
  if (Firebase.failed()) {
      Serial.print("setting /number failed:");
      Serial.println(Firebase.error());  
      return;
  }
  delay(1000);
  
  // update value
  Firebase.setFloat("number", 43.0);
  // handle error
  if (Firebase.failed()) {
      Serial.print("setting /number failed:");
      Serial.println(Firebase.error());  
      return;
  }
  delay(1000);

  // get value 
  Serial.print("number: ");
  Serial.println(Firebase.getFloat("number"));
  delay(1000);

  // remove value
  Firebase.remove("number");
  delay(1000);

  // set string value
  Firebase.setString("message", "hello world");
  // handle error
  if (Firebase.failed()) {
      Serial.print("setting /message failed:");
      Serial.println(Firebase.error());  
      return;
  }
  delay(1000);
  
  // set bool value
  Firebase.setBool("truth", false);
  // handle error
  if (Firebase.failed()) {
      Serial.print("setting /truth failed:");
      Serial.println(Firebase.error());  
      return;
  }
  delay(1000);

  // append a new value to /logs
  String name = Firebase.pushInt("logs", n++);
  // handle error
  if (Firebase.failed()) {
      Serial.print("pushing /logs failed:");
      Serial.println(Firebase.error());  
      return;
  }
  Serial.print("pushed: /logs/");
  Serial.println(name);
  delay(1000);
}

อธิบายคำสั่ง Code ที่ใช้งานต่างๆ

 #define FIREBASE_HOST "example.firebaseio.com"   // ใส่ ที่อยู่ของ Database
 #define FIREBASE_AUTH "token_or_secret"     // ใส่ Token ที่เป็นความลับ
 #define WIFI_SSID "SSID"  // ใส่ SSID WiFi
 #define WIFI_PASSWORD "PASSWORD"   // ใส่ Password WiFi 

..

Serial.begin(9600);   // แก้ 9600 ให้เป็น 115200  แล้วไปตรวจสอบที่ Firebase ได้เลย

..

Firebase.setFloat("number", 42.0);  // ทำการสร้าง พาทว่า number เก็บค่า ตัวเลข float
if (Firebase.failed()) {  // ทำการตรวจสอบ การส่งค่าไปยัง Firebase ว่า Error ไหม
    Serial.print("setting /number failed:"); 
    Serial.println(Firebase.error());   
    return; 
}
Firebase.setFloat("number", 43.0);  // ทำการ Update ค่าที่ พาท number จาก 42 เป็น 43
Firebase.remove("number");  // ทำการ remove พาท number
Firebase.setString("message", "hello world");  // ทำการสร้าง พาทว่า message เก็บค่า ตัวอักษร String
Firebase.setBool("truth", false);   // ทำการสร้าง พาทว่า truth  เก็บค่า เป็น  Boolean ให้ค่าเป็น false
Firebase.pushInt("logs", n++);   // ทำการสร้าง พาทที่เป็นค่า log เก็บค่า เป็น  Int ให้ n+1 ตลอด
pushInt  คือค่าของ log ที่ gen มาจาก firebase จึงต้องมาเก็บค่าไว้ที่ Name ก่อน
Firebase.getInt("logs") //  เป็นการดึงค่าเก็บไว้ในพาท logs อยู่ใน firebase มาใช้งาน 
การใช้งคำสั่ง get จะต้องทราบ Type ของข้อมูลด้วย ไม่งั้นจะ Error

เป็นคำสั่งพื้นฐานที่ใช้งานบน Googel Firebase ทุกท่านลองไปใช้งานดูได้ แล้วถ้าติดปัญหาตรงไหน Add Line มาคุยได้เลย ทางเราจะช่วยเหลือท่าน หรือ สนใจสมัครเข้าร่วม Workshop กับเราได้