Tham khảo API cho Thư viện WebApps ESP32 DIYables Tài liệu đầy đủ
Tổng quan
Thư viện ESP32 WebApps của DIYables cung cấp một giải pháp toàn diện mô-đun để tạo các ứng dụng web dựa trên WebSocket trên ESP32. Nó bao gồm nhiều ứng dụng web được xây sẵn và một khung linh hoạt để tạo các ứng dụng tùy chỉnh.
Thư viện sử dụng kiến trúc mô-đun, cho phép bạn chỉ bao gồm các ứng dụng web bạn cần, giúp tiết kiệm bộ nhớ và cải thiện hiệu suất.
Tính năng
- Kiến trúc mô-đun: Chỉ thêm các ứng dụng web bạn cần để tối ưu hóa việc sử dụng bộ nhớ
- Tiết kiệm bộ nhớ: Mỗi ứng dụng web có thể được bật/tắt độc lập
- 11+ Ứng dụng web sẵn sàng sử dụng: Điều khiển ESP32 hoàn chỉnh mà không cần kiến thức lập trình web
- Khung ứng dụng web tùy chỉnh: Tạo ứng dụng của riêng bạn bằng hệ thống lớp cơ sở
- Giao tiếp thời gian thực: Dựa trên WebSocket để cập nhật tức thì
- Thiết kế đáp ứng: Hoạt động trên máy tính để bàn, máy tính bảng và thiết bị di động
- Tích hợp dễ dàng: API dựa trên callback đơn giản
- Hỗ trợ nhiều ứng dụng: Hỗ trợ thêm nhiều ứng dụng web đồng thời
Các lớp cốt lõi
Máy chủ Ứng dụng Web DIYables
Lớp máy chủ chính quản lý các ứng dụng web, các yêu cầu HTTP và giao tiếp WebSocket.
Phương thức khởi tạo
Tạo một phiên bản máy chủ ứng dụng web.
- httpPort: cổng máy chủ HTTP (mặc định: 80)
- websocketPort: cổng máy chủ WebSocket (mặc định: 81)
Phương pháp
Cài đặt và kết nối
Khởi tạo kết nối mạng (cho Ethernet hoặc các kết nối được cấu hình sẵn) và khởi động máy chủ web.
- Trả về: true nếu thành công, false nếu thất bại
- Trường hợp sử dụng: Để hỗ trợ Ethernet trong tương lai hoặc khi thông tin xác thực WiFi đã được cấu hình trước
Khởi tạo kết nối WiFi và khởi động máy chủ web.
- ssid: tên mạng WiFi
- password: mật khẩu WiFi
- Returns: true nếu thành công, false nếu thất bại
- Use case: Kết nối WiFi tiêu chuẩn với thông tin xác thực
Xử lý các yêu cầu HTTP và giao tiếp WebSocket. Phải được gọi trong vòng lặp chính.
Trả về true nếu WiFi được kết nối.
Trả về địa chỉ IP của Arduino dưới dạng chuỗi.
Quản lý ứng dụng
Thêm một ứng dụng web vào máy chủ.
- ứng dụng: Con trỏ tới một thể hiện của ứng dụng web
Xóa một ứng dụng web theo đường dẫn URL của nó.
- đường dẫn: đường dẫn URL của ứng dụng (ví dụ, "/chat")
Lấy một ứng dụng web theo đường dẫn URL của nó.
- path: Đường dẫn URL của ứng dụng
- Trả về: Con trỏ tới ứng dụng hoặc nullptr nếu không tìm thấy
Thiết lập trang 404 Không tìm thấy (tùy chọn).
- trang: phiên bản trang 404
Truy cập ứng dụng chuyên dụng
Lấy thể hiện trang các chân số kỹ thuật số nếu đã được thêm.
- Trả về: Con trỏ tới trang các chân kỹ thuật số hoặc nullptr
Lấy thể hiện trang slider nếu được thêm.
Trả về: Con trỏ tới trang trượt hoặc nullptr
Lấy thể hiện của trang joystick khi được thêm.
- Trả về: Con trỏ tới trang joystick hoặc nullptr
Các Lớp Cơ Sở
DIYablesWebAppPageBase
Lớp cơ sở trừu tượng mà mọi ứng dụng web kế thừa từ nó. Cung cấp chức năng chung cho xử lý HTTP, giao tiếp WebSocket và quản lý trang.
Hàm tạo
Tạo một đối tượng trang cơ sở với đường dẫn URL được chỉ định.
- pagePath: đường dẫn URL cho trang (ví dụ, "/web-joystick")
Phương thức ảo (Phải được triển khai bởi các lớp dẫn xuất)
Xử lý các yêu cầu HTTP cho trang này. Phương thức ảo thuần túy.
- máy khách: Giao diện máy khách web để gửi phản hồi
Xử lý các tin nhắn WebSocket cho trang này. Phương thức ảo thuần túy.
- ws: giao diện kết nối WebSocket
- message: nội dung tin nhắn nhận được
- length: độ dài tin nhắn
Trả về chuỗi nhận diện trang được sử dụng trong hiển thị thông tin kết nối. Hàm ảo thuần.
- Trả về: Chuỗi thông tin trang (ví dụ: "🕹️ Web Joystick: ")
Trả về HTML cho nút điều hướng trang chủ. Phương thức ảo thuần túy.
- Trả về: chuỗi HTML cho thẻ điều hướng
Các phương thức ảo (Ghi đè tùy chọn)
Được gọi khi một kết nối WebSocket mới được thiết lập.
- ws: Kết nối WebSocket mới
Được gọi khi kết nối WebSocket bị đóng.
ws: Kết nối WebSocket đã đóng
Các phương pháp phổ biến
Lấy đường dẫn URL cho trang này.
- Trả về: Chuỗi đường dẫn trang
Kiểm tra xem trang có đang được kích hoạt hay không.
- Trả về: true nếu được bật, false nếu được tắt
Kích hoạt hoặc vô hiệu hóa trang.
- kích hoạt: true để kích hoạt, false để vô hiệu hóa
Các phương thức tiện ích
Gửi các tiêu đề HTTP chuẩn cho máy khách.
- client: Giao diện khách hàng Web
- contentType: Kiểu MIME (mặc định: "text/html")
Gửi một tin nhắn đến một máy khách WebSocket cụ thể.
- ws: Kết nối WebSocket đích
- message: Tin nhắn cần gửi
Phát một tin nhắn tới tất cả các máy khách WebSocket đã kết nối.
- Thông điệp: Thông điệp để phát sóng
Gửi nội dung HTML lớn bằng cách sử dụng mã truyền tải chunked.
- máy khách: Giao diện máy khách web
- html: Nội dung HTML cần gửi
Ví dụ về cách sử dụng
Các Lớp Ứng dụng Web
Trang chủ DIYables
Trung tâm điều hướng cung cấp liên kết đến tất cả các ứng dụng được kích hoạt.
Hàm khởi tạo
Đường dẫn URL
- Đường dẫn: / (thư mục gốc)
Trang trò chuyện trên web DIYables
Giao diện trò chuyện tương tác cho giao tiếp hai chiều với Arduino.
Hàm khởi tạo
Đường dẫn URL
- Đường dẫn: /webchat
Các phương pháp
Thiết lập callback cho các tin nhắn chat đến.
Gửi một tin nhắn đến giao diện trò chuyện trên web.
Trang Giám Sát Web DIYables
Trình theo dõi nối tiếp dựa trên web cho đầu ra thời gian thực và nhập lệnh.
Hàm khởi tạo
Đường dẫn URL
- Đường dẫn: /webmonitor
Các phương pháp
Thiết lập hàm gọi lại cho các thông điệp giám sát đến.
Gửi một tin nhắn tới giao diện giám sát trên web.
DIYablesWeb Trang Chân Số Kỹ Thuật Số
Điều khiển và giám sát các chân số 0–13 thông qua giao diện web.
Hàm khởi tạo
Đường dẫn URL
- Đường dẫn: /webdigitalpins
Phương pháp
Kích hoạt mã PIN cho điều khiển qua web.
- pin: Số chân (0-13)
- mode: WEB_PIN_OUTPUT hoặc WEB_PIN_INPUT
Thiết lập hàm gọi lại cho các thao tác ghi vào các chân đầu ra.
Thiết lập hàm gọi lại cho các thao tác đọc pin (pin đầu vào).
Thiết lập hàm gọi lại cho sự thay đổi chế độ của các chân.
Cập nhật trạng thái ghim theo thời gian thực cho trình duyệt web.
DIYablesWebSliderPage
Bộ điều khiển trượt đôi cho các ứng dụng analog/PWM.
Hàm khởi tạo
Đường dẫn URL
- Đường dẫn: /webslider
Các phương pháp
Thiết lập hàm gọi lại cho các thay đổi giá trị của thanh trượt từ web.
- Thông số: thanh trượt 1 (0-255), thanh trượt 2 (0-255)
Thiết lập hàm gọi lại cho máy khách web đang yêu cầu các giá trị hiện tại.
Gửi các giá trị thanh trượt tới giao diện web.
Trang Joystick Web của DIYables
Điều khiển joystick 2D cho robotics và các ứng dụng định vị.
Hàm khởi tạo
- autoReturn: Joystick có quay về vị trí trung tâm tự động hay không
- sensitivity: Phần trăm di chuyển tối thiểu để kích hoạt cập nhật
Đường dẫn URL
- Đường dẫn: /webjoystick
Phương pháp
Thiết lập hàm gọi lại cho sự di chuyển của joystick từ web.
- Tham số: x (-100 đến 100), y (-100 đến 100)
Thiết lập hàm gọi lại cho máy khách web đang yêu cầu vị trí hiện tại.
Gửi vị trí của joystick đến giao diện web.
Thiết lập hành vi tự động trả về.
Thiết lập độ nhạy di chuyển (phần trăm).
Trang Plotter Web DIYables
Trực quan hóa dữ liệu thời gian thực với hỗ trợ nhiều chuỗi dữ liệu.
Hàm khởi tạo
Đường dẫn URL
- Đường dẫn: /webplotter
Phương pháp
Đặt tiêu đề cho đồ thị.
Đặt nhãn cho trục.
Bật hoặc tắt tự động căn chỉnh thang đo của trục Y.
Thiết lập số lượng điểm dữ liệu tối đa để hiển thị.
Thêm một điểm dữ liệu vào một dãy dữ liệu.
Xóa tất cả dữ liệu khỏi đồ thị.
DIYablesNotFoundPage
Trang lỗi 404 tùy chọn để cải thiện trải nghiệm người dùng.
Hàm khởi tạo
Ví dụ về cách sử dụng cơ bản
Tổng quan về các ứng dụng web
Trang chủ
- Địa chỉ URL: http://[esp32-ip]/
- Mục đích: Trung tâm điều hướng chính
- Tính năng: Liên kết tới tất cả các ứng dụng được kích hoạt, trạng thái kết nối
Ứng dụng WebChat
- URL: http://[esp32-ip]/webchat
- Mục đích: Giao diện giao tiếp hai chiều
- Tính năng: Nhắn tin thời gian thực, lịch sử tin nhắn, trạng thái WebSocket
Giám sát Web
- URL: http://[esp32-ip]/webmonitor
- Mục đích: Thay thế trình theo dõi nối tiếp
- Tính năng: Đầu ra nối tiếp theo thời gian thực, nhập lệnh, giao diện tối
Điều khiển các chân kỹ thuật số trên Web
- Địa chỉ URL: http://[esp32-ip]/webdigitalpins
- Mục đích: Điều khiển các chân GPIO từ 0-13
- Tính năng: Điều khiển từng chân riêng lẻ, thao tác hàng loạt, trạng thái thời gian thực
Điều khiển thanh trượt Web
- URL: http://[esp32-ip]/webslider
- Mục đích: Điều khiển analog/PWM hai kênh độc lập
- Tính năng: Hai thanh trượt độc lập (0-255), giá trị thiết lập trước, phản hồi thời gian thực
Điều khiển Joystick Web
- Địa chỉ URL: http://[esp32-ip]/webjoystick
- Mục đích: Điều khiển vị trí 2D cho robot và phương tiện
- Tính năng: Điều khiển bằng cảm ứng/chuột, hiển thị tọa độ, điều chỉnh độ nhạy
Máy vẽ đồ thị trên web
- URL: http://[esp32-ip]/webplotter
- Mục đích: Trực quan hóa dữ liệu thời gian thực
- Tính năng: Nhiều chuỗi dữ liệu, tự động điều chỉnh quy mô, tiêu đề và trục có thể cấu hình
Giao tiếp WebSocket
Tất cả các ứng dụng sử dụng WebSocket trên cổng 81 để truyền thông thời gian thực:
- URL WebSocket: ws://[esp32-ip]:81
- Kết nối: Tự động kết nối lại khi mất kết nối
- Giao thức: Định dạng tin nhắn dựa trên văn bản
Định dạng tin nhắn
Tin nhắn WebChat
- Từ Web: Tin nhắn văn bản trực tiếp
- Đến Web: Tin nhắn văn bản trực tiếp
Các thông điệp Giám sát Web
- Từ Web: Tin nhắn văn bản trực tiếp
- Đến Web: Tin nhắn văn bản trực tiếp
Tin nhắn PIN kỹ thuật số trên Web
- Từ Web: Định dạng JSON: {"pin": 13, "state": 1}
- Đến Web: Định dạng JSON: {"pin": 13, "state": 1}
Các thông điệp của Web Slider
- Từ Web: Định dạng JSON: {"slider1": 128, "slider2": 255}
- Đến Web: Định dạng JSON: {"slider1": 128, "slider2": 255}
Tin nhắn Joystick trên Web
- Từ Web: Định dạng JSON: {"x": 50, "y": -25}
- Đến Web: Định dạng JSON: {"x": 50, "y": -25}
Thông báo của Web Plotter
- Từ Web: Không áp dụng (chỉ hiển thị)
- Đến Web: Định dạng JSON: {"series": "temp", "x": 10.5, "y": 23.4}
Xử lý lỗi
Thư viện bao gồm xử lý lỗi tự động cho:
- Lỗi kết nối Wi‑Fi
- Ngắt kết nối WebSocket
- Các định dạng tin nhắn không hợp lệ
- Giới hạn kết nối của máy khách
Sử dụng bộ nhớ
Lợi ích của Kiến trúc mô-đun: Chỉ bao gồm các ứng dụng web bạn cần để tối ưu hóa việc sử dụng bộ nhớ.
Dung lượng bộ nhớ ước tính cho mỗi thành phần:
- DIYablesWebAppServer: ~8KB bộ nhớ Flash, ~2KB RAM
- DIYablesHomePage: ~3KB bộ nhớ Flash, ~1KB RAM
- DIYablesWebChatPage: ~6KB bộ nhớ Flash, ~1.5KB RAM
- DIYablesWebMonitorPage: ~5KB bộ nhớ Flash, ~1.5KB RAM
- DIYablesWebDigitalPinsPage: ~8KB bộ nhớ Flash, ~2KB RAM
- DIYablesWebSliderPage: ~6KB bộ nhớ Flash, ~1.5KB RAM
- DIYablesWebJoystickPage: ~7KB bộ nhớ Flash, ~1.5KB RAM
- DIYablesWebPlotterPage: ~10KB bộ nhớ Flash, ~2KB RAM
- Bộ đệm WebSocket: ~1KB RAM cho mỗi kết nối
Tổng khi bật tất cả các ứng dụng: ~53KB Flash, ~12KB RAM
Cài đặt tối thiểu (máy chủ + hệ thống gia đình + 1 ứng dụng): ~17KB bộ nhớ Flash, ~4.5KB RAM
Khả năng tương thích trình duyệt
Các trình duyệt được hỗ trợ:
- Chrome 50+
- Firefox 45+
- Safari 10+
- Edge 79+
- Trình duyệt di động (iOS Safari, Chrome Mobile)
Ghi chú bảo mật
- Chưa triển khai xác thực (chỉ phù hợp cho mạng nội bộ)
- Chỉ sử dụng trên các mạng được tin cậy
- Xem xét bổ sung xác thực cho các triển khai công khai
Khắc phục sự cố
Các vấn đề phổ biến
- Không thể kết nối WiFi
- Kiểm tra SSID và mật khẩu
- Kiểm tra xem mạng có tần số 2.4GHz (không phải 5GHz)
- Kiểm tra cường độ tín hiệu
- Kết nối WebSocket thất bại
- Xác minh địa chỉ IP có đúng không
- Kiểm tra thiết lập tường lửa
- Thử trình duyệt khác
- Sử dụng bộ nhớ cao
- Vô hiệu hóa các ứng dụng không sử dụng
- Giới hạn số kết nối đồng thời
- Khởi động lại ESP32 nếu xảy ra phân mảnh bộ nhớ
- Phản hồi chậm
- Kiểm tra cường độ tín hiệu WiFi
- Giảm tần suất tin nhắn WebSocket
- Sử dụng các hàm gọi lại ngắn hơn
Các dự án ví dụ
Các ứng dụng ví dụ
Thư viện ESP32 WebApps của DIYables bao gồm các ví dụ toàn diện được thiết kế cho ESP32 trên nền tảng giáo dục ESP32:
Các ví dụ có sẵn
- Ví dụ Chat: Giao diện giao tiếp hai chiều
- Ví dụ WebMonitor: Thay thế màn hình Serial bằng các tính năng được cải tiến
- Ví dụ WebDigitalPins: Điều khiển tất cả các chân kỹ thuật số với phản hồi trực quan
- Ví dụ WebSlider: Điều khiển song song analog/PWM với các preset
- Ví dụ WebJoystick: Điều khiển vị trí 2D cho các dự án robot
- Ví dụ MultipleWebApps: Tất cả các ứng dụng đang chạy đồng thời
Xem thư mục examples/ để có các dự án hoàn chỉnh và thư mục docs/ để có hướng dẫn cài đặt chi tiết.
Giao diện trừu tượng nền tảng
Thư viện DIYables ESP32 WebApps sử dụng một lớp trừu tượng hóa nền tảng với các giao diện cho phép hỗ trợ nhiều nền tảng phần cứng. Các giao diện này tách chức năng cốt lõi của WebApp khỏi các triển khai dành cho nền tảng cụ thể.
Các giao diện cốt lõi
IWebClient
Giao diện cho các kết nối máy khách HTTP.
IWebSocket
Giao diện cho kết nối WebSocket với khả năng giao tiếp hai chiều.
IWebServer
Giao diện cho chức năng của máy chủ HTTP.
Giao diện IWebSocketServer
Giao diện cho máy chủ WebSocket với quản lý kết nối.
Nhà cung cấp mạng
Giao diện quản lý kết nối mạng.
IServerFactory
Giao diện nhà máy để tạo các triển khai dành cho nền tảng cụ thể.
Ví dụ triển khai nền tảng
Đối với ESP32, các giao diện được triển khai bằng thư viện DIYables_ESP32_WebServer:
Thêm hỗ trợ cho nền tảng mới
Để thêm hỗ trợ cho một nền tảng mới (ví dụ: ESP32):
- Triển khai toàn bộ các giao diện cho nền tảng mục tiêu
- Tạo một ServerFactory để khởi tạo các triển khai của bạn
- Xử lý mạng đặc thù nền tảng và các giao thức WebSocket
- Kiểm tra với các lớp WebApp hiện có (không cần thay đổi)
Ví dụ cách sử dụng với các nền tảng khác:
Lợi ích của thiết kế dựa trên giao diện
- Tính độc lập với nền tảng: Logic lõi của WebApp hoạt động trên mọi nền tảng.
- Khả năng mở rộng: Dễ thêm hỗ trợ phần cứng mới.
- Khả năng bảo trì: Mã nguồn theo nền tảng được cô lập.
- Khả năng kiểm thử: Các giao diện có thể được giả lập cho kiểm thử đơn vị.
- Tính nhất quán: API giống nhau trên mọi nền tảng được hỗ trợ.
Hỗ trợ nền tảng hiện tại
- ✅ ESP32: Đã triển khai đầy đủ và được kiểm tra
- 🔄 ESP32: Có sẵn dưới dạng phần mở rộng riêng - DIYables_WebApps_ESP32
- 🚀 Nền tảng tương lai: Có thể được thêm bằng cùng mẫu giao diện