Bluetooth-модуль HC-05: подключение к Arduino и AT-команды

HC-05 добавляет Arduino двустороннюю связь по Bluetooth и работает как master или slave. Выводы, режим настройки, основные AT-команды и пример с DHT11.
Зачем нужен HC-05
Собственной беспроводной связи у плат Arduino нет, а она нужна часто: для управления роботом, передачи показаний метеостанции, обмена данными между устройствами. Bluetooth удобен для связи на небольшом расстоянии: прямая видимость не обязательна, а устойчивость к широкополосным помехам позволяет многим устройствам работать рядом, не мешая друг другу.
Модуль HC-05 обеспечивает двустороннюю связь Arduino с планшетом, ноутбуком или другим Bluetooth-устройством. Он может быть ведущим (master) — сам искать устройства и устанавливать соединение — или ведомым (slave).
Характеристики
| Чип Bluetooth | HC-05 (BC417143) |
| Диапазон частот | 2,4–2,48 ГГц |
| Мощность передачи | 0,25–2,5 мВт |
| Чувствительность | -80 дБм |
| Напряжение питания | 3,3–5 В |
| Потребляемый ток | 50 мА |
| Радиус действия | до 10 м |
| Интерфейс | последовательный порт |
| Режимы | master, slave |
| Рабочая температура | -25…75 °C |
| Габариты | 27 x 13 x 2,2 мм |
Выводы и вход в режим настройки
У модуля шесть выводов с шагом 2,54 мм: VCC, GND, TXD и RXD (UART), STATE (индикатор состояния) и KEY — контакт для входа в режим программирования.

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

В таком случае высокий уровень подают непосредственно на контакт 34 самой платы Bluetooth.

Со стороны Arduino используется программный UART — библиотека SoftwareSerial на выводах 2 (RX) и 3 (TX). На KEY или вывод 34 подают 3,3 В.

Скетч для настройки работает как мост: всё, что приходит из программного порта, выводится в аппаратный, и наоборот. Аппаратный порт открыт на 9600 бод, программный — на 38400: такова скорость модуля в режиме программирования. У отдельных экземпляров она может быть другой, тогда её подбирают.
Основные AT-команды
Команды отправляют из монитора порта Arduino IDE. На большинство из них модуль отвечает OK или FAIL.
- AT — проверка связи.
- AT+VERSION? — версия прошивки.
- AT+ADDR? — адрес модуля в формате NAP:UAP:LAP.
- AT+NAME? и AT+NAME=имя — чтение и смена имени.
- AT+PSWD? и AT+PSWD=код — чтение и смена пин-кода; по умолчанию 1234.
- AT+ROLE? и AT+ROLE=n — режим: 0 — slave, 1 — master, 2 — slave-loop (модуль возвращает все полученные байты).
- AT+UART=скорость,стоп-бит,паритет — параметры порта; скорость 9600, 19200, 38400, 57600 или 115200.
- AT+CMODE=n — 0: подключение только к устройству, заданному командой AT+BIND; 1: к любому устройству; 2: slave-loop.
- AT+INQM=режим,число,таймаут — параметры поиска: обычный запрос или с RSSI, максимум отвечающих устройств, ожидание 1–48 (от 1,28 до 61,44 с).
- AT+INQ — запуск поиска устройств.
- AT+BIND=адрес, AT+LINK=адрес — привязка к устройству и соединение с ним.
- AT+RMSAD=адрес, AT+RMAAD — удаление одного устройства из списка авторизованных и очистка всего списка.
- AT+RESET, AT+ORGL — сброс и установка исходных настроек.
Отдельно стоит команда AT+CLASS. Допустимые значения в документации не описаны, по умолчанию установлен 0. Для режима master менять его не нужно, но в режиме slave модуль с классом 0 не виден устройствам на Android — чтобы он появился в поиске, задают значение 7936. Код доступа к запросу, которым управляет AT+IAC, по умолчанию равен 9e8b33.
Пример: показания DHT11 на телефоне
В примере Arduino периодически опрашивает датчик температуры и влажности DHT11 и отправляет результаты через HC-05 на Android-устройство. Понадобятся плата Arduino, макетная плата, DHT11, модуль HC-05, провода и телефон или планшет на Android.
Линия DATA датчика подключена к выводу 8, модуль — к программному порту на выводах 2 и 3, оба порта работают на 9600 бод. Используются библиотеки DHT и SoftwareSerial. Скетч через заданный интервал (в коде он равен 2000 мс) поочерёдно считывает влажность и температуру и отправляет строки вида «H=значение» и «T=значение» в Bluetooth, дублируя их в монитор порта.
На телефон устанавливают приложение Bluetooth Terminal, соединяются в нём с HC-05 и наблюдают поступающие данные.
Типичные неполадки
- Модуль не отвечает на AT-команды: проверить соединения, наличие 3,3 В на KEY (или выводе 34) и скорость порта — 38400 бод, у некоторых производителей она отличается.
- Android не подключается: убедиться, что питание подано и светодиод модуля быстро мигает; отключить KEY (вывод 34) от 3,3 В; задать роль slave командой AT+ROLE=0.
- Данные не приходят: проверить подключение к Arduino и то, что скорость обмена в скетче совпадает с заданной через AT+UART.