[Nhà Ngu] Hướng dẫn tự làm Công tắc WIFI với Blynk

hướng dẫn tự làm công tắc wifi với blynk

Điều khiển thiết bị bằng WIFI hay Công tắc WIFI là một ứ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à Ngu”. Nếu bạn chưa biết Nhà Ngu là gì thì hãy đọc bài viết: Tự làm Smart Home mang tên Nhà Ngu

Trước tiên hãy cứ bắt đầu từ việc đơn giản nhất, đó là bật tắt thiết bị như thế nào đã.

Ok, bắt đầu nhé.

Tạo code với Blynk examples

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

Blynk hỗ trợ chúng ta rất nhiều trong việc viết code, các bạn truy cập vào link: Examples.blynk.cc

Trong đó là các bài Code, cho từng loại Board và ứng dụng khác 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 nhấn vào Coppy Example sau đó mở Arduino lên và paste vào.

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

Sửa code blynk

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

Đăng nhập vào Blynk, nhấn New Project -> Đặt tên dự án, dòng chip Node MCU, kiểu kết nối là WIFI-> Nhấn Create, Blynk sẽ 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 Port và nạp như Arduino bình thường.

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

Blynk hỗ trợ làm công tắc Wifi bằng các Widget, trong bài này chúng ta sử dụng Button Widget. Mỗi một widget sẽ phải mua bằng Enegy, nếu hết Enegy bạn phải bỏ tiền ra mua. Nhưng đừng lo Blynk hỗ trợ cho mỗi Account 1000 enegy, như vậy cũng thoải mái để 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ấn sẽ được đưa ra ngoài màn hình. Nhấn vào hình nút nhấn để config

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

Trong phần config Button

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

11 Blynk button 13 Blynk button

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

Điều khiển LED bằng nút nhấn 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ẽ bắt đầu code phần điều khiển bằng tay nhé.

Chúng ta sẽ sử dụng nút nhấn có 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, một biến trạng thái LED là Status = 1 (LED tắt)

Dieu khien thiet bi bang wifi voi Blynk

Trong hàm setup chọn pinmode và ghi giá trị ban đầ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ấn 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 đã có thể điều khiển được thiết bị qua cả App và nút nhấn thực tế, nhưng có một lỗi phát sinh đó là. Khi ta thay đổi trạng thái LED bằng nút nhấn, trên App sẽ không biết là chúng 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 2 lần trên App mới chuyển được trạng thái.

Vậy sửa lỗi này như thế nào. Ta đến phần sau nhé

Đồng bộ nút nhấn 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 nhấn nút trên App thì mạch phải phản hồi và ngược lại, khi con người nhấ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 việc như sau:

App và Node MCU sẽ giao tiếp với nhau thông 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ẽ cập nhật 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à 1 cổng Vitual  thay vì D4.

cong ao blynk

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

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

Trong đó biến:

  • VIRTUAL_PIN_0 dùng để đọc dữ liệu từ cổng V0
  • isPushOnApp: là biến kiểm tra nút nhấn trên App có được ấn hay không
  • HBLYNK_CONNECTED: là hàm thực thi lệnh đồng bộ tất cả 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ấn, ta ghi giá trị của V0 lên LED

Khi nút nhấn trên Board được nhấn, 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 đơn giản rất dễ có thể chế tạo, thế nhưng để trở thành một sản phẩm có thể ứng dụng được trong thực tế, cần nhiều thứ hơn nữa.

Ví dụ như, làm sao có thể kết nối wifi bằng điện thoại mà ko cần phải sửa code. Bạn có thấy các sản phẩm Công tăc WIFI như Sonoff, Xaomi, Tuya … người ta 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 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 Update.

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

Xem Full Source Công Tắc Wifi với Blynk ở đâ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!
}

 

 

28 thoughts on “[Nhà Ngu] Hướng dẫn tự làm Công tắc WIFI với Blynk

      • Nguyễn Mạnh Việt says:

        Bác ơi cho em hỏi chạy code như trên nếu đã kết nối wifi được một lần thì không sao.Nhưng nếu từ lúc bật nguồn chưa kết nối đến sever blynk lần nào thì không điều khiển bằng nút bấm được.Phải sửa chỗ nào để khắc phục thế bác,chả may mất điện là khi có điện lại mà không có wifi là không điều khiển được tại chỗ luôn.

  1. Nguyễn Khánh Toàn says:

    Mình dùng code của bạn chocon ESP-01 đổi D4 thành 2 và D3 thành 0 nó chạy OK.
    Không bị tự reset như cách của mình đang làm với Firebase.

  2. Quang Minh says:

    A ơi. em muốn thêm terminal trên blynk ” để xem lại history time thực hiện on /off trên app”
    mà em không biết khai báo code như nào ạ mong a giúp đỡ em ạ

  3. Nam Phong says:

    em muốn đi sau về phần nút ấn cảm biến này để làm đồ án. anh có thể chia sẻ list hướng dẫn qua email của em được không ạ. em cảm ơn

  4. Đỗ Mạnh says:

    Bài viết hay quá. Bạn cho mình hỏi thêm, giờ mình muốn điều khiển con led đó bằng server của mình (không qua blynk app mà server gửi 1 request hay gì đó) thì có cách nào ko vậy?

  5. Trang says:

    Ad cho hỏi. Esp8266, nạp code có hẹn giờ và bật tắt bằng Blynk nhưng hay bị reset và Tự mở khi mất điện xong có điện lại. Ad có thể giúp không ạ

  6. sơn says:

    a ơi e sử dụng cách này cho arduino và ethernet shield w5100 mà dùng 1 nút thì bật tắt được relay còn dùng nhiều nút nhấn và nhiều relay thì không bật tắt được , a có thể giúp e được k ạ, hoặc a cho e xin số điện thoại zalo e kết bạn ạ

  7. Lê Quốc says:

    Hi anh! ^^
    Mới đọc được bài viết này của anh và đã thử thành công. Hy vọng anh sẽ ra phần tiếp theo của phần này “Làm sao có thể kết nối wifi bằng điện thoại mà ko cần phải sửa code”
    Cảm ơn anh ^^

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *