Настройка bluetooth-модулей HC-05/06
Подготовка к настройке AT-командами
В одном из наших уроков мы знакомились с Bluetooth-модулями HC-05 и HC-06, которые широко распространены в среде DIY энтузиастов. Если вы еще не знакомы с bluetooth, то для начала следует почитать именно этот урок.
В этой же статье мы поговорим о тонкой настройке Bluetooth-модулей: смены имени устройства, скорости передачи данных, пароля и много другого.
Режим AT-команд
Настройка bluetooth модуля осуществляется в режиме AT-команд. В этом режиме модуль принимает данные через UART интерфейс (RX, TX) и интерпретирует их как команды настройки. Чтобы перевести HC-05 и HC-06 в режим AT-команд необходимо задействовать контакт KEY, который в зависимости от типа печатной платы модуля может быть, а может и не быть.
Есть вариант платы, на которой нет контакта KEY, но есть кнопка. Эта кнопка выполняет ту же функцию. А есть вариант, когда нет ни кнопки ни выведенного контакта (тот же HC-06). В таком случае необходимо будет припаять дополнительный провод к контакту, отмеченному на фото ниже.
Подключение к компьютеру
Для настройки модуля нам необходимо будет подключить его к компьютеру. Сделать это можно тремя способами.
Способ №1. С помощью отдельного USB-UART моста, например, на основе CP2102.
Bluetooth HC-05 |
Gnd |
Vcc |
RX |
TX |
USB-UART CP2102/CP2104 |
Gnd |
5V |
TX |
RX |
Примечание
Микросхемы CP2102 или CP2104 имеют напряжение сигнальных линий 3,3 Вольта, а значит их можно смело подключать напрямую к bluetooth модулю не боясь его повредить.
Способ №2. С помощью платы Arduino, подключенной в режиме USB-UART моста.
На большинстве плат из линейки Ардуино имеется встроенный USB-UART мост, который можно использовать в обход самой Ардуино. Для этого необходимо замкнуть проводом контакты RST и Gnd, а затем подключить bluetooth по следующей схеме.
Предупреждение
Встроенный USB-UART Arduino имеет напряжение сигнальных линий 5 Вольт, а следовательно нам придется преобразовать уровень напряжения для RX линии bluetooth модуля. Это нужно сделать только для RX.
Обратите внимание, что на этой схеме контакт Arduino RX подключается к контакту RX bluetooth-модуля. Хотя в таких случаях всегда делают крест-на-крест — это не ошибка. Дело в том, что мы используем не сам контроллер Atmega328, а именно микросхему USB-UART моста, которая с ним связана. Эта микросхема уже подключена крест-на-крест к микроконтроллеру. То есть, по факту, мы имеем такую цепочку соединений: USB-UART TX -> Arduino RX -> Bluetooth RX. И соединив RST и Gnd, мы просто убираем Arduino из этой цепочки.
Способ №3. С помощью платы Arduino с программным USB-UART ретранслятором.
В этом случае USB-UART мостом будет служить основной микроконтроллер платы Arduino — Atmega328p. Подключим Ардуино к bluetooth по следующей схеме.
На этой схеме мы подключаем TX и RX bluetooth модуля к контактам 10 и 11, так как аппаратный UART на ногах 0 (RX) и 1 (TX) будет занят общением с компьютером.
Затем пишем небольшую программу-ретранслятор (программный USB-UART мост), которая будет осуществлять обмен данными между терминалом на компьютере и Bluetooth модулем. Программа крайне проста:
#include <SoftwareSerial.h>
#include <Time.h>
int gLedPin = 13;
int gRxPin = 10;
int gTxPin = 11;
SoftwareSerial BTSerial(gRxPin, gTxPin);
void setup() {
// 38400 - для метода №1, 9600 - для метода №2
BTSerial.begin(38400);
Serial.begin(9600);
delay(500);
}
void loop() {
if (BTSerial.available()) {
Serial.write(BTSerial.read());
}
if (Serial.available()) {
BTSerial.write(Serial.read());
}
}
В этой программе есть два важных параметра, на которые следует обратить внимание:
Важно
Serial.begin(9600); — это скорость общения Ардуино и компьютера. Именно эту скорость нужно будет выставить в терминале!
BTSerial.begin(38400); — это скорость общения Ардуино и bluetooth модуля. В зависимости от варианта входа в режим AT-команд, она будет разной. Об этом будет сказано ниже.
Загружаем программу на Ардуино — USB-UART мост готов!
Терминал
В данном контексте терминал — это программа для текстового общения с различными устройствами по различным протоколам связи. Нам важен терминал, который работает с аппаратными или программными COM-портами.
В качестве терминала для нашей задачи можно использовать встроенный в Arduino IDE монитор порта — он тоже умеет передавать данные через COM-порт. В настройках следует выбрать передачу символов CR+LF (0x0D+0x10) и нужную скорость. Вот так должен выглядеть экран монитора порта (см. настройки внизу окна).
Также можно использовать любой другой терминал, например, достаточно популярный TeraTerm. Его настройки:
Все дальнейшие манипуляции рационально поделить на две части: для ведомого модуля HC-06 и для ведущего HC-05.
Настройка HC-06
После подачи питания на модуль, светодиод начнет бодро мигать:
Переход в режим AT-команд
Сразу после подачи питания модуль HC-06 автоматически переходит в режим AT-команд. При этом скорость обмена с модулем по-умолчанию будет равна 9600. Заходим в терминал, подключаемся к bluetooth устройству, указываем правильную скорость и вводим команду: AT
В ответ, модуль нам должен сказать: OK
Следующая команда запросит у модуля его версию: AT+VERSION
Получаем что-то вроде такого: VERSION:3.0-20170609
Получилось? Если нет, то проверяем:
Правильная ли выбрана скорость в терминале? Нужно именно 9600.
Если используется программный USB-UART: следует проверить строку:
BTSerial.begin(9600)— должно быть 9600. При этом в терминале должна стоять скорость из строкиSerial.begin(9600).Настройки символа перевода строки: не забываем про CR+LF!
Нажимаем ли после каждой команды Enter? Мало ли…
Примечание
Есть и другой способ перехода в режим AT-команд, он эквивалентен методу для модуля HC-05: соединяем контакт KEY с питанием 3,3 В и подключаем модуль к компьютеру. Светодиод в этом случае начнет мигать медленно — две секунды горит / две секунды не горит.
Полезные команды
У ведомого Bluetooth модуля HC-06 есть множество команд, которые помогут прочитать текущие настройки и изменить их в случае необходимости. Рассмотрим некоторые их них, которые чаще всего бывают нужны в повседневной работе.
1. Уже знакомая нам команда AT+VERSION вернет версию прошивки.
2. Пароль для сопряжения с модулем. Чтобы узнать текущий пароль, пишем: AT+PSWD
Ответ может быть таким: +PIN:"1234"
Для установки нового пароля вводим команду: AT+PSWD:"<пароль>". Пример: AT+PSWD:"4321"
В других версиях прошивки: AT+PIN4321, AT+PSWD=4321
3. Скорость обмена по UART. Для выяснения текущей скорости используем команду: AT+UART
Ответ: +UART:9600,0,0
Если нужно изменить скорость: AT+UART=<скорость>,<стоп бит>,<проверка четности>
Здесь:
<скорость> — скорость в бодах: 1200, 2400, 4800, 9600 (по-умолчанию), 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400.
<стоп бит> = 0 (по-умолчанию) — один бит, 1 — два бита.
<проверка четности> = 0 (по-умолчанию) — без проверки, 1 — проверка нечетности, 2 — проверка четности.
Пример команды: AT+UART=19200,0,0
4. Имя устройства. Узнать текущее имя можно командой: AT+NAME?
Задать новое имя: AT+NAME=<имя>. Например, для смены имени пишем: AT+NAME=alashed
5. Адрес модуля можно узнать командой: AT+ADDR?
Ответ: +ADDR:98D3:41:F95119
6. Сброс всех настроек: AT+ORGL
Важно
Надо отметить, что набор команд и даже их формат зависит от версии прошивки модуля. Например, в старой версии прошивки имя модуля нужно было менять так: AT+NAMErobotclass, а в свежей версии это делается через знак равно: AT+NAME=alashed. То же самое с командой скорости: раньше было AT+BAUD, а теперь AT+UART. Команды на запрос параметров ранее могут передаваться с вопросительным знаком в конце: AT+NAME?. А команда для работы с паролем AT+PSWD вообще имеет три версии.
Настройка HC-05
В отличие от модуля HC-06, при подаче питания на HC-05 он перейдет в рабочий режим и не будет слушать никакие AT-команды. Чтобы изменить режим, нужно проделать некоторые манипуляции.
Переход в режим AT-команд
Чтобы получить доступ к настройкам ведущего модуля HC-05, его необходимо перевести в режим AT-команд. Для входа в этот режим можно воспользоваться двумя методами.
Первый метод:
Отключаем модуль от питания.
Соединяем контакт KEY к питающим контактом +3,3 Вольта.
Включаем модуль.
Контакт KEY можно отсоединить от питания.
В этом случае скорость обмена с модулем устанавливается в 38400 бод.
После успешного перехода в режим AT-команд светодиод на модуле начнет мигать раз в две секунды.
Второй метод:
Включаем модуль.
Соединяем контакт KEY к питающим контактом +3,3 Вольта.
Теперь скорость обмена с модулем будет равна стандартной, установленной настройками для рабочего режима. По-умолчанию 9600 бод.
Проверка соединения HC
Проверим командный режим HC-05 так же как и в случае ведомого модуля:
>>: AT
<<: OK
>>: AT+VERSION?
<<: +VERSION:2.0-20100601
Настройка HC-05 как ведомого (slave)
Для превращения модуля в ведомого потребуется выполнить несколько команд:
Сброс предыдущих настроек:
AT+ORGLСброс спаренных устройств:
AT+RMAADУстановка нового пароля:
AT+PSWD:"1234"Включение режима ведомого:
AT+ROLE=0
Дополнительно можно узнать адрес устройства (понадобится для настройки спаренного модуля): AT+ADDR?
В ответ получим сам адрес: +ADDR:98D3:41:F95119
Готово!
Настройка HC-05 как ведущего (master)
С завода модуль идет ведомым, и чтобы сделать его ведущим потребуется выполнить следующие команды.
Сброс предыдущих настроек:
AT+ORGLСброс спаренных устройств:
AT+RMAADВключение режима ведущего:
AT+ROLE=1Рестарт после смены роли:
AT+RESET
Соединение ведущего (master) с ведомым (slave)
Если мы хотим связать ведомого и ведущего, пишем такие команды:
1. Если мы еще не знаем адрес модуля, с которым хотим связаться, можем запросить у ведущего поиск в эфире доступных модулей: AT+INQ
В ответ получим список доступных устройств:
+INQ:14:3:5A694,1F00,7FFF
+INQ:23:4D:EB3193,0,7FFF
2. Установка пароля ведомого модуля, к которому будем подключаться: AT+PSWD:"1234"
3. Указываем парное устройство: AT+PAIR=<адрес>,<таймаут> (пример: AT+PAIR=98D3,41,F95119,5)
4. Связываем с конкретным адресом: AT+BIND=<адрес> (пример: AT+BIND=98D3,41,F95119)
5. Запрещаем соединяться с другими адресами: AT+CMODE=0
Готово! Теперь модуль связан с ведомым, и при каждом включении будет пытаться с ним соединиться.
Совет
Подробный список AT-команд модуля HC-05 можно найти в официальной документации к чипу.