ESP8266 và Firebase. Điều khiển thiết bị Smarthome

1 Firebase là gì?




Firebase là một dịch vụ cơ sở dữ liệu thời gian thực hoạt động trên nền tảng đám mây được cung cấp bởi Google nhằm giúp các lập trình phát triển nhanh các ứng dụng bằng cách đơn giản hóa các thao tác với cơ sở dữ liệu. Firebase là sự kết hợp giữa nền tảng cloud với hệ thống máy chủ cực kì mạnh mẽ tới từ Google, để cung cấp cho chúng ta những API đơn giản, mạnh mẽ và đa nền tảng trong việc quản lý, sử dụng database. Với firebase chúng ta có thể tạo ra các ứng dụng như chat, game,  hay trong IoT là điều khiển thiết bị thời gian thực.
Firebase  cung cấp cho người dùng các chức năng như:
  • Realtime Database : Cơ sở dữ liệu đám mấy noSQL data được lưu trữ dưới dạng Json. Dữ liệu được đồng bộ hóa với tất cả client trong thời gian thực.
  • Firebase Authentication: Hệ thống xác thực quyền.
  • Firebase Hosting: Giúp tạo một ứng dụng nền web với tên miền *firebaseapp.com
Ở phần real-time database firebase cho chúng ta sử dụng miễn phí 10GB data download, 1GB storage và 100 truy xuất đồng thời trong một tháng. Nếu bạn sử dụng trên mức này thì phải mua thêm data theo các mức giá mà google firebase quy định. Với các ứng dụng IoT hay smarthome ứng dụng trong gia đình hay đồ án sinh viên thì lượng data miễn phí là đủ cho chúng ta sử dụng. Trên là sơ qua về Firebase và những ứng dụng của nó. Sau đây mình sẽ ứng dụng real-time database vào điều khiển thiết bị.

2 Phần cứng

  •  module Node-MCU hoặc ESP8266.
  • 4 LED
  • Beadboard
  • dây nối.

3 Nội dung

3.1 Tạo cơ sở dự liệu trên Firebase
Bước 1:  vào Firebase đăng nhập bằng tài khoản Gmail. click chọn "Đi tới bảng điều khiển"

Bước 2: Tạo project mới
Bước 3: Chọn tên project->Create
Bước 4: tạo các đối tượng trong database
Bước 5:  Đặt quyền đọc ghi với database
3.2 Kết nối với ứng dụng Android
Add package name của ứng dụng android vào firebase
3.3 Code Arduino cho Node-MCU
#include <FirebaseArduino.h>
#include <ESP8266WiFi.h>

#define WIFI_SSID "SSID" // change your WiFi name
#define WIFI_PASSWORD "********"  //change your Password  WiFi

#define Ligh1 16
#define Ligh2 5
#define Ligh3 4
#define Ligh4 14

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

pinMode(Ligh1, OUTPUT);
pinMode(Ligh2, OUTPUT);
pinMode(Ligh3, OUTPUT);
pinMode(Ligh4, OUTPUT);


// 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("demolight-c4c76.firebaseio.com"); // thay bằng địa chỉ ứng dụng của bạn
Firebase.stream("/devices"); 
}


void loop() {
if (Firebase.failed()) {
Serial.println("streaming error");
Serial.println(Firebase.error());
}

if (Firebase.available()) {
FirebaseObject event = Firebase.readEvent();
String eventType = event.getString("type");
eventType.toLowerCase();

Serial.print("event: ");
Serial.println(eventType);
if (eventType == "put") {
Serial.print("data: ");
Serial.println(event.getString("data"));
String path = event.getString("path");
String data = event.getString("data");
if (path == "/")
{
JsonVariant payload = event.getJsonVariant("data");
Serial.print("data: ");
bool light1 = payload["light1"];
bool light2 = payload["light2"];
bool light3 = payload["light3"];
bool light4 = payload["light4"];

digitalWrite(Ligh1, light1);
digitalWrite(Ligh2, light2);
digitalWrite(Ligh3, light3);
digitalWrite(Ligh4, light4);

payload.printTo(Serial);
}
if (path == "/light1")
{

bool payload = event.getBool("data");
digitalWrite(Ligh1, payload);
Serial.print("data light1: ");
Serial.println(payload);
}
if (path == "/light2")
{

bool payload = event.getBool("data");
digitalWrite(Ligh2, payload);
Serial.print("data light2: ");
Serial.println(payload);
}
if (path == "/light3")
{

bool payload = event.getBool("data");
digitalWrite(Ligh3, payload);
Serial.print("dalight3: ");
Serial.println(payload);
}
if (path == "/light4")
{
bool payload = event.getBool("data");
digitalWrite(Ligh4, payload);
Serial.print("data light4: ");
Serial.println(payload);
}

}
} 
}
Download Source Code(Android + ESP8266)
https://drive.google.com/drive/folders/10RRH_dFbMZ9O9du5plZKtVnD8l7idr5a?usp=sharing