Đ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é.
Mục Lục
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.
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.
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.
Coppy mã đó dán vào ô. Auth Token
Tool-Chọn Board Node MCU
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
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
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)
Đầ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)
Trong hàm setup chọn pinmode và ghi giá trị ban đầu cho LED
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
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.
Thêm 2 biến điều khiển. Thêm các câu lệnh như sau:
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
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! }
best suited
Thank for Reading
ad rep tin nhắn messenger em với ạ
OK, em
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.
code mình test nhiều r mà
H mà e muốn dùng thêm nút nhấn nữa thì phần cứng đấu thế nào ạ..dùng để điều khiển relay ạ
cứ đầu vào 1 chân gpio bất kì thôi em, lúc pinmode chọn input, đầu ra relay thì là output
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 ạ
để kiểu giá trị string là có thể nhận chuỗi, a làm video đó sau nhé. Qua tết
chào bạn, mình muốn chia sẻ ứng dụng này để nhiều người trong gia đình có thể điều khiển 1 công tắc thì làm thế nào?
E cần convert project thành app trong Blynk, sau đó mọi người chỉ cần down app và quét mã QR đó là dc nhé
H e cần dùng tối đa thì đk bao nhiêu nút nhấn ạ
cái này a làm sản phẩm thực tế dc 3 nút đk 3 relay nhé. nhiều hơn phải dùng loại khác