Nhà thông minh Smart Home Công tắc WIFI với Blynk

Điều khiển thiết bị bằng WIFI hoặc Công tắc WIFI chính là 1 ứng dụng cơ bản nhất của Smart Home.

Điều khiển thiết bị bằng WIFI hoặc Công tắc WIFI chính là 1 ứng dụng cơ bản nhất của Smart Home. Với Blynk chúng ta sẽ thiết kế một bộ công tắc Wifi dùng trong hệ sinh thái “Nhà Thông Minh” Smart Home.

Tạo code với Blynk examples

Để chế tạo một công tắc wifi thông minh, chúng ta sẽ dùng các công cụ của Blynk Platform.

Blynk hỗ trợ ta nhiều ở trong việc viết code, anh em truy cập đường dẫn: Examples.blynk.cc

Trong đó là các bài viết Code, cho từng loại Board và ứng dụng khác nữa nhau.

Chúng ta truy cập vào link trên, Chọn Board là Node MCU, chọn Connection là ESP8266 WIFI, Auth Token cứ để trống, và chọn Exam là Blynk Blink.

Khi đó Blynk sẽ tự Gen ra một đoạn Code.

Blynk Exam

Các bạn đọc nhấn vào Coppy Example sau đó mở Arduino lên và paste vào.

Đổi SSID là tên gọi WIFI nhà bạn, PASS là mật khẩu WIFI nhà bạn đọc.

Sửa code blynk

Auth Token chính là mã ứng dụng của bạn để truy cập Blynk API. Cách lấy như dưới đây:

Đăng nhập vào Blynk, nhấp New Project -> Đặt tên gọi dự án, dòng chip Node MCU, kiểu kết nối là WIFI-> Nhấn Create, Blynk sẽ trở nên gởi mail về gmail đăng kí Blynk của bạn.

 Blynk-project    Blynk-project   Blynk Token

Coppy mã đó dán vào ô. Auth TokenAuth Token

Tool-Chọn Board Node MCU

Chon board

Sau đó chọn mục Port và nạp như Arduino thường lệ.

Điều khiển LED bằng App Blynk

Blynk hỗ trợ làm cho công tắc Wifi bằng các Widget, trong bài viết này ta dùng Button Widget. Mỗi một widget sẽ phải mua bằng Enegy, nếu hết Enegy bạn cần bỏ tiền ra mua. Nhưng đừng lo Blynk hỗ trợ cho mỗi Account 1000 enegy, theo đó cũng tha hồ để tạo 1 chiếc công tắc wifi rồi.

Sau khi nạp code vào cho Node MCU, chúng ta mở App Blink

  • Chọn Project vừa tạo. Nhân nút Play (Hình tam giác)
  • Nếu Node MCU được config đúng, App sẽ báo Nha Ngu IOT online
  • Nhấn nút hình vuông (Vị trí nút play vừa nãy) để trở về cửa sổ thiết kế. Nhấn nút cộng để vào Widget Box
  • Chọn Button, nút nhấp sẽ trở nên được đưa ra ngoài màn hình. Nhấn vào hình nút nhấp để config

8 Blynk Connect 9 Blynk Connect 10 Blynk Widget 12 Blynk button

Trong phần config Button

  • Thay đổi tên gọi: Cong tac một. MODE là SWITCH
  • Phần OUTPUT, click vào PN chọn mục D4. Chính là con led có sẵn trên Node MCU

11 Blynk button 13 Blynk button

Nhấn OK và nhấp Play để chạy thử như sau:

Điều khiển LED bằng nút nhấp thực tế

Công tắc WIFI thì ngoài việc điều khiển trên app, thì phải điều khiển được bằng tay nữa. Chúng ta sẽ trở nên bắt đầu code phần điều khiển bằng tay nhé.

Chúng ta sẽ trở nên dùng nút nhấp sở hữu sẵn trên Node MCU để điều khiển con LED D4. Trong Pinout Node MCU ta thấy Button đó là D3 (Flash)

NodeMCU ESP8266 Pinout

Đầu tiên, định ngh ĩa D3 là Button, D4 là LED, 1 biến trạng thái LED là Status = một (LED tắt)

Dieu khien thiet bi bang wifi voi Blynk

Trong hàm setup chọn mục pinmode và ghi giá trị lúc đầu cho LED

Dieu khien thiet bi bang wifi voi Blynk (2)

Trong loop() chúng ta kiếm tra nút nhấn Button xem đã được nhấp chưa, Nếu được nhấn thì đảo trạng thái Status và ghi vào LED D4

Dieu khien thiet bi bang wifi voi Blynk 3

Nạp chương trình và test

Vậy là ta đã hoàn toàn có thể điều khiển được thiết bị qua cả App và nút nhấp thực tế, nhưng có 1 lỗi phát sinh đó chính là. Khi ta thay đổi trạng thái LED bằng nút nhấp, trên App sẽ trở nên không biết là ta thay đổi, nên không cập nhật leed App. Điều này làm việc điều khiển trở nên ngu ngu, vì lâu lâu lại phải ấn hai lần trên App tiên tiến chuyển được trạng thái.

Vậy fix lỗi này như thế nào. Ta tới phần sau nhé

Đồng bộ nút nhấp và App trên công tắc WIFI

Một chiếc công tắc thông minh thì phải giao tiếp được giữa người và thiết bị. Khi con người ấn nút trên App thì mạch phải phản hồi và ngược lại, khi con người ấn nút nhấn trên mạch thì App cũng phải cập nhật. Việc giao tiếp qua lại đó gọi là đồng bộ.

Nguyên lý làm cho việc như dưới đây:

App và Node MCU sẽ trở nên giao tiếp với nhau qua 1 cổng Vitual (Một luồng dữ liệu)

Khi cổng Vitual này thay đổi giá trị => Mạch sẽ trở nên update và thay đổi giá trị vào D4 (LED) => Khi mạch ghi giá trị lên cổng Vitual, trên App cũng sẽ thay đổi trạng thái

Đầu tiên, ta phải sửa Button trên App là một cổng Vitual  thay vì D4.

cong ao blynk

Thêm hai biến điều khiển. Thêm các câu lệnh như sau:

đồng bộ nút nhấp blynk 1

Trong đó hóa thân:

  • VIRTUAL_PIN_0 sử dụng để đọc dữ liệu từ cổng V0
  • isPushOnApp: là hóa thân kiểm tra nút nhấn trên App sở hữu được ấn hoặc không
  • HBLYNK_CONNECTED: là hàm thực thi lệnh đồng bộ toàn bộ trạng thái trên App và mạch, khi chúng kết nối với nhau
  • BLYNK_WRITE(V0): Hàm thực thi khi App ghi dữ liệu vào V0. Ghi giá trị V0 vào biến VIRTUAL_PIN_0. Thay đổi giá trị isPushOnApp = true để báo rằng có nút nhấn được nhấn.

Trong loop. Chúng ta thực hiện như sau

đồng bộ nút nhấn blynk

Khi trên App được nhấp, ta ghi giá trị của V0 lên LED

Khi nút nhấp trên Board được nhấp, ta ghi giá trị lên LED và Ghi giá trị lên V0 trả về App.

Nạp chương trình và chạy thử.

Kết luận và Source Code

Một công tắc WIFI giản đơn rất dễ hoàn toàn sở hữu thể chế tạo, thế nhưng để thành 1 sản phẩm hoàn toàn sở hữu thể ứng dụng được trong thực tế, cần nhiều thứ hơn thế nữa.

Ví dụ như, làm sao hoàn toàn sở hữu thể kết nối với wifi bằng điện thoại mà ko cần sửa code. Bạn sở hữu thấy các sản phẩm Công tăc WIFI như Sonoff, Xaomi, Tuya … mọi người phải nạp code ko? không hề nhé.

Làm thế nào để kết nối công tắc Wifi với các của thiết bị Smart khác như trợ lý ảo, google Assistant,….

Làm thế nào để cập nhật Firmware từ xa, như việc Win10 bạn đọc Update.

Tất cả mình sẽ trở nên giải đáp trong những bài kế tiếp. Hãy đón xem nhé

Xem Full Source Công Tắc Wifi với Blynk tại đây:

#define BLYNK_PRINT Serial

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

#define LED D4
#define Button D3

int Status = 1;

int VIRTUAL_PIN_0;
bool isPushOnApp = false;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "iWP_e-4LA9tR6t6JGal00Ryic6SEp_Kl";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Set";
char pass[] = "25251325";
  BLYNK_CONNECTED() 
  {
     Blynk.syncAll();
  }
  BLYNK_WRITE(V0)
  {
     VIRTUAL_PIN_0 = param.asInt();
     isPushOnApp = true;
  }
void setup()
{
  // Debug console
  Serial.begin(9600);

  pinMode(LED, OUTPUT);
  pinMode(Button, INPUT_PULLUP);
  digitalWrite(LED,Status);

  Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 80);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
}

void loop()
{
  Blynk.run();
  if(isPushOnApp == true) // neu Nut nhan tren App duoc nhan
  {
      Serial.println("Nhan Tren APP:" + String(VIRTUAL_PIN_0));
      digitalWrite(LED, VIRTUAL_PIN_0); //ghi trang thai V0 len LED
      isPushOnApp = false; // xoa bien cap nhat
  }
  if(digitalRead(Button) == 0) // neu nut nhan dc nhan
  {
    delay(50);
    if(digitalRead(Button)!=0)
    {
      VIRTUAL_PIN_0 = !VIRTUAL_PIN_0; // dao gia trị 
      Serial.println("Nhan Tren Board:" + String(VIRTUAL_PIN_0));
      digitalWrite(LED,VIRTUAL_PIN_0); // ghi gia tri len LED
      Blynk.virtualWrite(V0, VIRTUAL_PIN_0); // ghi gia tri len App qua V0
    }
  }
  // You can inject your own code or combine it with other sketches.
  // Check other examples on how to communicate with Blynk. Remember
  // to avoid delay() function!
}

 

Free – Download

Đánh giá bài viết