HC-05 vs HM-10 vs BLE 5.0: Chọn Module Bluetooth Nào Cho Dự Án?
So sánh HC-05, HM-10 và module BLE 5.0 theo Bluetooth Classic, BLE GATT, UART, điện thoại, khoảng cách, điện năng và khả năng mở rộng cho Arduino, ESP32 và IoT.
Chia sẻ

Nếu bạn tìm “module Bluetooth cho Arduino”, HC-05, HM-10 và BLE 5.0 gần như chắc chắn sẽ xuất hiện. Nhìn bên ngoài, chúng đều là board nhỏ có VCC, GND, TX và RX. Nhưng chọn nhầm loại có thể khiến bạn mất cả buổi debug vì điện thoại không tìm thấy thiết bị, app dùng sai profile hoặc pin tụt nhanh hơn dự kiến.
Mình sẽ bắt đầu từ khác biệt quan trọng nhất: HC-05 thuộc Bluetooth Classic và thường dùng SPP như một cổng serial không dây; HM-10 dùng Bluetooth Low Energy với GATT; còn “BLE 5.0” là tên của cả một nhóm module, không phải một model duy nhất.
Tóm tắt nhanh

Nhìn ngoài chúng khá giống nhau, nhưng HC-05, HM-10 và BLE 5.x dùng các profile và cách làm việc rất khác.
| Tiêu chí | HC-05 | HM-10 | BLE 5.x |
|---|---|---|---|
| Công nghệ | Bluetooth Classic, thường là SPP | Bluetooth Low Energy, GATT | Bluetooth Low Energy, PHY/tính năng mới hơn |
| Cách lập trình | UART như serial trong suốt | UART + service/characteristic | UART bridge hoặc lập trình SoC |
| Điện thoại | Android thường dễ hơn; iOS không có SPP chung | Android/iOS dùng BLE | Android/iOS dùng BLE |
| Điện năng | Thường cao hơn BLE | Thấp, hợp cảm biến | Phụ thuộc stack, PHY và firmware |
| Phù hợp | Thay dây serial, robot, máy tính | Điều khiển/cảm biến đơn giản | Sản phẩm mới, pin, cần mở rộng |
| Đánh đổi | Cũ và phụ thuộc SPP | Clone không đồng nhất | Khó hơn, không có một chuẩn breakout |
Bluetooth Classic khác BLE ở đâu?
Bluetooth Classic phù hợp với kết nối kiểu stream. Với HC-05, MCU gửi byte vào UART; module lo phần Bluetooth và đầu kia nhìn thấy một đường serial SPP.
BLE không mở serial port mặc định. Dữ liệu được tổ chức bằng GATT: service chứa characteristic, characteristic hỗ trợ Read, Write, Notify hoặc Indicate. Điện thoại phải discover đúng UUID rồi mới trao đổi dữ liệu. Bài thiết kế giao tiếp BLE cho thiết bị IoT đi sâu hơn vào GATT, packet, MTU và reconnect.
Chọn profile trước khi chọn board: SPP dễ như serial, còn BLE cần thiết kế service và characteristic.
HC-05: dễ nhất nếu bạn cần “serial không dây”
HC-05 thường là lựa chọn nhanh cho project đã có UART. Repo HC05 Arduino Library có ví dụ điều khiển module và vào AT command mode bằng chân KEY/command.
HC-05 hợp với robot điều khiển bằng Android, gửi log giữa Arduino và máy tính, hoặc thay một sợi cáp serial trong prototype. Một số module còn hỗ trợ vai trò master/slave, tuỳ firmware.
HC-05 không phải BLE, nên đừng kỳ vọng iPhone dùng nó như BLE peripheral. Ngoài ra, nhiều breakout nhận VCC 5 V nhờ regulator nhưng logic UART vẫn là 3,3 V. Mình luôn kiểm tra đúng breakout, đặc biệt chân RX, trước khi nối vào MCU.
AT command mode cũng khác nhau giữa các clone. Data mode có thể chạy 9600 baud, còn command mode thường dùng tốc độ khác. Hãy gửi AT, xác nhận response và ghi lại baud trước khi viết firmware.

HC-05 hợp để thay một sợi cáp serial, nhưng cần kiểm tra logic UART và khả năng hỗ trợ SPP của thiết bị đầu kia.
HM-10: bước chuyển hợp lý sang BLE
HM-10 thường được bán như module BLE 4.0 dựa trên CC2540/CC2541, nhưng thị trường có nhiều clone mang tên HM-10. Vì vậy firmware/version thực tế quan trọng hơn cái tên trên listing.
MCU vẫn nói chuyện qua UART, nhưng điện thoại không còn được cấp serial port tự động. Bạn cần biết UUID service/characteristic và quyết định characteristic nào dùng cho Write, Notify hay Read.
HM-10 hợp với cảm biến gửi dữ liệu nhỏ, app chạy cả Android/iOS và prototype cần BLE nhưng chưa muốn tự làm RF. Đổi lại, bạn phải viết GATT client; app terminal SPP không thay thế được. Mình luôn đọc AT+VERSION, kiểm tra UUID và test notify trên đúng module trước khi chốt PCB.
BLE 5.0: không phải cứ có chữ “5.0” là nhanh hơn
BLE 5.x có các lựa chọn như 2M PHY và LE Coded PHY. Tài liệu Bluetooth SIG mô tả 2M PHY cho tốc độ symbol cao hơn LE 1M, còn LE Coded PHY hướng tới tầm xa hơn với đánh đổi về tốc độ và airtime.
Một module BLE 5.0 giá rẻ có thể chỉ expose một phần tính năng, hoặc firmware UART bridge không cho chỉnh PHY. Khoảng cách vẫn phụ thuộc công suất phát, độ nhạy thu, antenna, vỏ, nhiễu và hướng đặt board. Đừng ghi “BLE 5.0 = 2 Mbps và 100 m” vào specification nếu chưa đo trên phần cứng cuối.

Ảnh minh họa board BLE 5.x kiểu nRF52; BLE 5.0 là một nhóm tính năng, còn module thực tế phụ thuộc chip, firmware, antenna và vỏ.
Nếu chọn nRF52, Adafruit nRF52 Arduino core là điểm bắt đầu tốt. Nếu chọn ESP32, các example NimBLE của ESP-IDF giúp kiểm tra peripheral/central trước khi làm board riêng.
Chọn theo tình huống
Điều khiển robot bằng Android
Chọn HC-05 nếu app đã dùng SPP và bạn muốn prototype nhanh. Chọn HM-10 nếu app phải chạy cả iPhone và Android, chấp nhận phải làm GATT client.
Cảm biến chạy pin
Mình sẽ bỏ qua HC-05 trước. HM-10 đủ cho telemetry nhỏ; BLE 5.x đáng chọn khi cần kiểm soát tốt hơn hoặc có roadmap dài. Hãy đo advertising, connected idle, notify và reconnect, đừng tin một con số “low power” trên shop.
Sản phẩm mới
Mình nghiêng về module BLE 5.x có datasheet, SDK và firmware rõ ràng. Module breakout chỉ là lớp RF; sản phẩm còn phụ thuộc antenna, nguồn, EMC, bootloader, OTA và GATT.
Thay một sợi cáp UART
HC-05 dễ hiểu nhất, nhưng phải kiểm tra thiết bị đầu kia có hỗ trợ Bluetooth Classic SPP không. Nếu cần iOS, BLE thường ít rủi ro compatibility hơn.
AT command không phải protocol của sản phẩm
AT command chỉ cấu hình module. Mình tách ba lớp:
- UART giữa MCU và module: baud, flow control, mức logic.
- Bluetooth link: SPP hoặc GATT, pairing và connection parameters.
- Application protocol: version, length, sequence/transaction ID.
Với HC-05, lớp Bluetooth giống byte stream nên dễ bị bỏ qua. Với HM-10 và BLE 5.x, UUID, MTU, Notify và subscription state phải được ghi rõ. Packet nhị phân nhỏ có version sẽ dễ nâng cấp hơn JSON không có schema.
Checklist trước khi mua
- Điện thoại mục tiêu là Android, iOS, máy tính hay module khác?
- Bạn cần SPP/serial stream hay GATT?
- Module là peripheral, central hay cả hai?
- Datasheet và firmware version có rõ không?
- UART là 3,3 V hay 5 V tolerant?
- Baud data mode và AT mode khác nhau thế nào?
- Có KEY/EN, STATE/LED và reset không?
- Antenna có cách xa kim loại và mép vỏ không?
- Dòng advertising, idle, connected và burst là bao nhiêu?
- Có cần OTA, bonding, encryption hoặc GATT về sau không?
Kết luận
Nếu bạn thay dây serial trong prototype Android, HC-05 vẫn rất thực dụng. Nếu cần BLE cơ bản cho cả iOS và Android, HM-10 dễ bắt đầu hơn. Nếu đây là sản phẩm mới chạy pin hoặc cần quyền kiểm soát lâu dài, mình chọn module BLE 5.x có chip, SDK và tài liệu rõ ràng.
Không có module nào thắng tuyệt đối. Chọn profile trước, rồi mới chọn board; làm ngược lại rất dễ có một mạch “đã kết nối Bluetooth” nhưng không dùng được với app thật.
Nguồn tham khảo
Chia sẻ
Tiếp tục khám phá
Đọc tiếp
Bài viết liên quan
18 lỗi ESP32 thường gặp và cách khắc phục – Phần 1
Cách mình chẩn đoán 8 lỗi ESP32 thường gặp: nạp code, boot, brownout, serial, GPIO, I2C, SPI và PCB riêng không chạy.
ESP32 Beginner Guide – P1: ESP32 là gì? Chọn board nào?
Phân biệt chip, module và development board ESP32, rồi chọn ESP32-C3, ESP32-S3 hay ESP32 DevKit phù hợp với dự án đầu tiên mà không mua thừa phần cứng.
MEMS mic thực sự là gì? Từ màng rung silicon đến I2S trên ESP32
Tìm hiểu microphone MEMS, khác biệt analog, PDM, I2S, thông số quan trọng và lỗi PCB, nguồn, acoustic port khi dùng với ESP32.