Сравнение модулей HC-05 и HC-06 Печать
Добавил(а) microsin   

Если вы профессионально разрабатываете встраиваемые системы или увлекаетесь DIY электроникой, то скорее всего сталкивались с Bluetooth-модулями HC-05 и HC-06. Эти маленькие платы были идеальным выбором для беспроводной последовательной связи в течение многих лет, и не зря - они дешевы, надежны и работают прямо из коробки с большинством микроконтроллеров (MCU).

Но вот в чем дело: выбирать между HC-06 и HC-05 не всегда просто. Я видел, как множество инженеров (включая меня) хватали сразу то, что было доступно, чтобы только позже понять, что им нужны функции, которых не было в модуле. Итак, давайте разберем, что именно отличает эти два модуля и когда вы должны использовать каждый из них.

Примечание: здесь приведен перевод статьи [1].

[HC-05 vs HC-06]

Оба модуля HC-05 и HC-06 основаны на одном и том же чипе CSR BC417 Bluetooth, и используют радиообмен данными Bluetooth 2.0+EDR или Bluetooth SPP (внимание: если модули действительно оригинальные, а не поддельные. Клоны часто используют другие чипы, и Bluetooth BLE вместо Bluetooth Classic SPP). HC-05 и HC-06 оба поддерживают Serial Port Protocol (SPP), смысл которого - работать так же, как будто это просто кабель для последовательной передачи данных, организованный по радио. Вы подключаете модуль HC-05 и HC-06 к Arduino или какому-нибудь другому MCU через UART, запускаете обнаружение модуля на смартфоне или компьютере (pair), и передаете данные по воздуху.

Ключевое отличие HC-05 и HC-06 заключается в наборе функциональных возможностей.

HC-05 может работать либо как главное устройство (master, такое как смартфон или компьютер) или как подчиненное устройство (slave). Здесь master и slave обозначает, какая сторона инициирует подключение. Master действует в радиосети как клиент, сканирует эфир и инициирует подключение к устройству slave. Устройство slave действует в радиосети как сервер, постоянно посылая в эфир оповещения о своем присутствии и принимает запросы на подключение от master.

HC-06, в отличие от HC-05, фиксировано исполняет роль только slave-устройства — он сидит и ждет, пока к нему не подключится master. Это единственное, но важное отличие этих модулей, которое определяет различия в их использовании.

В таблице приведено сравнение технических параметров модулей HC-05 и HC-06:

Спецификация HC-05 HC-06
Версия Bluetooth Classic SPP(*) 2.0+EDR 2.0+EDR
Роль Master/Slave (конфигурируется) Только Slave
Напряжение питания 3.6V – 6V 3.6V – 6V
Потребляемый ток ~30 .. 40 mA ~30 .. 40 mA
Дальность связи До 10 метров До 10 метров
Интерфейс UART (Serial) UART (Serial)
Скорость передачи по умолчанию 38400 bps (AT mode), 9600 bps (data mode) 9600 bps
Пароль доступа по умолчанию 1234 или 0000 1234
Количество выводов 6 выводов (STATE, RX, TX, GND, VCC, EN) 4 вывода (RX, TX, GND, VCC)
Поддержка команд AT Расширенная (40+ команд) Ограниченная (~6 команд)
Базовый чип CSR BC417(*) CSR BC417(*)

Примечание (*): верно только для официальных модулей. Клоны/подделки более дешевые, обнаруживаются в под теми же именами HC-05/HC-06, но обычно используют протокол BLE вместо Classic SPP. Поведение этих модулей для инициирования подключения также значительно отличается от Classic SPP.

Оба модуля обычно продаются в составе базовых материнских плат EGBT-045MS (HC-05) и EGBT-046S (HC-06), на которых собрана необходимая обвязка - стабилизатор напряжения и преобразование уровней логики.

[HC-05: назначение выводов, функции]

Модуль HC-05 обладает более богатыми функциональными возможностями. У него наружу выводятся 6 выводов, а у HC-06 их только 4. Дополнительные 2 вывода дают возможность переключаться между режимами master и slave, что может использоваться для некоторых проектов.

Цоколевка коннектора HC-05 и функции выводов:

№ Имя Функция
1 STATE Индикация состояния соединения (HIGH, когда соединение активно)
2 RXD Вход данных (подключается к MCU TX)
3 TXD Выход данных (подключается к MCU RX)
4 GND Ground (земля, общий провод)
5 VCC Напряжение питания (3.6V – 6V)
6 EN/KEY Вывод разрешения активации режима команд AT

Вывод STATE полезен в случае, когда ваш код должен знать, активно ли подключение Bluetooth (можно ли передавать и принимать данные). Например, если соединение неактивно, то управляющий MCU может войти в режим сна с пониженным энергопотреблением, а переход STATE в состояние HIGH может выводить MCU из этого режима.

Вывод EN (Enable) или KEY это то, что позволит вам перевести модуль в режим управления AT-командами. Если в момент включения питания модуля на этом выводе удерживался уровень HIGH, то модуль активирует режим AT-команд, которыми вы можете конфигурировать такие параметры, как имя устройства, скорость UART, роль устройства master/slave (для HC-05), и другие параметры.

Рабочие режимы UART-интерфейса модуля HC-05:

Data Mode. Этот режим активируется по умолчанию, в нем модуль ведет себя как прозрачный мост для последовательной передачи/приема данных — любые данные, переданные вами на вывод RXD, будут переданы через Bluetooth, и любые данные, принятые через Bluetooth, появятся на выводе TXD модуля. Светодиод LED часто мигает (с частотой около 5 Гц), когда модуль ожидает соединение, и мигает с меньшей частотой (примерно 2 раза в секунду), когда соединение активно.

AT Command Mode. В этом режиме модуль принимает AT-команды, которые позволяют конфигурировать параметры модуля.

[HC-06: назначение выводов, функции]

Работать с модулем HC-06 намного проще. У него только 6 вывода, и он поддерживает только режим slave. Обычно это именно то, что необходимо для быстрой организации связи между хостом (смартфон, компьютер) и управляемым устройством.

Цоколевка коннектора HC-06 и функция выводов:

№ Имя Функция
1 RXD Вход данных (подключается к MCU TX)
2 TXD Выход данных (подключается к MCU RX)
3 GND Ground (земля, общий провод)
5 VCC Напряжение питания (3.6V – 6V)

Обратите внимание, что здесь нет выводов STATE или EN. HC-06 автоматически входит в режим AT после включения питания, когда не активно Bluetooth соединение с хостом. Это может показаться удобной фичей, но есть подвох - вы должны успеть отправить AT-команду в течение 1 секунды после начала ввода, иначе модуль команду не распознает. Это означает, что вы не сможете вводить команды интерактивно в последовательном терминале; необходимо использовать программное обеспечение, которое отправляет всю команду сразу.

Как только хост установил Bluetooth-соединение, HC-06 сразу переходит в режим данных (data mode), и игнорирует любые AT-команды.

Еще одна причуда: HC-06 AT команды не используют\r\n в конце. Фактически, отправка символа новой строки приведет к сбою команды. Это вызывает много людей, которые привыкли к HC-05 или другим устройствам на основе AT-команд.

Еще одно странное отличие HC-06: AT-команды HC-06 не используют в конце символы \r\n (символ перевода каретки CR и и символ перевода строки LF). Фактически если послать в конце AT-команды символ перевода строки, то это приведет к ошибке, и команда не выполнится. Это может быть неожиданностью для тех, кто привык к поведению традиционного интерфейса команд HC-05 или других устройств, использующих AT-команды.

[Сравнение AT-команд HC-06 и HC-05]

Наборы AT-команд - это то, где эти модули действительно различаются. Вот сравнение наиболее часто используемых команд:

Функция Команда HC-05 Команда HC-06 Примечания
Проверка AT AT Оба модуля возвратят "OK"
Получить версию firmware AT+VERSION? AT+VERSION Синтаксис отличается
Установка имени устройства AT+NAME=NewName AT+NAMENewName HC-06 не использует симол "="
Установка пароля/PIN AT+PSWD=1234 AT+PIN1234 Команда установки параметра отличается
Установка скорости (baud rate) AT+UART=9600,0,0 AT+BAUD4 HC-06 использует нумерованные пресеты (см. таблицу ниже)
Установка роли (Master/Slave) AT+ROLE=0 (Slave), AT+ROLE=1 (Master) Недоступно HC-06 работает только в режиме slave
Получение адреса Bluetooth AT+ADDR? Недоступно Эта команда работает только для HC-05
Откат в заводские настройки (Factory reset) AT+ORGL Недоступно Эта команда работает только для HC-05

HC-05 поддерживает более 40 AT-команд, включая расширенные функции, такие как режим запроса (inquiry mode, сканирование близлежащих устройств), привязка к конкретным адресам устройств (binding) и настройка шифрования. HC-06 ограничивается набором базовых команд: имя устройства, пароль доступа и скорость передачи данных.

HC-06 использует другой формат для установки скорости UART (baud rate), так называемые нумерованные пресеты:

Команда Baud Rate
AT+BAUD1 1200 bps
AT+BAUD2 2400 bps
AT+BAUD3 4800 bps
AT+BAUD4 9600 bps (по умолчанию)
AT+BAUD5 19200 bps
AT+BAUD6 38400 bps
AT+BAUD7 57600 bps
AT+BAUD8 115200 bps

[Выбор между HC-05 и HC-06]

Выбор между HC-06 и HC-05 сводится к тому, что требует ваш проект.

Используйте HC-06, когда:

• Нужен простой линк смартфон-микроконтроллер. Например, если с помощью телефона нужно управлять Arduino — машинка, управляемая через Bluetooth, система умного дома, мониторинг датчиков — здесь HC-06 отлично подойдет. Ваш телефон действует как master, а HC-06 как slave.
• Ограничения по бюджету. Обычно HC-06 один или два доллара, чем HC-05. Для одиночного проекта это не критично, то если нужно сделать 50 или более устройств, то этот фактор становится значимым.
• Вы новичок в использовании модулей Bluetooth. У HC-06 упрощенный набор AT-команд, так что меньше шансов в чем-либо ошибиться при конфигурировании. Иногда можно даже обойтись совсем без конфигурирования.
• Функционал master не требуется. Большинство DIY-проектов попадает в эту категорию. Если другая сторона соединения (смартфон, компьютер, другой модуль HC-05) инициирует соединение, то режим slave это все что вам нужно.

Используйте HC-05, когда:

• Обмен данными Arduino-Arduino. Это классический случай использования. Вы настраиваете один модуль HC-05 как master, и один как slave, и при включении питания они автоматически устанавливают связь друг с другом(*). Модуль HC-06 в этом сценарии может использоваться как slave, однако вам все еще потребуется HC-05 (или эквивалентное устройство) для роли master.
• Вам нужно программно инициировать соединение. Может быть, что ваш проект нуждается в сканировании наличия соседних устройств, чтобы подключиться к определенному адресу Bluetooth, или необходимо по команде отключаться и подключаться. Для этого может подойти только HC-05.
• Нужен STATE. Программа должна знать, когда соединение активно, чтобы отправлять/принимать данные только на активном соединении, или управлять режимами пониженного энергопотребления, светодиодами индицировать состояние устройства (status LED), или реализовать какую-то логику условного поведения программы.
• Вы строите более сложную беспроводную сеть. Продвинутые AT-команды HC-05 позволяют сконфигурировать таймауты соединения, режимы безопасности, фильтрацию устройств.

Примечание(*): для неофициальных модулей такое простое соединение скорее всего не сработает.

[Практические замечания по использованию обоих модулей]

Оба модуля используют логические уровни 3.3V, но некоторые платы разработчика, такие как Arduino, используют источник питания 5V и соответствующие уровни логики. Это важно учитывать, когда вы подключаетесь, например, к микроконтроллеру платы Arduino Uno.

Для соединения TX (выход модуля, вход MCU): это сигнал можно подключать напрямую. Большинство 5V MCU нормально распознают уровень 3.3V как логический уровень HIGH.

Для соединения RX (выход MCU, вход модуля): понадобится делитель напряжения. Выводы HC-05 и HC-06 сигнала RX не допускают уровни логики 5V (not 5V tolerant). Простое решение - поставить резистор 1 кОм последовательно между Arduino TX и RX модуля, с резистором 2 кОм между RX модуля и землей:

5Vlogic to 3Vlogic

Модуль не отвечает на AT-команды: для HC-05, убедитесь, что на выводе KEY установлен уровень HIGH перед включением его питания, и используется скорость 38400 при передаче строки команды, с окончанием CR+LF в конце. Для HC-06 убедитесь, что в конце команды нет символов CRLF, и вы успеваете быстро отправить команду как одиночную строку (не вводите каждый символ команды по одному).

Соединение (pairing) успешно устанавливается, но данные не передаются: проверьте сигналы RX/TX и настройки скорости на обоих сторонах соединения. Самая частая ошибка - перепутаны друг с другом сигналы: TX соединен с TX и RX соединен с RX, вместо их перекрестного соединения.

Случайные мусорные символы в принятых данных: несовпадение скорости. Убедитесь в том, что ваш код MCU, последовательный терминал и модуль Bluetooth имеют совместимые настройки baud rate.

HC-05 не хочет входить в режим master: некоторые модули HC-05 поставляются с firmware, которое не поддерживает режим master, несмотря на заявление маркетинга. Попробуйте выполнить команду AT+ROLE=1, и если она возвратит ERROR, то вероятно это проблема firmware.

Постоянно разрывается соединение: проверьте качество источника питания. Эти модули потребляют около 30 .. 40 мА, и шумные или маломощные источники питания могут вызвать подобную нестабильность.

Не устанавливается соединение с iPhone. В обоих модулях используется Bluetooth Classic SPP (2.0+EDR), что iOS не допускает для аксессуаров, не сертифицированных по стандарту MFi. Однако это прекрасно работает с телефонами Android, операционными системами Windows, Linux и Mac. Для совместимости с iOS вам понадобится модуль Bluetooth Low Energy (BLE), такой как HM-10 или ESP32.

Многие поддельные модули HC-05 и HC-06 используют BLE вместо SPP, возможно из соображений совместимости с iOS.

[Ссылки]

1. HC-06 vs HC-05: The Complete Bluetooth Module Comparison Guide for Your Projects site:pcbsync.com.
2. Обзор модулей Bluetooth.
3. 261020Bluetooth-modules-datasheets.zip - даташиты на модули Bluetooth.