Настройка bluetooth-модулей HC-05/06

Настройка 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). В таком случае необходимо будет припаять дополнительный провод к контакту, отмеченному на фото ниже.

Режим AT-команд Bluetooth HC-05

Подключение к компьютеру

Для настройки модуля нам необходимо будет подключить его к компьютеру. Сделать это можно тремя способами.

Способ №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 по следующей схеме.

Настройка bluetooth HC-05 при помощи Arduino (аппаратный мост)

Предупреждение

Встроенный 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 по следующей схеме.

Настройка bluetooth HC-05 при помощи Arduino (программный мост)

На этой схеме мы подключаем 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) и нужную скорость. Вот так должен выглядеть экран монитора порта (см. настройки внизу окна).

Монитор порта Arduino IDE bluetooth

Также можно использовать любой другой терминал, например, достаточно популярный TeraTerm. Его настройки:

Настройка TeraTerm Настройка TeraTerm

Все дальнейшие манипуляции рационально поделить на две части: для ведомого модуля HC-06 и для ведущего HC-05.

Настройка HC-06

После подачи питания на модуль, светодиод начнет бодро мигать:

Работа с Bluetooth HC-05. Индикатор.

Переход в режим AT-команд

Сразу после подачи питания модуль HC-06 автоматически переходит в режим AT-команд. При этом скорость обмена с модулем по-умолчанию будет равна 9600. Заходим в терминал, подключаемся к bluetooth устройству, указываем правильную скорость и вводим команду: AT

В ответ, модуль нам должен сказать: OK

Следующая команда запросит у модуля его версию: AT+VERSION

Получаем что-то вроде такого: VERSION:3.0-20170609

Получилось? Если нет, то проверяем:

  1. Правильная ли выбрана скорость в терминале? Нужно именно 9600.

  2. Если используется программный USB-UART: следует проверить строку: BTSerial.begin(9600) — должно быть 9600. При этом в терминале должна стоять скорость из строки Serial.begin(9600).

  3. Настройки символа перевода строки: не забываем про CR+LF!

  4. Нажимаем ли после каждой команды 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-команд. Для входа в этот режим можно воспользоваться двумя методами.

Первый метод:

  1. Отключаем модуль от питания.

  2. Соединяем контакт KEY к питающим контактом +3,3 Вольта.

  3. Включаем модуль.

  4. Контакт KEY можно отсоединить от питания.

В этом случае скорость обмена с модулем устанавливается в 38400 бод.

После успешного перехода в режим AT-команд светодиод на модуле начнет мигать раз в две секунды.

Работа с Bluetooth HC-05. Индикатор AT-режима.

Второй метод:

  1. Включаем модуль.

  2. Соединяем контакт 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)

С завода модуль идет ведомым, и чтобы сделать его ведущим потребуется выполнить следующие команды.

  1. Сброс предыдущих настроек: AT+ORGL

  2. Сброс спаренных устройств: AT+RMAAD

  3. Включение режима ведущего: AT+ROLE=1

  4. Рестарт после смены роли: 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 можно найти в официальной документации к чипу.