Arduino WebTable Example Hướng Dẫn Giao Diện Bảng Dữ Liệu
Tổng Quan
Ví dụ WebTable cung cấp giao diện bảng dữ liệu hai cột trên web để hiển thị thông tin theo thời gian thực từ các dự án Arduino của bạn. Được thiết kế cho Arduino Uno R4 WiFi và nền tảng giáo dục DIYables STEM V4 IoT với khả năng trực quan hóa dữ liệu tiên tiến, hệ thống làm nổi bật sự thay đổi giá trị thông minh, và tích hợp liền mạch với hệ sinh thái giáo dục.

Tính Năng Chính
Chức Năng Cốt Lõi
- Bảng Dữ Liệu Hai Cột: Cặp thuộc tính-giá trị rõ ràng cho việc hiển thị dữ liệu có tổ chức
- Cập Nhật Giá Trị Thời Gian Thực: Làm mới dữ liệu tức thời dựa trên WebSocket mà không cần tải lại trang
- Thiết Kế Tiết Kiệm Bộ Nhớ: Không lưu trữ giá trị trong bộ nhớ Arduino - tất cả theo dõi trong giao diện web
- Cấu Hình Động: Thiết lập cấu trúc bảng một lần trong hàm setup() của Arduino
- Điều Khiển Tương Tác: Nút làm mới để yêu cầu dữ liệu thủ công và khả năng tự động kết nối lại
Hệ Thống Làm Nổi Bật Thông Minh
- Phát Hiện Thay Đổi Thông Minh: Tự động phát hiện những giá trị thực sự thay đổi theo thời gian
- Theo Dõi Giá Trị Tự Động: So sánh giá trị hiện tại với giá trị trước đó một cách tự động
- Làm Nổi Bật Hai Cấp Độ:
- Làm nổi bật màu đỏ: Cho các giá trị đang thay đổi tích cực
- Làm nổi bật màu xanh: Cho các giá trị ổn định theo thời gian
- Không Cần Thiết Lập: Hệ thống tự động học những giá trị thay đổi mà không cần cấu hình
- Phản Hồi Trực Quan: Hiệu ứng mượt mà cung cấp phản hồi trực quan rõ ràng cho việc cập nhật giá trị
Giao Diện Web Hiện Đại
- Thiết Kế Đáp Ứng: Hoạt động liền mạch trên desktop, tablet và thiết bị di động
- Styling Chuyên Nghiệp: Bố cục kiểu card với hiệu ứng hover và thẩm mỹ hiện đại
- Trạng Thái Kết Nối: Chỉ báo trực quan cho trạng thái kết nối WebSocket
- Tích Hợp Footer: Styling nhất quán khớp với các ứng dụng web DIYables khác
- Xử Lý Trạng Thái Rỗng: Thông báo thân thiện với người dùng khi không có dữ liệu
- Mở Rộng Nền Tảng: Hiện đang đượ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
Phần Cứng Cần Thiết
| 1 | × | Arduino UNO R4 WiFi | ||
| 1 | × | Alternatively, DIYables STEM V4 IoT | ||
| 1 | × | (Tùy chọn) DIYables STEM V4 IoT | ||
| 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 Block Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Breadboard Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Enclosure for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Power Splitter for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO |
Or you can buy the following kits:
| 1 | × | DIYables STEM V4 IoT Starter Kit (Arduino included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Hướng Dẫn Thiết Lập
Các Bước Nhanh
Thực hiện theo các hướng dẫn này từng bước:
- Nếu đây là lần đầu bạn sử dụng Arduino Uno R4 WiFi/DIYables STEM V4 IoT, hãy tham khảo hướng dẫn về Arduino UNO R4 - Cài Đặt Phần Mềm.
- Kết nối bo Arduino Uno R4/DIYables STEM V4 IoT với máy tính của bạn bằng cáp USB.
- Khởi động Arduino IDE trên máy tính của bạn.
- Chọn bo Arduino Uno R4 phù hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
- Điều hướng đến biểu tượng Libraries trên thanh bên trái của Arduino IDE.
- Tìm kiếm "DIYables WebApps", sau đó tìm thư viện DIYables WebApps của DIYables
- Nhấp nút Install để cài đặt thư viện.

- Bạn sẽ được hỏi về việc cài đặt một số thư viện phụ thuộc khác
- Nhấp nút Install All để cài đặt tất cả các thư viện phụ thuộc.

- Trên Arduino IDE, đi đến File Examples DIYables WebApps WebTable example, hoặc sao chép code và dán vào editor của Arduino IDE
Cấu Hình WiFi
Cấu hình thông tin đăng nhập WiFi trong code bằng cách cập nhật những dòng sau:
- Nhấp nút Upload trên Arduino IDE để upload code lên Arduino UNO R4/DIYables STEM V4 IoT
- Mở Serial Monitor
- Kiểm tra kết quả trên Serial Monitor. Nó sẽ trông như thế này
- Nếu bạn không thấy gì, hãy khởi động lại bo Arduino.
Sử Dụng Giao Diện Web
- Mở trình duyệt web trên máy tính hoặc thiết bị di động được kết nối với cùng mạng WiFi
- Nhập địa chỉ IP được hiển thị trong Serial Monitor vào trình duyệt web
- Ví dụ: http://192.168.1.100
- Bạn sẽ thấy trang chủ như hình dưới:

- Nhấp vào liên kết Web Table, bạn sẽ thấy giao diện của ứng dụng Web Table như dưới đây:

- Hoặc bạn cũng có thể truy cập trang trực tiếp bằng địa chỉ IP theo sau là /web-table. Ví dụ: http://192.168.1.100/web-table
- Bạn sẽ thấy giao diện Web Table hiển thị:
- Bảng Dữ Liệu Thời Gian Thực: Bảng hai cột với các thuộc tính và giá trị hiện tại của chúng
- Làm Nổi Bật Thông Minh: Tự động mã hóa màu sắc cho các giá trị thay đổi so với ổn định
- Trạng Thái Kết Nối: Chỉ báo trực quan hiển thị trạng thái kết nối WebSocket
- Nút Làm Mới: Khả năng làm mới thủ công để có dữ liệu mới nhất
- Cập Nhật Tự Động: Các giá trị cập nhật theo thời gian thực thông qua WebSocket
Hệ Thống Làm Nổi Bật Thông Minh
Cách Hoạt Động
WebTable có tính năng hệ thống làm nổi bật tiên tiến tự động phát hiện những giá trị thay đổi theo thời gian mà không cần cấu hình trong code Arduino của bạn.
Phát Hiện Thay Đổi Tự Động
Giao diện web tự động theo dõi dữ liệu của bạn và cung cấp phản hồi trực quan:
- Làm nổi bật màu đỏ: Áp dụng cho các giá trị thay đổi thường xuyên (như đọc cảm biến, bộ đếm, timer)
- Làm nổi bật màu xanh: Áp dụng cho các giá trị ổn định (như tên thiết bị, địa chỉ IP, cài đặt cấu hình)
- Không cần thiết lập: Hệ thống học tự động khi Arduino của bạn gửi cập nhật
Những Gì Bạn Thấy
- Các giá trị thay đổi theo thời gian (nhiệt độ, uptime, đọc cảm biến) sẽ được làm nổi bật bằng màu đỏ
- Thông tin tĩnh (tên thiết bị, WiFi SSID, địa chỉ IP) sẽ được làm nổi bật bằng màu xanh
- Điều này giúp bạn nhanh chóng xác định dữ liệu nào đang thay đổi tích cực so với thông tin ổn định
Lợi Ích Chính
- Không Cần Cấu Hình: Chỉ cần sử dụng sendValueUpdate() và highlighting hoạt động tự động
- Học Trực Quan: Dễ dàng thấy những phần nào của hệ thống đang hoạt động
- Thân Thiện Với Người Mới Bắt Đầu: Hoạt động mà không cần kiến thức lập trình web
- Tiết Kiệm Bộ Nhớ: Tất cả highlighting xảy ra trong trình duyệt web, không trên Arduino
- Cập Nhật Thời Gian Thực: Highlighting thay đổi ngay lập tức khi giá trị cập nhật
Cấu Hình Cấu Trúc Bảng
Cấu trúc bảng được cấu hình một lần trong hàm setup() bằng phương thức addRow():
Cập Nhật Giá Trị Thời Gian Thực
Các giá trị được cập nhật trong runtime bằng phương thức sendValueUpdate():
Phương Thức Cập Nhật Trực Tiếp (Được Khuyến Nghị)
Lợi Ích Của Cập Nhật Trực Tiếp
- Tiết Kiệm Bộ Nhớ: Không lưu trữ giá trị trong bộ nhớ Arduino
- Thời Gian Thực: Cập nhật tức thì đến giao diện web
- Làm Nổi Bật Tự Động: Giao diện web tự động phát hiện thay đổi
- Code Đơn Giản: Không cần quản lý lưu trữ giá trị cục bộ
Giải Thích Code
Các Thành Phần Chính
Hàm Setup
Cập Nhật Thời Gian Thực Trong Loop
Hàm Callback
Hàm Cập Nhật Giá Trị
API Methods
DIYablesWebTablePage Class Methods
addRow(attribute, initialValue)
- Thêm một hàng mới vào cấu trúc bảng
- Tham số:
- attribute: String - Tên thuộc tính (cột trái)
- initialValue: String - Giá trị ban đầu (cột phải, tùy chọn)
- Cách sử dụng: Được gọi trong setup() để cấu hình cấu trúc bảng
updateValue(attribute, value)
- Cập nhật giá trị theo tên thuộc tính (chỉ lưu trữ cục bộ)
- Tham số:
- attribute: String - Tên thuộc tính cần cập nhật
- value: String - Giá trị mới để thiết lập
- Cách sử dụng: Cập nhật dữ liệu bảng cục bộ
updateValue(index, value)
- Cập nhật giá trị theo chỉ mục hàng (chỉ lưu trữ cục bộ)
- Tham số:
- index: int - Chỉ mục hàng (bắt đầu từ 0)
- value: String - Giá trị mới để thiết lập
- Cách sử dụng: Cập nhật dữ liệu bảng cục bộ theo vị trí
sendValueUpdate(attribute, value)
- Gửi cập nhật giá trị đến web clients theo tên thuộc tính
- Tham số:
- attribute: String - Tên thuộc tính cần cập nhật
- value: String - Giá trị mới để gửi
- Cách sử dụng: Cập nhật thời gian thực đến giao diện web
sendValueUpdate(index, value)
- Gửi cập nhật giá trị đến web clients theo chỉ mục hàng
- Tham số:
- index: int - Chỉ mục hàng (bắt đầu từ 0)
- value: String - Giá trị mới để gửi
- Cách sử dụng: Cập nhật thời gian thực đến giao diện web theo vị trí
sendTableData()
- Gửi dữ liệu bảng hoàn chỉnh đến web clients
- Cách sử dụng: Làm mới toàn bộ bảng trên giao diện web
clearTable()
- Xóa tất cả dữ liệu bảng và đặt lại số lượng hàng
- Cách sử dụng: Reset cấu trúc bảng (hiếm khi cần)
getRowCount()
- Trả về số lượng hàng trong bảng
- Trả về: int - Số lượng hàng hiện tại
- Cách sử dụng: Lấy thông tin kích thước bảng
getAttribute(index)
- Lấy tên thuộc tính theo chỉ mục hàng
- Tham số: index: int - Chỉ mục hàng (bắt đầu từ 0)
- Trả về: String - Tên thuộc tính
- Cách sử dụng: Truy cập thông tin cấu trúc bảng
getValue(index)
- Lấy giá trị theo chỉ mục hàng
- Tham số: index: int - Chỉ mục hàng (bắt đầu từ 0)
- Trả về: String - Giá trị hiện tại
- Cách sử dụng: Truy cập các giá trị bảng hiện tại
onTableValueRequest(callback)
- Thiết lập hàm callback cho yêu cầu dữ liệu từ web clients
- Tham số: void (*callback)() - Hàm gọi khi dữ liệu được yêu cầu
- Cách sử dụng: Xử lý yêu cầu dữ liệu từ web client
Giao Tiếp WebSocket
Thông Điệp Từ Web Đến Arduino
- TABLE:GET_DATA - Yêu cầu dữ liệu bảng hoàn chỉnh
- TABLE:UPDATE:attribute:value - Cập nhật giá trị cho thuộc tính cụ thể
Thông Điệp Từ Arduino Đến Web
- TABLE_DATA:attr1:val1|attr2:val2|... - Gửi dữ liệu bảng hoàn chỉnh
- VALUE_UPDATE:attribute:value - Gửi cập nhật giá trị đơn
Khắc Phục Sự Cố
Các Vấn Đề Thường Gặp
1. Bảng Không Hiển Thị Dữ Liệu
- Vấn đề: Bảng trống hoặc thông báo "No Data Available"
- Nguyên nhân: Cấu trúc bảng không được cấu hình hoặc vấn đề kết nối WiFi
- Giải pháp:
- Xác minh setupTableStructure() được gọi trong setup()
- Kiểm tra trạng thái kết nối WiFi
- Nhấp nút refresh để yêu cầu dữ liệu thủ công
- Kiểm tra Serial Monitor để xem thông báo lỗi
- Vấn đề: Bảng hiển thị giá trị cũ mặc dù Arduino đã cập nhật
- Nguyên nhân: Kết nối WebSocket bị mất hoặc hàm cập nhật không được gọi
- Giải pháp:
- Kiểm tra chỉ báo trạng thái kết nối trên trang web
- Làm mới trang web
- Xác minh sendValueUpdate() được gọi đúng cách
- Kiểm tra tính ổn định của mạng
- Vấn đề: Các giá trị không hiển thị highlighting màu đỏ hoặc xanh
- Nguyên nhân: JavaScript không phát hiện sự thay đổi giá trị đúng cách
- Giải pháp:
- Làm mới trang web để reset phát hiện thay đổi
- Đảm bảo các giá trị thực sự đang thay đổi (kiểm tra Serial Monitor)
- Xóa cache trình duyệt nếu highlighting có vẻ bị kẹt
- Các giá trị cần nhiều lần cập nhật để kích hoạt hệ thống highlighting
- Vấn đề: Lỗi khi nhấp nút refresh
- Nguyên nhân: Kết nối WebSocket thất bại
- Giải pháp:
- Xác minh địa chỉ IP Arduino đúng
- Kiểm tra nếu Arduino trên cùng mạng WiFi
- Khởi động lại Arduino và làm mới trang web
- Kiểm tra cài đặt firewall
- Vấn đề: Các hàng được thêm/xóa không xuất hiện trên giao diện web
- Nguyên nhân: Cấu trúc bảng chỉ được cấu hình trong setup()
- Giải pháp:
- Khởi động lại Arduino để áp dụng thay đổi cấu trúc
- Sử dụng clearTable() và addRow() nếu cần thay đổi động
- Làm mới trang web sau khi khởi động lại Arduino
2. Các Giá Trị Không Cập Nhật Theo Thời Gian Thực
3. Highlighting Không Hoạt Động
4. Lỗi "Not connected to Arduino"
5. Thay Đổi Cấu Trúc Bảng Không Được Phản Ánh
Mẹo Debug
Bật Serial Debugging:
Theo Dõi Cập Nhật Giá Trị:
Kiểm Tra Trạng Thái Kết Nối: