Bạn đã bao giờ nghĩ đến việc điều khiển một thiết bị ngoại vi bất kỳ từ bất cứ nơi nào trên thế giới? IoT (Internet of things) đã biến điều này thành hiện thực để điều khiển mọi thiết bị từ bất cứ đâu và hiện này có nhiều phần cứng và nền tảng đám mây IoT có sẵn để thực hiện được điều này. Tôi đã đề cập đến nhiều ứng dụng IoT trong các bài viết trước đây. Hôm nay chúng ta sẽ sử dụng đám mây Google Firebase để điều khiển đèn LED bằng NodeMCU ESP8266.
Firebase là nền tảng cơ sở dữ liệu của Google, được sử dụng để tạo, quản lý và sửa đổi dữ liệu được tạo từ bất kỳ ứng dụng Android, dịch vụ web, cảm biến, v.v.. Để biết thêm thông tin về Firebase, bạn truy cập trang web chính thức của Google Firebase.
Để điều khiển đèn LED từ Firebase, trước tiên, chúng ta sẽ thiết lập Mô-đun Wi-Fi NodeMCU ESP8266 và sau đó thiết lập Google Firebase.
Thiết lập mô-đun Wi-Fi NodeMCU ESP8266
Việc thiết lập NodeMCU rất dễ dàng và không mất nhiều thời gian. Bạn chỉ cần chuẩn bị một số linh kiện và thực hiện các bước sau đây.
Chuẩn bị linh kiện
- NodeMCU ESP8266(12E)
- Led
- Điện trở
Sơ đồ mạch
Khi đã lắp ráp mạch xong, bạn hãy làm theo các bước đơn giản dưới đây:
- Kết nối NodeMCU với máy tính.
- Mở phần mềm Arduino IDE.
- Chọn menu Tools và chọn “Board”.
- Trong phần Board, chọn ‘NodeMCU V1.0 (ESP-12E Module).
- Chọn Cổng COM thích hợp.
- Sau khi tìm thấy FIREBASE_HOST và và FIREBASE_AUT theo các bước hướng dẫn dưới đây, bạn thêm hai thông số này vào chương trình bên dưới và nạp chương trình để kiểm tra.
Thiết lập Firebase Console
Nếu bạn sử dụng Firebase lần đầu tiên thì bạn có thể mất một chút thời gian để thiết lập nó. Hãy kiên nhẫn và làm theo các bước này.
1. Nếu bạn đã có tài khoản Gmail thì bạn chỉ cần đăng nhập vào firebase, nếu bạn chưa có tài khoản Gmail thì đăng ký một tài khoản và sau đó bạn có thể chuyển sang bước tiếp theo.
2. Mở trình duyệt của bạn và truy cập vào firebase.google.com
3. Ở góc trên cùng bên phải, hãy nhấp vào ĐI TỚI BẢNG ĐIỀU KHIỂN.
4. Nhấp vào “Add a project“.
5. Nhập tên dự án của bạn.
6. Chấp nhận các điều khoản và điều kiện, tiếp tục nhấp vào Creat project. Cuối cùng nhấp vào Continue để tiếp tục.
Như vây là bạn đã tạo thành công dự án của mình. Tiếp theo, bạn cần biết tên máy chủ (Host Name) và khóa ủy quyền (Authorization Key) còn được gọi là khóa bí mật (Secret Key). Để biết các thông tin này, hãy làm theo các bước hướng dẫn dưới đây:
7. Nhấp vào biểu tượng cài đặt (hình bánh răng) rồi tiếp tục nhấp vào Project settings.
8. Tiếp tục nhấp vào “Service Accounts”
9. Bạn sẽ thấy 2 lựa chọn “Firebase Admin SDK” and “Database secrets”.
10. Nhấp vào “Database secrets”.
11. Nhấp vào chữ “Show“, bạn có thể thấy khóa bí mật (secret key) được tạo cho dự án của bạn.
12. Sao chép khóa bí mật và lưu nó vào notepad. Bạn sẽ phải chèn khóa bí mật này vào phần FIREBASE_AUTH trong chương trình bên dưới.
13. Bây giờ bạn nhấp vào “Database” trên thanh điều khiển bên trái.
14. Cuộn xuống dưới và nhấp vào “Create database” để tạo database.
15. Chọn Start in test mode và nhấp vào Enable.
16. Đến đây thì cơ sở dữ liệu của bạn đã được tạo và bạn sẽ phải thực hiện thêm một bước nữa để điều khiển LED.
18. Ngay phía trên cơ sở dữ liệu bạn có thể thấy “https://xxx.firebaseio.com/”
18. Chỉ cần copy phần xxx.firebaseio.com (bỏ qua dấu gạch chéo và https) và chèn vào phần FIREBASE_HOST trong chương trình bên dưới.
Chương trình
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>
#define FIREBASE_HOST “xxx.firebaseio.com”
#define FIREBASE_AUTH “xxxxxxxxxxxxxxxx”
#define WIFI_SSID “ten_wifi”
#define WIFI_PASSWORD “matkhau_wifi”
String fireStatus = “”;
int led = D3;
void setup() {
Serial.begin(9600);
delay(1000);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(led, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print(“Dang ket noi “);
Serial.print(WIFI_SSID);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(“.”);
delay(500);
}
Serial.println();
Serial.print(“Da ket noi “);
Serial.println(WIFI_SSID);
Serial.print(“Dia chi IP la : “);
Serial.println(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Firebase.setString(“LED_STATUS”, “OFF”);
}
void loop() {
fireStatus = Firebase.getString(“LED_STATUS”);
if (fireStatus == “ON” || fireStatus == “on”) {
Serial.println(“LED SANG”);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(led, HIGH);
}
else if (fireStatus == “OFF” || fireStatus == “off”) {
Serial.println(“LED TAT”);
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(led, LOW);
}
else {
Serial.println(“Lenh dieu khien sai! Vui long gui ON/OFF”);
}
}
Giải thích chương trình
Đầu tiên thêm các thư viện để sử dụng ESP8266 và firebase.
#include <ESP8266WiFi.h
#include <FirebaseArduino.h
Hai thông số này rất quan trọng để liên lạc với firebase. Thiết lập các tham số này sẽ cho phép trao đổi dữ liệu giữa và ESP8266 và firebase. Để tìm các tham số này cho dự án của bạn, hãy làm theo các bước đã hướng dẫn ở bên trên.
#define FIREBASE_HOST “xxx.firebaseio.com”
#define FIREBASE_AUTH “xxxxxxxxx”
Các thông số bên dưới được sử dụng để kết nối với mạng Wi-Fi tại nhà của bạn hoặc mạng mà bạn thiết lập. Bạn nhập tên và mật khẩu mạng của bạn. Ngoài ra internet là cần thiết để liên lạc với firebase.
#define WIFI_SSID “ten_wifi”
#define WIFI_PASSWORD “matkhau_wifi”
Câu lệnh này cố gắng kết nối với mạng Wi-Fi mà bạn đã nhập tên và mật khẩu.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Khi kết nối với Wi-Fi, nếu không thể kết nối với mạng thì chỉ cần in (.) cho đến khi việc kết nối được thực hiện thành công.
while (WiFi.status() != WL_CONNECTED) {
Serial.print(“.”);
delay(500);
}
Câu lệnh này cố gắng kết nối với máy chủ firebase. Nếu địa chỉ máy chủ và khóa ủy quyền (authorization key) là chính xác thì sẽ kết nối thành công.
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
Đây là lệnh được cung cấp bởi thư viện firebase để gửi chuỗi đến máy chủ firebase. Để sử dụng nhiều lệnh hơn hãy vào liên kết này. Với sự giúp đỡ của lệnh này, chúng ta có thể thay đổi trạng thái của đèn LED.
Firebase.setString(“LED_STATUS”, “OFF”);
Sau khi gửi một chuỗi trạng thái đến đường dẫn firebase, câu lệnh này dùng để lấy trạng thái của LED từ cùng một đường dẫn và lưu nó vào biến.
fireStatus = Firebase.getString(“LED_STATUS”);
Nếu chuỗi nhận được “ON” hoặc “on” thì sẽ bật đèn LED tích hợp trên NodeMCU và đèn LED được kết nối bên ngoài.
if (fireStatus == “ON” || fireStatus == “on”) {
Serial.println(“LED SANG”);
digitalWrite(LED_BUILTIN, HIGH);
digitalWrite(led, HIGH);
}
Nếu chuỗi nhận được “OFF” hoặc “off” thì sẽ tắt đèn LED tích hợp trên NodeMCU và đèn LED được kết nối bên ngoài.
else if (fireStatus == “OFF” || fireStatus == “off”) {
Serial.println(“LED TAT”);
digitalWrite(LED_BUILTIN, LOW);
digitalWrite(led, LOW);
}
Nếu chuỗi nhận được không phải là một trong số này thì bỏ qua và in ra thông báo lỗi.
else {
Serial.println(“Lenh dieu khien sai! Vui long gui ON/OFF”);
Kết quả
Sau khi chỉnh sửa và nạp chương trình trên vào NodeMCU ESP8266, bạn mở database của firebase và viết “ON” hoặc “on” và “OFF” hoặc “off” trong phần “LED_STATUS” để điều khiển LED từ màn hình điều khiển Google Firebase.