Tài Liệu Tham Khảo Thư Viện ESP32 WebServer
Tổng Quan
Thư viện DIYables_ESP32_WebServer cung cấp giải pháp toàn diện để tạo web server đa trang với hỗ trợ WebSocket trên các board ESP32.
Phần Cứng Cần Thiết
| 1 | × | mô-đun phát triển ESP-WROOM-32 | ||
| 1 | × | Alternatively, ESP32 Uno-form board | ||
| 1 | × | Alternatively, ESP32 S3 Uno-form board | ||
| 1 | × | USB Cable Type-A to Type-C (for USB-A PC) | ||
| 1 | × | USB Cable Type-C to Type-C (for USB-C PC) | ||
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Breakout Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Power Splitter for ESP32 |
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Ví Dụ
Cài Đặt
Các Bước Nhanh
Thực hiện theo hướng dẫn từng bước sau:
- Nếu đây là lần đầu bạn sử dụng ESP32, hãy tham khảo hướng dẫn về thiết lập môi trường cho ESP32 trong Arduino IDE.
- Kết nối board ESP32 với máy tính bằng cáp USB.
- Khởi động Arduino IDE trên máy tính.
- Chọn board ESP32 phù hợp (ví dụ: ESP32) và cổng COM.
- Mở Library Manager bằng cách nhấn vào biểu tượng Library Manager ở phía bên trái của Arduino IDE.
- Tìm kiếm Web Server for ESP32 và định vị mWebSockets by DIYables.
- Nhấn vào nút Install để thêm thư viện mWebSockets.

Hỗ Trợ WebSocket (Tích Hợp Sẵn)
Tính năng WebSocket hiện đã được tích hợp trực tiếp vào thư viện này!
Việc triển khai WebSocket được dựa trên thư viện mWebSockets xuất sắc của Dawid Kurek, đã được tích hợp và tối ưu hóa đặc biệt cho ESP32 để dễ sử dụng:
- Không cần cài đặt thư viện bổ sung - Hỗ trợ WebSocket được tích hợp sẵn
- Tối ưu cho ESP32 - Triển khai đơn giản hóa dành riêng cho nền tảng
- Tương thích WiFi - Sử dụng ngăn xếp WiFi gốc của ESP32
- Tuân thủ RFC 6455 - Hỗ trợ đầy đủ giao thức WebSocket
- Giao tiếp thời gian thực - Trao đổi dữ liệu hai chiều
Cách Sử Dụng:
- Cho mọi thứ (Web Server + WebSocket): Sử dụng #include <DIYables_ESP32_WebServer.h>
- Chỉ vậy thôi! - Tính năng WebSocket tự động có sẵn khi cần
- Tiết kiệm bộ nhớ - Code WebSocket không sử dụng được tự động tối ưu hóa bởi compiler
Ghi Nhận Công Trạng: Triển khai WebSocket được chuyển thể từ thư viện mWebSockets (Giấy phép LGPL-2.1) của Dawid Kurek, được sửa đổi và tích hợp để tương thích liền mạch với ESP32.
Các Class Của Thư Viện
Class DIYables_ESP32_WebServer
Class chính để tạo và quản lý web server.
Constructor
Tạo một phiên bản web server trên cổng được chỉ định (mặc định: 80).
Các Phương Thức
begin()
Khởi động web server và bắt đầu lắng nghe các kết nối đến.
Các phiên bản nạp chồng:
- begin(): Chỉ khởi động server (WiFi phải được kết nối riêng bởi ứng dụng của bạn)
- begin(ssid, password): Kết nối WiFi và khởi động server trong một lệnh gọi (cách tiếp cận cũ)
setNotFoundHandler()
Đặt một handler tùy chỉnh cho phản hồi 404 Not Found.
printWifiStatus()
In trạng thái kết nối WiFi và địa chỉ IP ra Serial Monitor.
handleClient()
Xử lý các yêu cầu client đến. Điều này nên được gọi liên tục trong vòng lặp chính.
on()
Đăng ký một hàm handler cho URI và phương thức HTTP cụ thể.
Tham số:
- uri: Đường dẫn URI (ví dụ: "/", "/led", "/api/data")
- method: Phương thức HTTP (GET, POST, PUT, DELETE, v.v.)
- fn: Hàm handler để thực thi khi route được truy cập
Lưu ý: Thư viện này sử dụng phương thức addRoute() thay vì on(). Xem bên dưới để biết cách sử dụng đúng.
addRoute()
Đăng ký một hàm handler cho URI cụ thể. Đây là phương thức thực tế được sử dụng trong thư viện.
Định Dạng Hàm RouteHandler:
Các handler route phải tuân theo chữ ký chính xác này:
Tham số:
- client: Tham chiếu WiFiClient để gửi phản hồi
- method: Phương thức HTTP dưới dạng chuỗi ("GET", "POST", v.v.)
- request: URI yêu cầu đầy đủ
- params: Tham số query (đối tượng QueryParams)
- jsonData: JSON payload cho yêu cầu POST (rỗng cho GET)
Ví Dụ Triển Khai Handler:
- Handler GET Cơ Bản:
- Handler JSON API (GET và POST):
- Handler Query Parameters:
sendResponse()
Gửi phản hồi HTTP đến client.
Tham số:
- client: Tham chiếu WiFiClient (được cung cấp trong hàm handler)
- content: Nội dung phần thân phản hồi
- contentType: Loại MIME của phản hồi (mặc định: "text/html")
Ví Dụ Sử Dụng:
Các Phương Thức Authentication
enableAuthentication()
Kích hoạt HTTP Basic Authentication cho tất cả các route. Khi được kích hoạt, tất cả routes đều yêu cầu authentication.
Tham số:
- username: Tên người dùng để authentication (tối đa 31 ký tự)
- password: Mật khẩu để authentication (tối đa 31 ký tự)
- realm: Realm authentication hiển thị trong trình duyệt (tối đa 63 ký tự, tùy chọn)
Ví Dụ Sử Dụng:
disableAuthentication()
Vô hiệu hóa authentication, làm cho tất cả routes có thể truy cập công khai trở lại.
Ví Dụ Sử Dụng:
isAuthenticationEnabled()
Trả về true nếu authentication hiện đang được kích hoạt, ngược lại là false.
Ví Dụ Sử Dụng:
send401()
Gửi phản hồi 401 Unauthorized với header WWW-Authenticate phù hợp. Điều này được tự động gọi khi authentication thất bại, nhưng có thể được sử dụng thủ công trong các handler tùy chỉnh.
Ví Dụ Sử Dụng:
Gửi Phản Hồi Thủ Công
Để kiểm soát nhiều hơn về HTTP headers và mã trạng thái:
Truy Cập Query Parameters
Cấu Trúc QueryParams
Đối tượng QueryParams chứa các tham số query được phân tích từ URL:
Truy Cập Query Parameters
Các Hàm Hỗ Trợ Parameter
Tạo các hàm hỗ trợ để truy cập parameter dễ dàng hơn:
Các Class WebSocket (Tích Hợp Sẵn)
WebSocketServer
Alias cho net::WebSocketServer - được đơn giản hóa cho người mới bắt đầu.
WebSocket
Alias cho net::WebSocket - đại diện cho một kết nối WebSocket.
Các Phương Thức WebSocket
begin()
Khởi động WebSocket server.
loop()
Xử lý các sự kiện WebSocket. Gọi điều này trong vòng lặp chính của bạn.
onConnection()
Đặt callback cho các kết nối WebSocket mới.
onMessage()
Đặt callback cho các tin nhắn WebSocket đến.
onClose()
Đặt callback cho việc đóng kết nối WebSocket.
send()
Gửi tin nhắn qua WebSocket.
close()
Đóng kết nối WebSocket.
Các Phương Thức WebSocket Bổ Sung
broadcastTXT()
Phát tin nhắn văn bản đến tất cả client WebSocket đã kết nối.
broadcastBIN()
Phát dữ liệu nhị phân đến tất cả client WebSocket đã kết nối.
connectedClients()
Trả về số lượng client WebSocket hiện đang kết nối.
isListening()
Trả về true nếu WebSocket server đang actively lắng nghe các kết nối.
Các Loại Sự Kiện WebSocket
DataType Enum
- WebSocket::DataType::TEXT - Loại tin nhắn văn bản
- WebSocket::DataType::BINARY - Loại dữ liệu nhị phân
CloseCode Enum
Các mã đóng WebSocket chuẩn cho lý do kết thúc kết nối.
Sử Dụng WebSocket Nâng Cao
Thiết Lập Event Handler
Xử Lý Tin Nhắn
Phát Dữ Liệu Cảm Biến
Các Phương Thức HTTP
Thư viện hỗ trợ các phương thức HTTP chuẩn:
- HTTP_GET
- HTTP_POST
- HTTP_PUT
- HTTP_DELETE
- HTTP_PATCH
- HTTP_HEAD
- HTTP_OPTIONS
Tích Hợp JavaScript Phía Client
Kết Nối WebSocket Cơ Bản
Gửi Lệnh
Xử Lý Tin Nhắn
Ví Dụ WebSocket
Echo Server Đơn Giản
Xử Lý Lệnh JSON
Triển Khai Heartbeat
Khắc Phục Sự Cố WebSocket
Các Vấn Đề Thường Gặp
Kết Nối WebSocket Thất Bại
- Xác minh cổng WebSocket server (mặc định: 81) có thể truy cập được
- Đảm bảo địa chỉ IP ESP32 đúng và có thể tiếp cận
- Sử dụng công cụ phát triển trình duyệt để kiểm tra lỗi kết nối WebSocket
Không Nh