Ở 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).
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.