Tài Liệu Tham Khảo API Thư Viện DIYables WebApps Hướng Dẫn Đầy Đủ
Tổng Quan
Thư viện DIYables WebApps cung cấp một giải pháp modular toàn diện để tạo các ứng dụng web dựa trên WebSocket trên Arduino Uno R4 WiFi và DIYables STEM V4 IoT. Nó bao gồm nhiều ứng dụng web được xây dựng sẵn và một framework linh hoạt để tạo các ứng dụng tùy chỉnh. Được tối ưu hóa đặc biệt cho nền tảng giáo dục DIYables STEM V4 IoT với khả năng IoT nâng cao và tích hợp cảm biến có sẵn.
Thư viện sử dụng kiến trúc modular nơi bạn chỉ bao gồm các ứng dụng web mà 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 Modular: 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ớ
- Hiệu Quả Bộ Nhớ: Mỗi ứng dụng web có thể được bật/tắt độc lập
- Hơn 11 Ứng Dụng Web Sẵn Sàng: Điều khiển Arduino hoàn toàn mà không cần kiến thức lập trình web
- Framework Ứng Dụng Web Tùy Chỉnh: Tạo các ứng dụng của riêng bạn sử dụ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ế Responsive: Hoạt động trên desktop, tablet và thiết bị di động
- Tích Hợp Dễ Dàng: API đơn giản dựa trên callback
- Hỗ Trợ Đa Ứng Dụng: Hỗ trợ thêm nhiều ứng dụng web đồng thời
- Mở Rộng Nền Tảng: Hiện được triển khai cho Arduino Uno R4 WiFi, nhưng có thể mở rộng cho các nền tảng phần cứng khác. Xem DIYables_WebApps_ESP32
Các Lớp Cốt Lõi
DIYablesWebAppServer
Lớp server chính quản lý các ứng dụng web, HTTP request và giao tiếp WebSocket.
Constructor
Tạo một instance web app server.
- httpPort: Cổng HTTP server (mặc định: 80)
- websocketPort: Cổng WebSocket server (mặc định: 81)
Các Phương Thức
Thiết Lập và Kết Nối
Khởi tạo kết nối mạng (cho Ethernet hoặc kết nối đã cấu hình trước) và khởi động web server.
- Trả về: true nếu thành công, false nếu thất bại
- Trường hợp sử dụng: Cho hỗ trợ Ethernet trong tương lai hoặc khi thông tin WiFi đã được cấu hình sẵn
Khởi tạo kết nối WiFi và khởi động web server.
- ssid: Tên mạng WiFi
- password: Mật khẩu WiFi
- Trả về: true nếu thành công, false nếu thất bại
- Trường hợp sử dụng: Kết nối WiFi tiêu chuẩn với thông tin xác thực
Xử lý HTTP request và giao tiếp WebSocket. Phải được gọi trong vòng lặp chính.
Trả về true nếu WiFi đã 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 server.
- app: Con trỏ đến một instance ứng dụng web
Xóa một ứng dụng web theo đường dẫn URL của nó.
- path: Đườ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ỏ đến ứng dụng hoặc nullptr nếu không tìm thấy
Thiết lập trang 404 Not Found (tùy chọn).
- page: Instance trang 404
Truy Cập Ứng Dụng Chuyên Biệt
Lấy instance trang digital pins nếu đã được thêm.
- Trả về: Con trỏ đến trang digital pins hoặc nullptr
Lấy instance trang slider nếu đã được thêm.
- Trả về: Con trỏ đến trang slider hoặc nullptr
Lấy instance trang joystick nếu đã được thêm.
- Trả về: Con trỏ đến trang joystick hoặc nullptr
Các Lớp Cơ Sở
DIYablesWebAppPageBase
Lớp cơ sở trừu tượng mà tất cả các ứng dụng web kế thừa từ đó. Cung cấp chức năng chung cho xử lý HTTP, giao tiếp WebSocket và quản lý trang.
Constructor
Tạo một instance 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ý HTTP request cho trang này. Phương thức ảo thuần túy.
- client: Interface web client để gửi phản hồi
Xử lý WebSocket message cho trang này. Phương thức ảo thuần túy.
- ws: Interface kết nối WebSocket
- message: Nội dung message nhận được
- length: Độ dài message
Trả về chuỗi nhận dạng trang được sử dụng trong hiển thị thông tin kết nối. Phương thức ảo thuần túy.
- 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
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 một kết nối WebSocket bị đóng.
- ws: Kết nối WebSocket đã đóng
Các Phương Thức Chung
Lấy đường dẫn URL cho trang này.
- Trả về: Chuỗi đường dẫn trang
Kiểm tra xem trang hiện có được bật hay không.
- Trả về: true nếu được bật, false nếu bị tắt
Bật hoặc tắt trang.
- enable: true để bật, false để tắt
Phương Thức Tiện Ích
Gửi HTTP header tiêu chuẩn đến client.
- client: Interface web client
- contentType: Loại MIME (mặc định: "text/html")
Gửi một message đến client WebSocket cụ thể.
- ws: Kết nối WebSocket đích
- message: Message để gửi
Phát một message đến tất cả các client WebSocket đã kết nối.
- message: Message để phát
Gửi nội dung HTML lớn sử dụng chunked transfer encoding.
- client: Interface web client
- html: Nội dung HTML để gửi
Ví Dụ Sử Dụng
Các Lớp Ứng Dụng Web
DIYablesHomePage
Trung tâm điều hướng cung cấp liên kết đến tất cả các ứng dụng được bật.
Constructor
Đường Dẫn URL
- Path: / (root)
DIYablesWebChatPage
Giao diện chat tương tác cho giao tiếp hai chiều với Arduino.
Constructor
Đường Dẫn URL
- Path: /webchat
Các Phương Thức
Thiết lập callback cho chat message đến.
Gửi một message đến giao diện web chat.
DIYablesWebMonitorPage
Serial monitor dựa trên web cho output thời gian thực và nhập lệnh.
Constructor
Đường Dẫn URL
- Path: /webmonitor
Các Phương Thức
Thiết lập callback cho monitor message đến.
Gửi một message đến giao diện web monitor.
DIYablesWebDigitalPinsPage
Điều khiển và giám sát các chân digital 0-13 thông qua giao diện web.
Constructor
Đường Dẫn URL
- Path: /webdigitalpins
Các Phương Thức
Bật một chân cho điều khiển web.
- pin: Số chân (0-13)
- mode: WEB_PIN_OUTPUT hoặc WEB_PIN_INPUT
Thiết lập callback cho thao tác ghi chân (output pins).
Thiết lập callback cho thao tác đọc chân (input pins).
Thiết lập callback cho thay đổi chế độ chân.
Cập nhật trạng thái chân theo thời gian thực cho các client web.
DIYablesWebSliderPage
Điều khiển slider kép cho ứng dụng analog/PWM.
Constructor
Đường Dẫn URL
- Path: /webslider
Các Phương Thức
Thiết lập callback cho thay đổi giá trị slider từ web.
- Tham số: slider1 (0-255), slider2 (0-255)
Thiết lập callback cho client web yêu cầu giá trị hiện tại.
Gửi giá trị slider đến giao diện web.
DIYablesWebJoystickPage
Điều khiển joystick 2D cho ứng dụng robot và định vị.
Constructor
- autoReturn: Liệu joystick có tự động trở về giữa hay không
- sensitivity: Tỷ lệ phần trăm chuyển động tối thiểu để kích hoạt cập nhật
Đường Dẫn URL
- Path: /webjoystick
Các Phương Thức
Thiết lập callback cho chuyển động joystick từ web.
- Tham số: x (-100 đến 100), y (-100 đến 100)
Thiết lập callback cho client web yêu cầu vị trí hiện tại.
Gửi vị trí joystick đến giao diện web.
Thiết lập hành vi tự động trở về.
Thiết lập độ nhạy chuyển động (tỷ lệ phần trăm).
DIYablesWebPlotterPage
Hiển thị dữ liệu trực quan thời gian thực với hỗ trợ nhiều chuỗi dữ liệu.
Constructor
Đường Dẫn URL
- Path: /webplotter
Các Phương Thức
Thiết lập tiêu đề biểu đồ.
Thiết lập nhãn trục.
Bật hoặc tắt tự động chia tỷ lệ 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 chuỗi.
Xóa tất cả dữ liệu khỏi biểu đồ.
DIYablesNotFoundPage
Trang lỗi 404 tùy chọn để có trải nghiệm người dùng tốt hơn.
Constructor
Ví Dụ Sử Dụng Cơ Bản
Tổng Quan Các Ứng Dụng Web
Trang Chủ
- URL: http://[arduino-ip]/
- Mục đích: Trung tâm điều hướng
- Tính năng: Liên kết đến tất cả ứng dụng được bật, trạng thái kết nối
Ứng Dụng WebChat
- URL: http://[arduino-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
Web Monitor
- URL: http://[arduino-ip]/webmonitor
- Mục đích: Thay thế serial monitor
- Tính năng: Output serial thời gian thực, nhập lệnh, giao diện tối
Điều Khiển Digital Pins Web
- URL: http://[arduino-ip]/webdigitalpins
- Mục đích: Điều khiển các chân digital 0-13
- Tính năng: Điều khiển từng chân, thao tác hàng loạt, trạng thái thời gian thực
Điều Khiển Slider Web
- URL: http://[arduino-ip]/webslider
- Mục đích: Điều khiển analog/PWM kép
- Tính năng: Hai slider độc lập (0-255), giá trị preset, phản hồi thời gian thực
Điều Khiển Joystick Web
- URL: http://[arduino-ip]/webjoystick
- Mục đích: Điều khiển vị trí 2D cho robot/xe
- Tính năng: Điều khiển touch/chuột, hiển thị tọa độ, điều chỉnh độ nhạy
Web Plotter
- URL: http://[arduino-ip]/webplotter
- Mục đích: Hiển thị dữ liệu trực quan thời gian thực
- Tính năng: Nhiều chuỗi dữ liệu, tự động chia tỷ lệ, tiêu đề và trục có thể cấu hình
Giao Tiếp WebSocket
Tất cả ứng dụng sử dụng WebSocket trên cổng 81 cho giao tiếp thời gian thực:
- WebSocket URL: ws://[arduino-ip]:81
- Kết nối: Tự động kết nối lại khi bị ngắt
- Giao thức: Định dạng message dựa trên văn bản
Định Dạng Message
WebChat Messages
- Từ Web: Message văn bản trực tiếp
- Đến Web: Message văn bản trực tiếp
Web Monitor Messages
- Từ Web: Message văn bản trực tiếp
- Đến Web: Message văn bản trực tiếp
Web Digital Pin Messages
- Từ Web: Định dạng JSON: {"pin": 13, "state": 1}
- Đến Web: Định dạng JSON: {"pin": 13, "state": 1}
Web Slider Messages
- Từ Web: Định dạng JSON: {"slider1": 128, "slider2": 255}
- Đến Web: Định dạng JSON: {"slider1": 128, "slider2": 255}
Web Joystick Messages
- Từ Web: Định dạng JSON: {"x": 50, "y": -25}
- Đến Web: Định dạng JSON: {"x": 50, "y": -25}
Web Plotter Messages
- 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 WiFi
- Ngắt kết nối WebSocket
- Định dạng message không hợp lệ
- Giới hạn kết nối client
Sử Dụng Bộ Nhớ
Lợi Ích Kiến Trúc Modular: 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ớ.
Ước tính sử dụng bộ nhớ cho mỗi thành phần:
- DIYablesWebAppServer: ~8KB Flash, ~2KB RAM
- DIYablesHomePage: ~3KB Flash, ~1KB RAM
- DIYablesWebChatPage: ~6KB Flash, ~1.5KB RAM
- DIYablesWebMonitorPage: ~5KB Flash, ~1.5KB RAM
- DIYablesWebDigitalPinsPage: ~8KB Flash, ~2KB RAM
- DIYablesWebSliderPage: ~6KB Flash, ~1.5KB RAM
- DIYablesWebJoystickPage: ~7KB Flash, ~1.5KB RAM
- DIYablesWebPlotterPage: ~10KB Flash, ~2KB RAM
- WebSocket Buffer: ~1KB RAM cho mỗi kết nối
Tổng nếu bật tất cả ứng dụng: ~53KB Flash, ~12KB RAM
Thiết lập tối thiểu (server + trang chủ + 1 ứng dụng): ~17KB Flash, ~4.5KB RAM
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)
Lưu Ý Bảo Mật
- Không triển khai xác thực (phù hợp chỉ cho mạng nội bộ)
- Chỉ sử dụng trong mạng đáng tin cậy
- Cân nhắc thêm xác thực cho triển khai công cộng
Khắc Phục Sự Cố
Các Vấn Đề Thường Gặp
- Không thể kết nối WiFi
- Kiểm tra SSID và mật khẩu
- Xác minh mạng là 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 đúng
- Kiểm tra cài đặt firewall
- Thử trình duyệt khác
- Sử dụng bộ nhớ cao
- Tắt các ứng dụng không sử dụng
- Giới hạn kết nối đồng thời
- Khởi động lại Arduino 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 WebSocket message
- Sử dụng hàm callback ngắn hơn
Ví Dụ Ứng Dụng
Thư viện DIYables WebApps bao gồm các ví dụ toàn diện được thiết kế cho Arduino Uno R4 WiFi và nền tảng giáo dục DIYables STEM V4 IoT:
Các Ví Dụ Có Sẵn
- Ví Dụ Chat: Giao diện giao tiếp hai chiều
- Ví Dụ WebMonitor: Thay thế serial monitor với tính năng nâng cao
- Ví Dụ WebDigitalPins: Điều khiển tất cả chân digital với phản hồi trực quan
- Ví Dụ WebSlider: Điều khiển analog/PWM kép với preset
-