ESP32 Bluetooth Table Example Hướng dẫn Giao diện Hiển thị Dữ liệu Có Cấu trúc
Tổng quan
Ví dụ Bluetooth Table cung cấp giao diện hiển thị dữ liệu key-value có cấu trúc được truy cập thông qua ứng dụng DIYables Bluetooth STEM. Được thiết kế cho các bo mạch ESP32 với hỗ trợ kết nối cả BLE (Bluetooth Low Energy) và Classic Bluetooth. Định nghĩa các hàng có tên và cập nhật giá trị theo thời gian thực — hoàn hảo cho dashboard, bảng trạng thái cảm biến, giám sát hệ thống, và bất kỳ ứng dụng nào yêu cầu trình bày dữ liệu có tổ chức.
Ví dụ này hỗ trợ hai chế độ Bluetooth:
- ESP32 BLE (Bluetooth Low Energy): Hoạt động trên cả Android và iOS
- ESP32 Classic Bluetooth: Chỉ hoạt động trên Android. iOS không hỗ trợ Classic Bluetooth. Sử dụng BLE nếu bạn cần hỗ trợ iOS.

Tính năng
- Hàng Có Cấu trúc: Tối đa 20 hàng thuộc tính có tên
- Cập Nhật Thời Gian Thực: Cập nhật giá trị từng hàng riêng lẻ mà không cần làm mới toàn bộ bảng
- Thuộc Tính Có Tên: Mỗi hàng có một nhãn mô tả (ví dụ: "Temperature", "Status")
- Giá Trị Động: Gửi bất kỳ giá trị chuỗi nào cho mỗi hàng
- Đồng Bộ Cấu Trúc Bảng: Ứng dụng yêu cầu cấu hình bảng khi kết nối
- BLE & Classic Bluetooth: Chọn chế độ Bluetooth phù hợp với dự án của bạn
- Đa Nền Tảng: Chế độ BLE hoạt động trên cả Android và iOS; Classic Bluetooth hoạt động trên Android
- Tùy Chọn Tiết Kiệm Pin: Chế độ BLE tiêu thụ ít năng lượng hơn Classic Bluetooth
Linh kiện 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 | × | breadboard | ||
| 1 | × | dây jumper | ||
| 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) |
Code ESP32
Các bước nhanh
Thực hiện theo từng bước sau:
- Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy tham khảo hướng dẫn ESP32 - Cài Đặt Phần Mềm.
- Kết nối bo mạch ESP32 với máy tính của bạn bằng cáp USB.
- Mở Arduino IDE trên máy tính của bạn.
- Chọn bo mạch ESP32 và cổng COM phù hợp.
- Điều hướng đến biểu tượng Libraries ở thanh bên trái của Arduino IDE.
- Tìm kiếm "DIYables Bluetooth", sau đó tìm thư viện DIYables Bluetooth của DIYables
- Nhấp nút Install để cài đặt thư viện.

- Bạn sẽ được yêu cầu 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ả thư viện phụ thuộc.

Chọn một trong hai chế độ Bluetooth bên dưới tùy theo nhu cầu của bạn:
Code ESP32 Classic Bluetooth (chỉ hoạt động với ứng dụng trên Android)
Lưu ý: Classic Bluetooth KHÔNG được hỗ trợ trên iOS. Nếu bạn cần hỗ trợ iOS, hãy sử dụng code BLE bên dưới.
- Trên Arduino IDE, vào File Examples DIYables Bluetooth Esp32Bluetooth_Table example, hoặc sao chép code trên và dán vào editor của Arduino IDE
- Nhấp nút Upload trên Arduino IDE để upload code lên ESP32
- Mở Serial Monitor
- Kiểm tra kết quả trên Serial Monitor. Nó trông như sau:
Code ESP32 BLE (hoạt động với ứng dụng trên cả Android và iOS)
- Trên Arduino IDE, vào File Examples DIYables Bluetooth Esp32BLE_Table example, hoặc sao chép code trên và dán vào editor của Arduino IDE
- Nhấp nút Upload trên Arduino IDE để upload code lên ESP32
- Mở Serial Monitor
- Kiểm tra kết quả trên Serial Monitor. Nó trông như sau:
Ứng dụng điện thoại
- Nếu bạn đang sử dụng code ESP32 Classic Bluetooth, bạn cần ghép nối ESP32 với điện thoại Android trước khi mở ứng dụng:
- Vào Settings > Bluetooth của điện thoại
- Đảm bảo Bluetooth được bật
- Điện thoại sẽ quét các thiết bị có sẵn
- Tìm và nhấn "ESP32_Table" trong danh sách thiết bị có sẵn
- Xác nhận yêu cầu ghép nối (không cần PIN)
- Đợi cho đến khi hiển thị "Paired" dưới tên thiết bị
- Nếu bạn đang sử dụng code ESP32 BLE, không cần ghép nối. Chỉ cần tiến hành bước tiếp theo.
- Mở ứng dụng DIYables Bluetooth
- Khi mở ứng dụng lần đầu tiên, nó sẽ yêu cầu quyền. Vui lòng cấp các quyền sau:
- Quyền Nearby Devices (Android 12+) / quyền Bluetooth (iOS) - cần thiết để quét và kết nối với thiết bị Bluetooth
- Quyền Location (chỉ Android 11 trở xuống) - yêu cầu bởi các phiên bản Android cũ để quét thiết bị BLE
- Đảm bảo Bluetooth được bật trên điện thoại
- Trên màn hình chính, nhấn nút Connect. Ứng dụng sẽ quét cả thiết bị BLE và Classic Bluetooth.

- Tìm và nhấn thiết bị của bạn trong kết quả quét để kết nối:
- Đối với Classic Bluetooth: nhấn "ESP32_Table"
- Đối với BLE: nhấn "ESP32BLE_Table"
- Sau khi kết nối, ứng dụng tự động quay lại màn hình chính. Chọn ứng dụng Table từ menu ứng dụng.

Lưu ý: Bạn có thể nhấn biểu tượng cài đặt trên màn hình chính để ẩn/hiện các ứng dụng trên màn hình chính. Để biết thêm chi tiết, xem Hướng dẫn sử dụng DIYables Bluetooth App.
- Bảng sẽ được điền với các tên thuộc tính và giá trị hiện tại của chúng

Bây giờ hãy nhìn lại Serial Monitor trên Arduino IDE. Bạn sẽ thấy:
- Theo dõi các giá trị bảng cập nhật theo thời gian thực trong ứng dụng
Tùy chỉnh Sáng tạo - Điều chỉnh Code cho Dự án của Bạn
Định nghĩa Hàng Bảng
Thêm các hàng thuộc tính vào bảng (tối đa 20 hàng):
Cập nhật Giá trị Hàng
Cập nhật giá trị hàng riêng lẻ theo tên thuộc tính hoặc chỉ số:
Xử lý Yêu cầu Dữ liệu từ Ứng dụng
Khi ứng dụng kết nối hoặc yêu cầu làm mới:
Xóa và Xây dựng lại Bảng
Xử lý Sự kiện Kết nối
Cách sử dụng Bảng
Giao diện Ứng dụng
Giao diện bảng trong ứng dụng DIYables Bluetooth hiển thị:
- Cột Attribute: Nhãn hàng được định nghĩa bởi addRow()
- Cột Value: Giá trị hiện tại được cập nhật bởi sendValueUpdate()
- Tự động Làm mới: Giá trị cập nhật theo thời gian thực khi chúng nhận được
Giới hạn Bảng
- Tối đa 20 hàng mỗi bảng (MAX_TABLE_ROWS = 20)
- Tên thuộc tính nên ngắn gọn nhưng mô tả rõ ràng
- Giá trị được hiển thị dưới dạng chuỗi
Ví dụ Lập trình
Dashboard Cảm biến
Giám sát Trạng thái Hệ thống
Bảng Trạng thái GPIO Pin
Mảng Cảm biến Analog
Kỹ thuật Lập trình Nâng cao
Định dạng Có điều kiện với Emoji
Cập nhật Theo Sự kiện
Ý tưởng Tích hợp Phần cứng
Bảng Trạm Thời tiết BME280
Kết nối cảm biến BME280 để hiển thị nhiệt độ, độ ẩm và áp suất trong bảng.
Dashboard Đa Cảm biến
Kết nối nhiều cảm biến (DHT22, BMP280, LDR, MQ-135) và hiển thị tất cả các giá trị đo dưới dạng hàng.
Bảng Thông tin Thiết bị
Hiển thị thông tin hệ thống ESP32: model chip, kích thước flash, heap trống, uptime, và địa chỉ MAC.
BLE vs Classic Bluetooth - Nên chọn cái nào?
| Tính năng | BLE (Esp32BLE_Table) | Classic Bluetooth (Esp32Bluetooth_Table) |
|---|---|---|
| Hỗ trợ iOS | ? Có | ? Không |
| Hỗ trợ Android | ? Có | ? Có |
| Tiêu thụ Pin | Thấp | Cao hơn |
| Tầm xa | ~30-100m | ~10-100m |
| Tốc độ Dữ liệu | Thấp hơn | Cao hơn |
| Cần Ghép nối | Không (tự kết nối) | Có (ghép nối thủ công) |
| Tốt nhất cho | Chạy pin, đa nền tảng | Thông lượng cao, chỉ Android |
Khắc phục Sự cố
Vấn đề Thường gặp
1. Không thể tìm thấy thiết bị trong ứng dụng
- Đảm bảo ESP32 được cấp nguồn và sketch đã được upload
- Đối với BLE: Đảm bảo Bluetooth và Location của điện thoại được bật
- Đối với Classic Bluetooth: Ghép nối thiết bị trước trong cài đặt Bluetooth của điện thoại
- Kiểm tra rằng partition scheme chính xác được chọn (Huge APP)
2. Bảng không hiển thị dữ liệu
- Đảm bảo sendTableStructure() được gọi trong callback onDataRequest
- Xác minh các hàng được thêm với addRow() trước khi gửi cập nhật
- Kiểm tra Serial Monitor để thấy thông báo "App requested table data"
3. Giá trị không cập nhật
- Xác minh tên thuộc tính trong sendValueUpdate() khớp chính xác với những gì được thêm bằng addRow()
- Kiểm tra timer khoảng cách cập nhật của bạn đang hoạt động
- Đảm bảo Bluetooth vẫn được kết nối
4. Thiếu hàng trong bảng
- Tối đa 20 hàng được hỗ trợ
- Kiểm tra getRowCount() để xác minh tất cả hàng đã được thêm
- Hàng phải được thêm trước khi gửi cấu trúc bảng
5. Kết nối thường xuyên bị ngắt
- Di chuyển gần hơn với ESP32 (giảm khoảng cách)
- Đối với BLE: Kiểm tra nhiễu từ các thiết bị BLE khác
- Đối với Classic Bluetooth: Đảm bảo nguồn điện ổn định cho ESP32
6. Sketch quá lớn / không đủ không gian
- Trong Arduino IDE, vào Tools > Partition Scheme và chọn "Huge APP (3MB No OTA/1MB SPIFFS)" hoặc "No OTA (Large APP)"
- Partition scheme mặc định chỉ cung cấp ~1.2MB cho code ứng dụng, không đủ cho thư viện Bluetooth
- Cài đặt này cung cấp ~3MB bằng cách hy sinh partition OTA (cập nhật qua không khí)
Mẹo Debug
Thêm debug toàn diện:
Ý tưởng Dự án
Dashboard Giám sát
- Hiển thị trạm thời tiết (nhiệt độ, độ ẩm, áp suất, gió)
- Giám sát trạng thái server/mạng
- Dashboard chăm sóc cây trồng (độ ẩm đất, ánh sáng, nhiệt độ)
- Giám sát bể cá (nhiệt độ, pH, TDS)
Thông tin Hệ thống
- Chẩn đoán hệ thống ESP32
- Chi tiết kết nối WiFi
- Theo dõi sử dụng bộ nhớ
- Hiển thị trạng thái pin
Ghi dữ liệu
- Theo dõi min/max/trung bình cảm biến
- Hiển thị bộ đếm sự kiện
- Thống kê thời gian (thời gian phản hồi, uptime)
- Tổng kết trạng thái pin I/O
Tự động hóa Nhà
- Hiển thị nhiệt độ từng phòng
- Tổng quan trạng thái thiết bị
- Tóm tắt tiêu thụ năng lượng
- Trạng thái cảm biến an ninh