ESP8266 và Firebase

Firebase và ESP8266 có liên quan gì nhau ? Cách để lưu dữ liệu thu thập từ ESP8266 lên database đơn giản có thể truy xuất khắp mọi nơi là gì ?

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. Nếu cần xây dựng một ứng dụng cho mobile hoặc các thiết bị di động khác, mà bạn đang gặp khó khăn vì không biết chọn dịch vụ VPS nào, loại database gì . . . thì Firebase sẽ là dịch vụ dành cho bạn.

FireBase có thể rất mạnh mẽ đối với ứng dụng backend, nó bao gồm việc lưu trữ dữ liệu, xác thực người dùng, static hosting……Nên lập trình viên chỉ cần chú tâm đến việc nâng cao trải nghiệm người dùng.

Mình cùng điểm qua các tính năng và lợi ích của firebase xem sao

Realtime Database

  • Firebase lưu trữ dữ liệu database dưới dạng JSON và thực hiện đồng bộ database tới tất cả các client theo thời gian thực. Cụ thể hơn là bạn có thể xây dựng được client đa nền tảng (cross-platform client) và tất cả các client này sẽ cùng sử dụng chung 1 database đến từ Firebase và có thể tự động cập nhật mỗi khi dữ liệu trong database được thêm mới hoặc sửa đổi.
  • Tự động tính toán quy mô ứng dụng của bạn, giúp bạn dễ dàng hơn rất nhiều mỗi khi cần nâng cấp hay mở rộng dịch vụ. Ngoài ra Firebase sử dụng NoSQL, giúp cho database của bạn sẽ không bị bó buộc trong các bảng và các trường mà bạn có thể tùy ý xây dựng database theo cấu trúc của riêng bạn.
  • Cho phép bạn phân quyền một cách đơn giản bằng cú pháp tương tự như javascript.

Khi ứng dụng của bạn muốn phát triển, bạn không cần lo lắng về việc nâng cấp máy chủ…Firebase sẽ xử lý việc tự động cho bạn. Các máy chủ của Firebase quản lý hàng triệu kết nối đồng thời và hàng tỉ lượt truy vấn mỗi tháng.

Các tính năng bảo mật

Firebase hoạt động dựa trên nền tảng cloud và thực hiện kết nối thông qua giao thức bảo mật SSL, chính vì vậy bạn sẽ bớt lo lắng rất nhiều về việc bảo mật của dữ liệu cũng như đường truyền giữa client và server. Không chỉ có vậy, việc cho phép phân quyền người dùng database bằng cú pháp javascipt cũng nâng cao hơn nhiều độ bảo mật cho ứng dụng của bạn, bởi chỉ những user mà bạn cho phép mới có thể có quyền chỉnh sửa cơ sở dữ liệu.

Làm việc offline

Ứng dụng Firebase của bạn sẽ duy trì tương tác bất chấp một số các vấn đề về internet xảy ra. Trước khi bất kỳ dữ liệu được ghi đến server thì tất cả dữ liệu lập tức sẽ được viết vào một cơ sử dữ liệu Firebase ở local. Ngay khi có thể kết nối lại, client đó sẽ nhận bất kỳ thay đổi mà nó thiếu và đồng bộ hoá nó với trạng thái hiện tại server.

Xác thực người dùng

Với Firebase, bạn có thể dễ dàng xác thực người dùng từ ứng dụng của bạn trên Android, iOS và JavaScript SDKs chỉ với một vài đoạn mã. Firebase đã xây dựng chức năng cho việc xác thực người dùng với Email, Facebook, Twitter, GitHub, Google, và xác thực nặc danh. Các ứng dụng sử dụng chức năng xác thực của FireBase có thể giải quyết được vấn đề khi người dùng đăng nhập, nó sẽ tiết kiện thời gian và rất nhiều các vấn đề phức tạp về phần backend. Hơn nữa bạn có thể tích hợp xác thực người dùng với các chức năng backend đã có sẵn dùng custom auth tokens.

Firebase Hosting

Các bạn có thể triển khai một ứng dụng nền web chỉ với vài giây (chém gió tới từ firebase, chính mình cũng không tin lắm) với hệ thống Firebase, và các dữ liệu sẽ được lưu trữ đám mây đồng thời được bảo mật thông qua giao thức truy cập SSL.

Các ứng dụng sẽ được cấp 1 tên miền dạng *.firebaseio.com hoặc bạn có thể trả tiền để sử dụng tên miền của riêng mình.

Triểu khai siêu tốc

Với Firebase bạn có thể giảm bớt rất nhiều thời gian cho việc viết các dòng code để quản lý và đồng bộ cơ sở dữ liệu, mọi việc sẽ diễn ra hoàn toàn tự động với các API của Firebase. Không chỉ có vậy Firebase còn hỗ trợ đã nền tảng nên bạn sẽ càng đỡ mất thời gian rất nhiều khi ứng dụng bạn muốn xây dựng là ứng dụng đa nền tảng. Không chỉ nhanh chóng trong việc xây dựng database, Google Firebase còn giúp ta đơn giản hóa quá trình đăng kí và đăng nhập vào ứng dụng bằng các sử dụng hệ thống xác thực do chính Firebase cung cấp.

Sự ổn định

Firebase hoạt động dựa trên nền tảng Cloud đến từ Google vì vậy hầu như bạn không bao giờ phải lo lắng về việc sập server, tấn công mạng như DDOS, tốc độ kết nối lúc nhanh lúc chậm, … nữa.

Giá thành

Google Firebase có rất nhiều gói dịch vụ với các mức dung lượng lưu trữ cũng như băng thông khác nhau với mức giá dao động từ Free đến $1500 đủ để đáp ứng được nhu cầu của tất cả các đối tượng. Chính vì vậy bạn có thể lựa chọn gói dịch vụ phù hợp nhất với nhu cầu của mình. Điều này giúp bạn tới ưu hóa được vốn đầu tư và vận hành của mình tùy theo số lượng người sử dụng. Ngoài ra bạn còn không mất chi phí để bảo trì, nâng cấp, khắc phục các sự cố . . .

Thông tin trên mình có tổng hợp và chỉnh sửa lại một chút từ vtcacademy và techmaster.

ESP8266 có liên quan gì tới Firebase ?

Như mình đã nói ở trên firebase là cloud, nghĩa là mọi thứ có kết nối internet thì đều có thể “tương tác” với anh Firebase này. Nhìn lại thì ESP8266 của chúng ta có kết nối internet, và thật may mắn là firebase cũng có hỗ trợ cho ESP8266 luôn :D, nên có thể dùng ESP8266 để lấy dữ liệu từ cảm biến và gửi lên firebase

Làm thế nào để gửi dữ liệu và lưu vào database của Firebase dùng ESP8266 ? Mình xin đi vào ví dụ cụ thể luôn

À anh em nào chưa biết gì về ESP8266 ứng dụng trong IOT mình coi qua bài giới thiệu này nhé.

Chuẩn bị

  1. Phần cứng: ESP8266, ở đây mình dùng NodeMCU
  2. Phần mềm: Arduino IDE và thư viện https://github.com/firebase/firebase-arduino

Tạo tài khoản

Việc tạo tài khoản khá đơn giản, bạn chọn Get Started for free hoặc ấn vào đăng nhập, dùng tài khoản google của mình là xong

Tạo một project mới

Ví dụ 1 tạo dữ liệu trong database

Bước 1: Chỉnh rule cho Database cho phép ai cũng có thể ghi vào, chỉnh null thành true, sau đó publish để lưu lại

Bước 2: Lập trình trên ESP8266

Chương trình

Trong chương trình có phần cần phải thay đổi

#define FIREBASE_HOST "hocarm1.firebaseio.com" //Thay bằng địa chỉ firebase của bạn
#define FIREBASE_AUTH ""   //Không dùng xác thực nên không đổi
#define WIFI_SSID "ten_wifi"   //Thay wifi và mật khẩu
#define WIFI_PASSWORD "mat_khau"

Với chương trình trên sẽ tự tạo trong database giá trị led thay đổi từ 0-9

Bước 4: Kết quả

Bạn có thể mở terminal của Arduino ra để so sánh giá trị với database

Ví dụ 2 dùng ESP đọc/ghi/xóa nhiều dữ liệu

Bước 1: Mình sửa lại rule trong Database là ".read": "auth != true",  để có thể đọc giá trị từ database

Bước 2: Chương trình ghi đọc nhiều dữ liệu lên database

Chương trình

Chương trình này sẽ thực hiện các nhiệm vụ

  • Lưu giá trị float number vào db
  • Cập nhật giá trị number vào db
  • Lấy giá trị number từ db hiển thị ra terminal
  • Thêm chuỗi hello world vào db
  • Thêm giá trị kiểu bool vào db
  • Lưu lại log vào db
  • Kiểm tra lỗi

Bước 3: Kết quả trực quan cho mọi người dễ theo dõi

Ví dụ 3 xác thực vào database

Ở 2 ví dụ trên mình mở quyền read write cho ai cũng có thể ghi dữ liệu vào, việc này thuận tiện trong quá trình học và debug, tuy nhiên nhược điểm lớn nhất là ai cũng có thể truy xuất vào database của mình, điều này thì quá là nguy hiểm. Giờ mình muốn khắc phục thì phải làm sao ?

Bước 1: Chỉnh lại rule trong database về nguyên gốc

Bạn có thể thấy sau khi chuyển về null thì sẽ có thông báo từ terminal là lỗi, đây là lỗi không kết nối được vào database

Bước 2: Lấy Database Secrets

Bước 4: Thêm mã này vào code ở trên phần #define FIREBASE_AUTH "" là xong

Bước 5: Build và nạp lại vào ESP8266 và xem lại kết quả

Tạm kết

Thế là đã tạm xong firebase với ESP8266, mình có thể lưu được các giá trị lên database theo một cách đơn giản nhất, có xác thực và bảo mật nên vô cùng yên tâm. Hi vọng sẽ giúp ích cho các bạn.

17 thoughts on “ESP8266 và Firebase

  1. Chào bạn,

    Mình làm theo hướng dẫn trên nhưng gặp vấn đề với Firebase. Mình tìm hiểu thì có một số trường hợp giống như thế ( https://github.com/firebase/firebase-arduino/issues/255#issuecomment-298264632 ).

    Mình có đăng câu hỏi lên diễn đàn ARMVN nữa. Đã có 1 bạn giúp đỡ nhưng vẫn chưa khắc phục được (https://www.facebook.com/groups/armvn/permalink/1398828293531179/)

    Mong bạn hướng dẫn để fix lỗi này.

    P/s: Mình có cách nào debug đến thư viện FirebaseArduino ko bạn?

    1. Hi bạn,
      Như mình thấy thì lỗi bạn đưa ở trên là khi sử dụng với platformIO, không biết có phải bạn dùng với cái này hay là bạn sử dụng với Arduino IDE ?
      Mình có thấy bạn lưu thư viện vào mục ~/Documents/Arduino/libraries/firebase-arduino-master
      Của mình lưu tại C:Program Files (x86)Arduinolibrariesfirebase-arduino và chạy hoàn toàn bình thường.
      Debug thư viện Firebase theo mình chỉ có cách xem flow trong code của nó và in log ra thôi 😀

    2. Mình thử với PlatformIO + Sublime ok bạn nhé, code ở ví dụ 1 chạy ok, bạn có thể gửi lỗi cụ thể bạn gặp lên đây xem thế nào.

  2. bạn test lại chửa ak do mới đổi vào cuối tháng 8 á , đồ án của mình đang xài bt tự nhiên giờ ko connect dc tưởng con esp 8266 hư ai ngờ thử mấy con khác cũng ko dc , mong add giúp đỡ

      1. #include
        #include
        #define FIREBASE_HOST “dieu-khien-thiet-bi-58921.firebaseio.com”
        #define FIREBASE_AUTH “”
        #define WIFI_SSID “Hoang Nam”
        #define WIFI_PASSWORD “901089733”

        void setup() {
        Serial.begin(9600);
        pinMode(16,OUTPUT);
        // Két nối 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);
        }
        void loop() {
        String giatri = Firebase.getString(“Led”);
        Serial.println(giatri);
        Serial.println(giatri.toInt());
        if(giatri.toInt() == 1)
        {
        digitalWrite(16,HIGH);
        delay(100);
        }
        else if(giatri.toInt() == 0)
        {
        digitalWrite(16,LOW);
        delay(100);
        }
        delay(500);
        }

  3. ad ơi cho e hỏi e cần lưu giá trị nhiệt độ lên firebase 5p 1 lần và dữ liệu cũ không bị mất đi để truy xuất khi cần được không? hay mỗi lần cập nhật là mất dữ liệu cũ vậy a? cám ơn ad

  4. bạn ơi cho mình hỏi khi update dữ liệu từ wemos lên database của firebase thì bt.
    nhưng khi mình khai báo thêm IO thì bị treo
    “ets Jan 8 2013,rst cause:4, boot mode:(1,0)

    wdt reset”
    cho hỏi như thế là sao v bạn

  5. ban ơi cho mình hỏi mình làm app adroin điều khiểu bật tắt bóng đèn qua firebase h mình làm được phần điều khiển bật tắt rồi , mình muốn có tín hiệu phản hồi để biết bóng có hỏng ko bạn giúp mình đc ko vậy

Add Comment