Подготовка к настройке AT-командами
В одном из наших уроков мы знакомились с Bluetooth модулями HC-05 и HC-06, которые широко распространены в среде DIY энтузиастов. Если вы еще не знакомы с bluetooth, то для начала следует почитать именно этот урок: Arduino: bluetooth.
В этой же статье мы поговорим о тонкой настройке Bluetooth-модулей: смены имени устройства, скорости передачи данных, пароля и много другого.
Режим AT-команд
Настройка bluetooth модуля осуществляется в режиме AT-команд. В этом режиме модуль принимает данные через UART интерфейс (RX,TX) и интерпретирует их как команды настройки. Чтобы перевести HC-05 и HC-06 в режим AT-команд необходимо задействовать контакт KEY, который в зависимости от типа печатной платы модуля может быть, а может и не быть.
Есть вариант платы, на которой нет контакта KEY, но есть кнопка. Эта кнопка выполняет ту же функцию. А есть вариант, когда нет ни кнопки ни выведенного контакта (тот же HC-06). В таком случае необходимо будет припаять дополнительный провод к контакту, отмеченному на фото ниже.
Подключение к компьютеру
Для настройки модуля нам необходимо будет подключить его к компьютеру. Сделать этом можно тремя способами.
Способ №1. С помощью отдельного USB-UART моста, например такого: 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; подробности согласования уровней для HC-05 и HC-06 можно найти в нашем уроке.
Обратите внимание, что на этой схеме контакт 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.