Điều khiển đèn led qua Web

Ở bài trước chúng ta đã biết cách thiết lập một server đơn giản cho Node Wifi và làm quen với phương thức GET. Bài này chúng ta sẽ học cách điều khiển đèn led thông Web dùng phương thức POST.

Chúng ta sẽ xây dựng một ứng dụng đơn giản có một nút điều khiển tên là Toggle LED có nhiệm vụ thay đổi trạng thái của đèn LED ở chân GPIO15 (có sẵn trên Node Wifi).

Thiết bị cần chuẩn bị

  • 1 x Node WiFi

 

Chương Trình

Tương tự như bài viết ESP8266 làm Web server nhưng có những thay đổi sau đây:

Khi người dùng truy vấn trang chủ (URL = “/”) thì hàm handleRoot sẽ trả về một HTML form để trình duyệt hiển thị giao diện có nút điều khiển Toggle LED. Khi nhấn vào nút Toggle LED, trình duyệt sẽ gởi truy vấn POST đến URI = “/led“.

void handleRoot() {
  server.send(200, "text/html", "<form action=\"/led\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}

Khi nhận được truy vấn POST cho URI = “/led”, server sẽ gọi hàm handleLED trong phần setup().

server.on("/led", HTTP_POST, handleLED);         // Gọi hàm handleLED khi nhận được truy vấn POST cho URI = "/led"

Hàm handleLED có nhiệm vụ thay đổi trạng thái đèn LED và yêu cầu trình duyệt quay lại trang chủ.

void handleLED() {
  digitalWrite(led,!digitalRead(led));  // Thay đổi trạng thái của LED
  server.sendHeader("Location","/");    // Yêu cầu trình duyệt chuyển hướng đến trang chủ
  server.send(303);                     // Status code dành cho việc chuyển hướng trang web
}

Bạn dùng Arduino IDE để nạp chương trình sau:

#include <ESP8266WiFi.h>                // Thư viện dùng để kết nối WiFi của ESP8266
#include "ESP8266WebServer.h"

const char* ssid = "Blocky AP";         // Tên của mạng WiFi mà bạn muốn kết nối đến
const char* password = "password_ap";   // Mật khẩu của mạng WiFi

const int led = 15;

ESP8266WebServer server(80);

void setup() {
  Serial.begin(115200);

  pinMode(led, OUTPUT);
  
  WiFi.begin(ssid, password);           // Kết nối vào mạng WiFi
  Serial.print("Connecting to ");
  Serial.print(ssid);
  // Chờ kết nối WiFi được thiết lập
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }

  Serial.println("\n");
  Serial.println("Connection established!");  
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());       // Gởi địa chỉ IP đến máy tinh

  server.on("/", handleRoot);           // Gọi hàm handleRoot khi nhận được truy vấn GET cho URI = "/"
  server.on("/led", HTTP_POST, handleLED);         // Gọi hàm handleLED khi nhận được truy vấn POST cho URI = "/led"
  server.begin();                       // Khởi tại web server
  Serial.println("Server listening");

}

void loop() {
  server.handleClient();                // Lắng nghe các truy vấn từ người dùng
}

void handleRoot() {
  server.send(200, "text/html", "<form action=\"/led\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}

void handleLED() {
  digitalWrite(led,!digitalRead(led));  // Thay đổi trạng thái của đèn LED
  server.sendHeader("Location","/");    // Yêu cầu trình duyệt chuyển hướng đến trang chủ
  server.send(303);                     // Status code dành cho việc chuyển hướng trang web
}

Sau khi nạp code thành công, bạn mở Serial Monitor để biết được địa chỉ IP của server. Sau đó dùng trình duyệt thử truy cập đến các đường dẫn http://serverIP và điều khiển đèn LED.

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 *

Fill out this field
Fill out this field
Vui lòng nhập địa chỉ email hợp lệ.
You need to agree with the terms to proceed

1 Bình luận.

  • Đây là khóa học IoT với Arduino phần nâng cao, giúp các bạn làm quen với các khái niệm về phần truyền và nhận dữ liệu lên Internet thông qua kết nối WiFi và nhiều phương thức (protocol) khác nhau.

Menu