ESP32 Bluetooth Rotator Example Hướng dẫn Giao diện Điều khiển Đĩa/Núm xoay được

Tổng quan

Ví dụ Bluetooth Rotator cung cấp điều khiển đĩa/núm xoay được thông qua ứng dụng DIYables Bluetooth STEM. Thiết kế cho bo mạch ESP32 hỗ trợ cả kết nối BLE (Bluetooth Low Energy)Classic Bluetooth. Rotator gửi giá trị góc độ và hỗ trợ chế độ góc liên tục (0-360°) hoặc giới hạn phạm vi góc — hoàn hảo cho điều khiển servo, hiển thị la bàn, núm âm lượng và mọi ứng dụng cần đầu vào xoay.

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.
ESP32 Bluetooth rotator example - hướng dẫn giao diện Điều khiển Đĩa/núm xoay được

Tính năng

  • Núm xoay được: Chạm và kéo để xoay đĩa trên màn hình
  • Chế độ liên tục: Xoay 360° đầy đủ không giới hạn
  • Chế độ giới hạn: Phạm vi góc bị ràng buộc (ví dụ: 0-180° cho servo)
  • Đầu ra góc độ: Giá trị góc float được gửi theo thời gian thực
  • Tương thích servo: Ánh xạ trực tiếp đến góc servo (0-180°)
  • 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 năng lượng: Chế độ BLE tiêu thụ ít năng lượng hơn Classic Bluetooth

Phần cứng 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 (bo mạch thí nghiệm)
1×dây jumper (dây nối)
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 hướng dẫn từng bước:

  • Mới sử dụng ESP32? Hãy bắt đầu với hướng dẫn ESP32 - Cài Đặt Phần Mềm để 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 bằng cáp USB.
  • Khởi chạy Arduino IDE trên máy tính.
  • Chọn bo mạch ESP32 và cổng COM thích 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.
ESP32 diyables Bluetooth 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ả các thư viện phụ thuộc.
ESP32 diyables Bluetooth dependency

Chọn một trong hai chế độ Bluetooth dưới đây tùy theo nhu cầu của bạn:

Code ESP32 Classic Bluetooth (chỉ hoạt động với app 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_Rotator example, hoặc sao chép code trên và dán vào editor của Arduino IDE
/* * DIYables Bluetooth Library - ESP32 Classic Bluetooth Rotator Example * Works with DIYables Bluetooth STEM app on Android * Note: Classic Bluetooth is NOT supported on iOS. Use BLE examples for iOS support. * * This example demonstrates the Bluetooth Rotator feature: * - Rotatable disc/knob control (0-360 degrees) * - Continuous or limited angle range * - Perfect for servo control, compass display, volume knobs * * Compatible Boards: * - ESP32 (all variants with Classic Bluetooth) * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Optional: Servo motor for visual feedback * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status * 3. Use DIYables Bluetooth App to connect and rotate the knob * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothRotator.h> #include <platforms/DIYables_Esp32Bluetooth.h> // Create Bluetooth instances DIYables_Esp32Bluetooth bluetooth("ESP32_Rotator"); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Rotator app instance // Option 1: Continuous mode (0-360, wraps around) // DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_CONTINUOUS); // Option 2: Limited mode (constrained angle range) DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_LIMITED, 0, 180); // Variables to store current angle float currentAngle = 0.0; // Optional: Servo control (uncomment if using ESP32Servo library) // #include <ESP32Servo.h> // Servo myServo; // const int SERVO_PIN = 13; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 Rotator Example"); // Optional: Initialize servo // myServo.attach(SERVO_PIN); // myServo.write(0); bluetoothServer.begin(); bluetoothServer.addApp(&bluetoothRotator); bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothRotator.send(currentAngle); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; Serial.print("Rotator angle: "); Serial.print(angle); Serial.println("°"); // TODO: Add your control logic here based on angle // Examples: // - Servo control: myServo.write((int)angle); // - Stepper motor: stepper.moveTo(angleToSteps(angle)); // - LED ring: setLEDPosition(angle); // - Volume control: setVolume(map(angle, 0, 360, 0, 100)); }); Serial.println("Waiting for Bluetooth connection..."); } void loop() { bluetoothServer.loop(); delay(10); }
  • Nhấp nút Upload trên Arduino IDE để tải code lên ESP32
  • Mở Serial Monitor
  • Kiểm tra kết quả trên Serial Monitor. Nó trông như thế này:
COM6
Send
DIYables Bluetooth - ESP32 Rotator Example Waiting for Bluetooth connection...
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code ESP32 BLE (hoạt động với app trên cả Android và iOS)

  • Trên Arduino IDE, vào File Examples DIYables Bluetooth Esp32BLE_Rotator example, hoặc sao chép code trên và dán vào editor của Arduino IDE
/* * DIYables Bluetooth Library - ESP32 BLE Rotator Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Rotator feature: * - Rotatable disc/knob control (0-360 degrees) * - Continuous or limited angle range * - Perfect for servo control, compass display, volume knobs * * Compatible Boards: * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * - ESP32-S3 * - ESP32-C3 * - Any ESP32 board supporting BLE * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Optional: Servo motor for visual feedback * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status * 3. Use DIYables Bluetooth App to connect and rotate the knob * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothRotator.h> #include <platforms/DIYables_Esp32BLE.h> // BLE Configuration const char* DEVICE_NAME = "ESP32BLE_Rotator"; const char* SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214"; const char* TX_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214"; const char* RX_UUID = "19B10002-E8F2-537E-4F6C-D104768A1214"; // Create Bluetooth instances DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Rotator app instance DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_LIMITED, 0, 180); // Variables to store current angle float currentAngle = 0.0; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 BLE Rotator Example"); bluetoothServer.begin(); bluetoothServer.addApp(&bluetoothRotator); bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothRotator.send(currentAngle); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; Serial.print("Rotator angle: "); Serial.print(angle); Serial.println("°"); // TODO: Add your control logic here based on angle }); Serial.println("Waiting for Bluetooth connection..."); } void loop() { bluetoothServer.loop(); delay(10); }
  • Nhấp nút Upload trên Arduino IDE để tải code lên ESP32
  • Mở Serial Monitor
  • Kiểm tra kết quả trên Serial Monitor. Nó trông như thế này:
COM6
Send
DIYables Bluetooth - ESP32 BLE Rotator Example Waiting for Bluetooth connection...
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Ứng dụng di động

  • Cài đặt ứng dụng DIYables Bluetooth trên smartphone của bạn: Android | iOS
  • 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ở app:
    • 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ị khả dụng
    • Tìm và chạm "ESP32_Rotator" trong danh sách thiết bị khả dụng
    • 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ếp tục bước tiếp theo.
  • Mở ứng dụng DIYables Bluetooth
  • Khi mở app lần đầu, nó sẽ yêu cầu quyền. Vui lòng cấp những 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) - được 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, chạm nút Connect. App sẽ quét cả thiết bị BLE và Classic Bluetooth.
diyables Bluetooth app - home screen with scan nút nhấn
  • Tìm và chạm thiết bị của bạn trong kết quả quét để kết nối:
    • Đối với Classic Bluetooth: chạm "ESP32_Rotator"
    • Đối với BLE: chạm "ESP32BLE_Rotator"
  • Sau khi kết nối, app tự động quay về màn hình chính. Chọn app Rotator từ menu app.
diyables Bluetooth app - home screen with rotator app

Lưu ý: Bạn có thể chạm biểu tượng cài đặt trên màn hình chính để ẩn/hiện app 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.

  • Kéo núm rotator để thay đổi góc độ
diyables Bluetooth app - rotator screen

Giờ hãy nhìn lại Serial Monitor trên Arduino IDE. Bạn sẽ thấy:

COM6
Send
Bluetooth connected! Rotator angle: 45.0° Rotator angle: 90.0° Rotator angle: 135.0° Rotator angle: 180.0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Xoay núm trong app và xem các giá trị góc thời gian thực trong Serial Monitor

Tùy chỉnh sáng tạo - Điều chỉnh Code cho dự án của bạn

Cấu hình chế độ Rotator

Đặt chế độ liên tục hoặc giới hạn:

// Tùy chọn 1: Chế độ liên tục (0-360°, quay vòng) DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_CONTINUOUS); // Tùy chọn 2: Chế độ giới hạn (phạm vi góc bị ràng buộc) DIYables_BluetoothRotator bluetoothRotator(ROTATOR_MODE_LIMITED, 0, 180); // Thay đổi chế độ khi chạy: bluetoothRotator.setRotatorMode(ROTATOR_MODE_LIMITED, 0, 270); // Đọc cấu hình hiện tại: int mode = bluetoothRotator.getRotatorMode(); float minAngle = bluetoothRotator.getMinAngle(); float maxAngle = bluetoothRotator.getMaxAngle();

Xử lý thay đổi góc độ

Sử dụng callback onRotatorAngle() để nhận giá trị góc:

bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; Serial.print("Rotator angle: "); Serial.print(angle); Serial.println("°"); // TODO: Thêm logic điều khiển của bạn ở đây });

Xử lý yêu cầu cấu hình từ App

bluetoothRotator.onGetConfig([]() { // Gửi góc hiện tại đến app bluetoothRotator.send(currentAngle); Serial.println("App requested config - sent current angle"); });

Gửi góc độ đến App

Bạn có thể cập nhật vị trí rotator từ ESP32:

// Gửi giá trị góc để cập nhật hiển thị app bluetoothRotator.send(90.0); // Đặt rotator về 90° // Gửi tin nhắn văn bản bluetoothRotator.send("Calibrated");

Xử lý sự kiện kết nối

bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothRotator.send(currentAngle); // Gửi vị trí hiện tại }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); });

Cách sử dụng Rotator

Điều khiển giao diện App

Giao diện rotator trong ứng dụng DIYables Bluetooth cung cấp:

  • Đĩa xoay được: Chạm và kéo để xoay
  • Hiển thị góc độ: Hiển thị giá trị góc hiện tại
  • Chỉ báo trực quan: Đánh dấu vị trí xoay hiện tại

Các chế độ Rotator

  • ROTATOR_MODE_CONTINUOUS (0): Xoay 360° đầy đủ, quay vòng
  • ROTATOR_MODE_LIMITED (1): Bị ràng buộc trong phạm vi góc min/max

Ví dụ lập trình

Điều khiển Servo

#include <ESP32Servo.h> Servo myServo; const int SERVO_PIN = 13; void setup() { myServo.attach(SERVO_PIN); myServo.write(0); // Chế độ giới hạn: 0-180° phù hợp với phạm vi servo // bluetoothRotator đã được cấu hình là (ROTATOR_MODE_LIMITED, 0, 180) bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; myServo.write((int)angle); Serial.print("Servo: "); Serial.print((int)angle); Serial.println("°"); }); }

Núm âm lượng/độ sáng

const int PWM_PIN = 16; void setup() { pinMode(PWM_PIN, OUTPUT); // Chế độ liên tục: 0-360° được ánh xạ đến 0-255 bluetoothRotator.setRotatorMode(ROTATOR_MODE_CONTINUOUS); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; int pwmValue = map((int)angle, 0, 360, 0, 255); analogWrite(PWM_PIN, pwmValue); int percentage = map((int)angle, 0, 360, 0, 100); Serial.print("Volume: "); Serial.print(percentage); Serial.println("%"); }); }

Hiển thị la bàn

// Đọc hướng la bàn từ cảm biến và hiển thị trên rotator float getCompassHeading() { // TODO: Đọc từ HMC5883L, QMC5883L, hoặc BMM150 // Trả về hướng tính bằng độ 0-360 return 0.0; } void loop() { bluetoothServer.loop(); static unsigned long lastUpdate = 0; if (millis() - lastUpdate >= 500) { lastUpdate = millis(); float heading = getCompassHeading(); bluetoothRotator.send(heading); // Cập nhật hiển thị rotator } delay(10); }

Điều khiển Stepper Motor

#include <AccelStepper.h> AccelStepper stepper(AccelStepper::DRIVER, 16, 17); const int STEPS_PER_REV = 200; void setup() { stepper.setMaxSpeed(1000); stepper.setAcceleration(500); bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; // Chuyển đổi góc sang vị trí stepper long targetSteps = (long)(angle / 360.0 * STEPS_PER_REV); stepper.moveTo(targetSteps); Serial.print("Stepper target: "); Serial.print(targetSteps); Serial.println(" steps"); }); } void loop() { bluetoothServer.loop(); stepper.run(); delay(1); }

Kỹ thuật lập trình nâng cao

Snap góc theo từng khoảng

bluetoothRotator.onRotatorAngle([](float angle) { // Snap đến khoảng 15° gần nhất float snapped = round(angle / 15.0) * 15.0; currentAngle = snapped; Serial.print("Snapped angle: "); Serial.print(snapped, 0); Serial.println("°"); // Cập nhật app để hiển thị giá trị đã snap bluetoothRotator.send(snapped); });

Điều khiển dựa trên vùng

bluetoothRotator.onRotatorAngle([](float angle) { currentAngle = angle; // Chia 360° thành các vùng if (angle < 90) { Serial.println("Zone: NORTH"); setColor(0, 0, 255); // Blue } else if (angle < 180) { Serial.println("Zone: EAST"); setColor(0, 255, 0); // Green } else if (angle < 270) { Serial.println("Zone: SOUTH"); setColor(255, 0, 0); // Red } else { Serial.println("Zone: WEST"); setColor(255, 255, 0); // Yellow } });

BLE vs Classic Bluetooth - Nên chọn loại nào?

Tính năngBLE (Esp32BLE_Rotator)Classic Bluetooth (Esp32Bluetooth_Rotator)
Hỗ trợ iOS✓ Có✗ Không
Hỗ trợ Android✓ Có✓ Có
Tiêu thụ năng lượngThấpCao hơn
Phạm vi~30-100m~10-100m
Tốc độ dữ liệuThấp hơnCao hơn
Yêu cầu ghép nốiKhông (tự động kết nối)Có (ghép nối thủ công)
Tốt nhất choChạy pin, đa nền tảngThông lượng cao, chỉ Android

Khắc phục sự cố

Các vấn đề thường gặp

1. Không thể tìm thấy thiết bị trong app

  • Đảm bảo ESP32 được cấp nguồn và sketch đã được tải lên
  • Đố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 đã chọn đúng partition scheme (Huge APP)

2. Rotator không phản hồi

  • Kiểm tra trạng thái kết nối Bluetooth trong app
  • Xác minh kết nối trong Serial Monitor
  • Thử ngắt kết nối và kết nối lại

3. Giá trị góc có vẻ không chính xác

  • Kiểm tra cấu hình chế độ rotator (liên tục vs giới hạn)
  • Xác minh cài đặt góc min/max với getMinAngle()getMaxAngle()
  • Kiểm tra Serial Monitor để xem giá trị góc thực tế nhận được

4. Servo giật ở một số góc nhất định

  • Thêm bộ lọc dead zone nhỏ cho thay đổi góc
  • Sử dụng nguồn điện riêng cho servo
  • Thêm tụ điện qua chân nguồn servo

5. Kết nối rớt thường xuyên

  • Di chuyển gần ESP32 hơn (giảm khoảng cách)
  • Đối với BLE: Kiểm tra nhiễu từ 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 đủ chỗ

  • 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 app code, 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 (cập nhật qua mạng)

Mẹo debug

Thêm debug toàn diện:

void debugRotatorValue(float angle) { Serial.println("=== Rotator Debug ==="); Serial.println("Angle: " + String(angle, 1) + "°"); Serial.println("Mode: " + String(bluetoothRotator.getRotatorMode() == ROTATOR_MODE_CONTINUOUS ? "Continuous" : "Limited")); Serial.println("Range: " + String(bluetoothRotator.getMinAngle(), 0) + "° - " + String(bluetoothRotator.getMaxAngle(), 0) + "°"); Serial.println("====================="); }

Ý tưởng dự án

Điều khiển động cơ

  • Núm vị trí servo
  • Bộ chọn góc stepper motor
  • Mặt số tốc độ động cơ
  • Điều khiển khớp cánh tay robot

Dự án hiển thị

  • Hiển thị hướng la bàn
  • Kim đồng hồ analog
  • Chỉ báo hướng gió
  • Mô phỏng đồng hồ đo dial

Dự án âm thanh

  • Núm điều khiển âm lượng
  • Bộ chọn tần số âm
  • Điều khiển dải equalizer
  • Mặt số điều chỉnh radio

Dự án chiếu sáng

  • Điều khiển vị trí vòng LED
  • Bánh xe màu (bộ chọn hue)
  • Điều khiển hướng đèn spotlight
  • Góc chiếu sáng sân khấu

Tích hợp với App Bluetooth khác

Kết hợp với Bluetooth Slider

Sử dụng rotator cho góc và slider cho tốc độ/cường độ:

float speed = 50; bluetoothSlider.onSliderValue([](int slider1, int slider2) { speed = slider1; }); bluetoothRotator.onRotatorAngle([](float angle) { // Kết hợp góc (hướng) với tốc độ (cường độ) float radians = angle * PI / 180.0; float x = speed * cos(radians); float y = speed * sin(radians); controlMotors(x, y); });

Kết hợp với Bluetooth Table

Hiển thị dữ liệu rotator trong bảng có cấu trúc:

bluetoothRotator.onRotatorAngle([](float angle) { bluetoothTable.sendValueUpdate("Angle", String(angle, 1) + "°"); bluetoothTable.sendValueUpdate("Quadrant", String((int)(angle / 90) + 1)); bluetoothTable.sendValueUpdate("Radians", String(angle * PI / 180.0, 3)); });

Bước tiếp theo

Sau khi thành thạo ví dụ Bluetooth Rotator, hãy thử:

  1. Bluetooth Joystick - Cho điều khiển hướng 2D
  2. Bluetooth Slider - Cho điều khiển giá trị tuyến tính
  3. Bluetooth Analog Gauge - Cho hiển thị phản hồi kiểu đồng hồ đo
  4. Nhiều App Bluetooth - Kết hợp rotator với các điều khiển khác

Hỗ trợ

Để được trợ giúp thêm: