ESP32 Bluetooth Analog Gauge Example Hướng Dẫn Hiển Thị Đồng Hồ Analog
Tổng Quan
Ví dụ Bluetooth Analog Gauge cung cấp màn hình hiển thị kiểu đồng hồ analog cổ điển có thể truy cập thông qua ứng dụng DIYables Bluetooth STEM. Được thiết kế cho bo mạch ESP32 với hỗ trợ cho cả kết nối BLE (Bluetooth Low Energy) và Classic Bluetooth. Gửi các giá trị số với phạm vi và nhãn đơn vị có thể cấu hình — hoàn hảo cho đồng hồ tốc độ, đồng hồ áp suất, đồng hồ điện áp và bất kỳ ứng dụng nào yêu cầu hiển thị mặt đồng hồ analog.
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
- Hiển Thị Đồng Hồ Analog: Hình ảnh hóa kiểu mặt đồng hồ/đồng hồ đo cổ điển
- Phạm Vi Có Thể Cấu Hình: Đặt giá trị tối thiểu và tối đa cho đồng hồ
- Đơn Vị Tùy Chỉnh: Hiển thị km/h, PSI, V, %, hoặc bất kỳ chuỗi đơn vị tùy chỉnh nào
- Cập Nhật Thời Gian Thực: Gửi các số đọc trực tiếp với chuyển động kim mượt mà
- Request Callback: Ứng dụng có thể yêu cầu giá trị hiện tại theo nhu cầu
- 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 Điện: Chế độ BLE tiêu thụ ít điện nă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
Hãy thực hiện theo các hướng dẫn này từng bước:
- Mới sử dụng ESP32? Hãy bắt đầu với hướng dẫn Raspberry Pi Getting Started để học các kiến thức cơ bản trước.
- Kết nối bo mạch ESP32 với máy tính của bạn bằng cáp USB.
- Khởi chạy 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 trên 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 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.

Chọn một trong hai chế độ Bluetooth dưới đây tùy thuộc vào 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_AnalogGauge example, hoặc sao chép code trên và dán vào trình chỉnh sửa 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ó sẽ trông như thế này:
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_AnalogGauge example, hoặc sao chép code trên và dán vào trình chỉnh sửa 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ó sẽ trông như thế này:
Ứng Dụng Di Động
- 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 của bạn 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 của bạn sẽ quét các thiết bị có sẵn
- Tìm và nhấn "ESP32_Gauge" trong danh sách các 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ở DIYables Bluetooth App
- 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 các thiết bị Bluetooth
- Quyền Location (chỉ Android 11 trở xuống) - được yêu cầu bởi các phiên bản Android cũ hơn để quét thiết bị BLE
- Đảm bảo Bluetooth được bật trên điện thoại của bạn
- 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_Gauge"
- Đối với BLE: nhấn "ESP32BLE_Gauge"
- Sau khi kết nối, ứng dụng tự động quay về màn hình chính. Chọn ứng dụng Analog Gauge 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, hãy xem DIYables Bluetooth App User Manual.
- Đồng hồ analog sẽ hiển thị giá trị hiện tại với kim di chuyển

Bây giờ hãy nhìn lại Serial Monitor trên Arduino IDE. Bạn sẽ thấy:
- Theo dõi kim đồng hồ di chuyển theo thời gian thực trong ứng dụng
Tùy Chỉnh Sáng Tạo - Điều Chỉnh Code Theo Dự Án Của Bạn
Cấu Hình Phạm Vi và Đơn Vị Đồng Hồ
Đặt phạm vi hiển thị và đơn vị:
Gửi Giá Trị Đồng Hồ
Xử Lý Yêu Cầu Giá Trị Từ Ứng Dụng
Xử Lý Sự Kiện Kết Nối
Cách Sử Dụng Analog Gauge
Giao Diện Ứng Dụng
Giao diện analog gauge trong DIYables Bluetooth App hiển thị:
- Mặt Đồng Hồ/Kim: Đồng hồ đo analog cổ điển với kim di chuyển
- Hiển Thị Số: Hiển thị giá trị hiện tại chính xác
- Nhãn Đơn Vị: Hiển thị chuỗi đơn vị đã cấu hình
- Vạch Chia Độ: Hiển thị thang chia độ từ min đến max
Cấu Hình Đơn Vị Phổ Biến
- Tốc Độ: DIYables_BluetoothAnalogGauge(0.0, 200.0, "km/h")
- Áp Suất: DIYables_BluetoothAnalogGauge(0.0, 100.0, "PSI")
- Điện Áp: DIYables_BluetoothAnalogGauge(0.0, 5.0, "V")
- Phần Trăm: DIYables_BluetoothAnalogGauge(0.0, 100.0, "%")
- RPM: DIYables_BluetoothAnalogGauge(0.0, 8000.0, "RPM")
Ví Dụ Lập Trình
Đồng Hồ Điện Áp
Đồng Hồ Áp Suất (BMP280)
Cảm Biến Dòng Điện (ACS712)
Tốc Độ Từ Encoder
Kỹ Thuật Lập Trình Nâng Cao
Chuyển Động Kim Mượt Mà
Giữ Giá Trị Đỉnh
Tự Động Chia Tỷ Lệ Phạm Vi
Ý Tưởng Tích Hợp Phần Cứng
Cảm Biến Analog
Bất kỳ cảm biến nào có đầu ra analog đều có thể điều khiển đồng hồ: chiết áp, cảm biến lực, cảm biến uốn, và nhiều hơn nữa.
Cảm Biến I2C/SPI
Sử dụng cảm biến I2C như BMP280 (áp suất), INA219 (dòng điện/công suất), hoặc cảm biến SPI để đo tốc độ cao.
Cảm Biến Xung/Tần Số
Encoder tốc độ, đồng hồ lưu lượng, và cảm biến RPM sử dụng đếm dựa trên ngắt.
Load Cell (HX711)
Đo trọng lượng với bộ khuếch đại HX711 cho cân bếp hoặc cân công nghiệp.
BLE vs Classic Bluetooth - Nên Chọn Loại Nào?
| Tính Năng | BLE (Esp32BLE_AnalogGauge) | Classic Bluetooth (Esp32Bluetooth_AnalogGauge) |
|---|---|---|
| Hỗ Trợ iOS | ? Có | ? Không |
| Hỗ Trợ Android | ? Có | ? Có |
| Tiêu Thụ Điện | Thấp | Cao hơn |
| Phạm Vi | ~30-100m | ~10-100m |
| Tốc Độ Dữ Liệu | Thấp hơn | Cao hơn |
| Yêu Cầu Ghép Nối | Không (tự động kết nối) | Có (ghép nối thủ công) |
| Tốt Nhất Cho | Tiết kiệm 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 đúng đã được chọn (Huge APP)
2. Đồng hồ hiển thị 0 hoặc giá trị không chính xác
- Xác minh kết nối dây và cảm biến
- Kiểm tra việc đọc cảm biến với Serial Monitor trước
- Đảm bảo giá trị nằm trong phạm vi đã cấu hình
- Xác minh cấu hình đơn vị và phạm vi trong constructor
3. Kim đồng hồ không chuyển động mượt mà
- Tăng tần suất cập nhật (khoảng thời gian nhỏ hơn trong kiểm tra millis())
- Áp dụng làm mượt/lọc cho việc đọc cảm biến
- Kiểm tra nhiễu cảm biến hoặc việc đọc không ổn định
4. Giá trị ngoài phạm vi đồng hồ
- Điều chỉnh phạm vi với setRange(min, max) để phù hợp với đầu ra cảm biến
- Giá trị ngoài phạm vi sẽ hiển thị nhưng có thể bị cắt ở min/max
- Xem xét tự động chia tỷ lệ cho các phạm vi không biết
5. Kết nối bị ngắt thường xuyên
- 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 phân vùng OTA (over-the-air update)
Mẹo Debug
Thêm debug toàn diện:
Ý Tưởng Dự Án
Xe Cộ & Chuyển Động
- Đồng hồ tốc độ cho xe RC hoặc xe đạp
- Đồng hồ đo vòng quay RPM cho động cơ
- Đồng hồ đo lực G để đo gia tốc
- Chỉ báo góc nghiêng
Điện & Nguồn
- Đồng hồ voltmeter (monitor điện áp pin)
- Đồng hồ ampe (tiêu thụ dòng điện)
- Đồng hồ watt (sử dụng công suất)
- Đồng hồ mức pin
Môi Trường
- Đồng hồ áp suất khí quyển
- Tốc độ gió (máy đo gió)
- Đồng hồ chỉ số UV
- Đồng hồ đo mức âm thanh (dB)
Công Nghiệp
- Hiển thị cân trọng lượng
- Đồng hồ lưu lượng
- Chỉ báo mức bồn chứa
- Đồng hồ đo momen xoắn