Hôm nay xin chia sẻ với các bạn cách điều khiển thiết bị bằng smartphone, ngoài ra ta còn có thể quan sát/ giám sát được thông tin dữ liệu, các thông số như nhiệt độ, độ ẩm môi trường theo thời gian thông qua smartphone của mình.

Để chuẩn bị bắt đầu thì bạn cần biết một ít kiến thức về cách lập trình với ESP8266 mình có trình bày ở một số bài viết trước. Nếu bạn đã biết rồi thì có thể bỏ qua.

Chuẩn bị

Phần cứng

  • Kit Node MCU hoặc ESP8266 v7 + mạch USB2UART tương ứng
  • Dây nối
  • Breadboard
  • Cảm biến DHT11 hoặc DHT22
  • Điện thoại smartphone dùng hdh Android hoặc iOS

Phần mềm

  • Phần mềm lập trình cho ESP8266 là Arduino IDE
  • App Blynk cho AndroidiOS

Tại sao lại dùng Blynk ?

Blynk thực ra là một cái app trên điện thoại, cho phép người dùng có thể tạo ra giao diện và điều khiển thiết bị theo ý thích của cá nhân. Mình lựa chọn Blynk vì một số lý do sau:

  • Dễ sử dụng: Quá đơn giản, chỉ việc vào store, cài đặt, sau đó đăng ký tài khoản và mất không quá 5 phút để làm quen.
  • Đẹp và đầy đủ: Giao diện của Blynk quá tuyệt vời, sử dụng bằng cách kéo thả, bạn cần nút bấm, kéo thả nút bấm, bạn cần đồ thị, kéo thả đồ thị, bạn cần LCD, kéo thả LCD, tóm lại là bạn cần gì thì kéo thả cái đó.
  • Không phải lập trình android hay ios: Nếu như không có kiên thức về làm app trên điện thoại thì việc điều khiển thiết bị từ chính smartphone của mình quả là điều vô cùng khó khăn và phức tạp. Nhờ blynk thì chúng ta có thể bỏ qua bước lập trình tạo app. Có thể thử nhanh chóng và ứng dụng được dự án của mình vào thực tế.
  • Thử nghiệm nhanh chóng, có thể điều khiển giám sát ở bất kỳ nơi nào có internet.

Tất nhiên ngoài những điểm lợi từ blynk thì còn có những cái hạn chế như phải mua energy để tạo được nhiều giao diện và chia sẻ giao diện cho người khác. Những cái này cũng không phải là vấn đề lớn lắm.

Để sử dụng được blynk thì cần phải tải thư viện của nó thông qua Arduino IDE

Chọn Sketch -> Include Library -> Manage Libraries, tìm kiếm blynk và install.

Bật tắt LED qua điện thoại

Tới đây là đã xong được các bước chuẩn bị. Giờ thì mình đi vào lập trình điều khiển ấn nút trên blynk LED nối với chân D0 trên kit NodeMCU sáng/ tắt

Sơ đồ chân của NodeMCU/ ESP8266

Tạo tài khoản mới trên blynk khá đơn giản chỉ việc nhập email và pass vào là xong nên mình sẽ bỏ qua bước này

Tạo project mới cho blynk

Thêm nút nhấn vào blynk

Lấy Auth token để có thể kết nối tới ESP8266 bằng cách vào hình lục giác, chọn new device và lưu lại giá trị tại AUTH TOKEN.

Xem như đã xong được giao diện đơn giản trên điện thoại, giờ là chương trình cho ESP8266

Lưu ý: Có 3 chỗ cần thay thông tin là YourAuthToken, YourNetworkName,YourPassword

#define BLYNK_PRINT Serial    
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

char auth[] = "YourAuthToken";    //AuthToken copy ở Blynk Project
char ssid[] = "YourNetworkName";  //Tên wifi
char pass[] = "YourPassword";     //Mật khẩu wifi
void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, ssid, pass);
}

void loop()
{
  Blynk.run();
}

Thử thành quả bằng cách ấn vào nút play hình tam giác và tác động lên nút nhấn xem kết quả.

Giám sát nhiệt độ, độ ẩm

Như ở bài hướng dẫn đọc nhiệt độ độ ẩm với ESP8266 thì các bạn đã biết được cách đọc và hiển thị thông tin về nhiệt độ, độ ẩm lên máy tính, giờ chúng ta thử kết hợp blynk để hiển thị thông tin này lên điện thoại xem thế nào

Sử dụng giao diện blynk đã tạo bên trên, thêm value display S và value display M

Cấu hình cho các thuộc tính mới add, chọn pin là virtual v0 và v1,đặt lại tên và chọn màu sắc hiển thị

Cuối cùng là viết chương trình cho ESP8266 và thay đổi  thông tin về token và wifi sau đó nạp chương trình

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>

char auth[] = "AuthToken";        //Token cua blynk
char ssid[] = "wifi_name";        //Ten wifi
char pass[] = "password";         //Pass wifi

#define DHTPIN 5          // Pin ket noi voi DHT
#define DHTTYPE DHT11     // Su dung cam bien DHT11
DHT dht(DHTPIN, DHTTYPE); // Cau hinh chan DHT 

SimpleTimer timer;        // Su dung timer

//Ham gui du lieu
void sendSensor()
{
  float h = dht.readHumidity();     //Doc gia tri do am
  float t = dht.readTemperature();  //Doc gia tri nhiet do

  // Gan du lieu vao bien virtual de hien thi len blynk
  // Chi nen gan 10 bien tro xuong
  delay(10);
  Blynk.virtualWrite(V0, h);
  Blynk.virtualWrite(V1, t);
  // Luu y nen ban khong du energy thi co the bo qua v2 va v3
  Blynk.virtualWrite(V2, h);
  Blynk.virtualWrite(V3, t);
}
void setup() {
  Serial.begin(9600);                   // Mo Serial
  Blynk.begin(auth, ssid, pass);        // Ket noi voi blynk
  dht.begin();                          // Khoi tao DHT
  timer.setInterval(1000L, sendSensor); //1s doc cam bien 1 lan
}
void loop() {
  Blynk.run(); // Chay Blynk
  timer.run(); // Chay SimpleTimer
// Debug
//  Serial.print("Do am: ");
//  Serial.print(h);
//  Serial.print(" %\t");
//  Serial.print("Nhiet do: ");
//  Serial.print(t);
//  Serial.println(" *C ");
//  delay(2000);                // Doi chuyen doi.
}

Kết quả

Ấn vào nút tam giác và chờ kết quả hiển thị, sau mỗi 1 giây thì giá trị nhiệt độ và độ ẩm sẽ cập nhật 1 lần

Lưu ý: Nếu bạn bị lỗi tại thư viện SimpleTimer.h thì bạn có thể tải và cập nhật thủ công tại đây

Cố thêm chút nữa

Xem như chúng ta đã hoàn thành được việc hiển thị nhiệt độ và độ ẩm, giờ nếu còn energy thì thêm graph và gauge hiển thị thông tin cho rực rỡ sắc màu, history graph thường cập nhật sau mỗi 1 phút mới lên dữ liệu nên nếu không thấy thì bạn cứ chờ đợi nhé.

Chỉnh sửa giao diện, cấu hình và kết quả

Tạm kết

Thế là chúng ta đã có thể điều khiển bật tắt đèn thông qua smartphone, ngoài ra còn có thể quan sát được nhiệt độ và độ ẩm của môi trường nữa, đây chỉ là những bước khởi đầu để bạn làm quen với việc lập trình, điều khiển, giám sát thông qua điện thoại. Blynk có thể dùng để điều khiển và giám sát ở bất kỳ nơi nào có internet, không bị giới hạn trong một mạng cụ thể nào. Trong blynk còn rất nhiều điều lý thú để các bạn có thể tìm hiểu và khám phá thêm. Mình sẽ sớm cập nhật thêm các hướng dẫn cho các bạn trong các bài tiếp theo.