Arduino и Bluetooth модуль HC-05 (ZS-040) — режим AT-команд
Оригинал статьи: Martyn Currey
С момента написания нижеизложенного было выпущено множество новых модулей на платах zs-040. Некоторые из них включают модули с прошивкой версии 3.0-20170601, которые работают немного по-другому. У меня до сих пор нет таких модулей, поэтому я не могу помочь напрямую, но поиск по версии прошивки даст множество результатов в интернете. Хорошее место для начала — Stack Overflow и форум Arduino.
Обновление 20.07.2017
Платы zs-040 теперь используются для многих различных модулей, и у вас может быть не точно такая же плата, как показано ниже. Модули, которые я здесь использую, основаны на Bluetooth-модуле EGBT-045MS и имеют прошивку HC/Wavesen 2.0-20100601. У них также есть вывод EN вместо KEY и маленькая кнопка прямо над выводом EN.
Существуют более новые модули zs-040, использующие настоящие HC SMD-модули с более новой прошивкой и синим светодиодом в правом верхнем углу дочерней SMD-платы.
Также существуют модули на той же плате расширения, но с другой маркировкой, например модули fc-114:
Режим AT-команд
Режим AT-команд позволяет опрашивать Bluetooth-модуль и изменять некоторые настройки: имя, скорость передачи данных, режим работы (slave или master).
При использовании в качестве ведущего устройства AT-команды позволяют подключаться к другим ведомым Bluetooth-устройствам.
Прошивка HC/Wavesen 2.0-20100601 имеет различные режимы AT:
Полный режим на скорости 38400 бод.
Частичный режим на скорости 38400 бод.
Частичный режим на пользовательской скорости.
Частичный мини-режим (ещё меньше команд работает) на пользовательской скорости.
Большинство команд работают в любом режиме AT, но некоторые команды работают только когда пин 34 установлен в HIGH. Это долгое время меня путало. Я теперь считаю, что частичный/мини AT-режим — это ошибка в прошивке, и рекомендую использовать только полный режим AT на скорости 38400 бод.
Для активации AT-режима на модулях HC-05 zs-040 пин 34 должен быть в состоянии HIGH при включении питания. Маленькая кнопка подключает пин 34 к +3,3 В, поэтому мы можем:
подключить пин 34 напрямую к +3,3 В и включить питание, или
удерживать кнопку нажатой при запуске модуля.
Обратите внимание: для полного режима AT-команд пин 34 должен быть в состоянии HIGH всё время, и мы не можем обеспечить это только с помощью кнопки. В AT-режиме с пином 34 не в HIGH (LOW или плавающий) некоторые команды не будут работать, поэтому при использовании кнопки нужно нажимать и удерживать её при отправке некоторых команд.
Вход в AT-режим с помощью кнопки на скорости 38400 бод
Отключите питание модуля.
Нажмите и удерживайте маленькую кнопку.
Удерживая кнопку, подайте питание.
Когда увидите, что светодиод загорелся, отпустите кнопку.
Модуль войдёт в AT-режим со встроенной скоростью 38400 бод. Эту скорость нельзя изменить пользователем.
Этот метод позволяет модулю войти в AT-режим при запуске, но не поддерживает пин 34 в состоянии HIGH, и некоторые команды не будут работать.
Альтернативный вариант — если вы используете AT-режим длительное время, сделайте прямое соединение между пином 34 и +3,3 В. Либо припаяйте провод к пину, либо используйте зажим.
Вход в полный AT-режим через пин 34 на скорости 38400 бод
Отключите питание модуля.
Соедините пин 34 с +3,3 В.
Подайте питание.
Модуль войдёт в AT-режим со встроенной скоростью 38400 бод.
Если поддерживать пин 34 в HIGH — включится «полный» AT-режим, позволяющий использовать все AT-команды.
Если пин 34 вернётся в LOW после включения — включится «мини» AT-режим.
Подключение HC-05 к Arduino
Существует несколько распространённых способов подключения HC-05 к компьютеру: через адаптер UART или с помощью Arduino. Здесь я использую Arduino.
Соберите следующую схему и загрузите скетч ниже.
Arduino 5V → BT VCC
Arduino GND → BT GND
Arduino D8 → BT TX
Arduino D9 → BT RX через делитель напряжения (снижение 5 В до 3,3 В)
Опционально: подключение к пину 34, но пока не подавайте 3,3 В.
Скетч представляет собой базовый «serial in — serial out», который отображает символ «>» в начале строки для выделения введённой пользователем команды.
Я использую программный последовательный порт на пинах Arduino 8 и 9 для связи с HC-05. Это означает, что аппаратный последовательный порт остаётся свободным для связи с монитором порта на компьютере.
// Sketch: basicSerialWithNL_001
//
// Uses hardware serial to talk to the host computer and software serial
// for communication with the Bluetooth module
// Intended for Bluetooth devices that require line end characters "\r\n"
//
// Pins
// Arduino 5V out TO BT VCC
// Arduino GND to BT GND
// Arduino D9 to BT RX through a voltage divider
// Arduino D8 BT TX (no need voltage divider)
//
// When a command is entered in the serial monitor on the computer
// the Arduino will relay it to the bluetooth module and display the result.
//
#include <SoftwareSerial.h>
SoftwareSerial BTserial(8, 9); // RX | TX
const long baudRate = 38400;
char c=' ';
boolean NL = true;
void setup()
{
Serial.begin(9600);
Serial.print("Sketch: "); Serial.println(__FILE__);
Serial.print("Uploaded: "); Serial.println(__DATE__);
Serial.println(" ");
BTserial.begin(baudRate);
Serial.print("BTserial started at "); Serial.println(baudRate);
Serial.println(" ");
}
void loop()
{
// Read from the Bluetooth module and send to the Arduino Serial Monitor
if (BTserial.available())
{
c = BTserial.read();
Serial.write(c);
}
// Read from the Serial Monitor and send to the Bluetooth module
if (Serial.available())
{
c = Serial.read();
BTserial.write(c);
// Echo the user input to the main window.
// The ">" character indicates the user entered text.
if (NL) { Serial.print(">"); NL = false; }
Serial.write(c);
if (c==10) { NL = true; }
}
}
Подключите Arduino к компьютеру. Светодиод на HC-05 должен быстро мигать примерно 5 раз в секунду.
Если используете подключение к пину 34: отключите питание, подключите пин 34 к +3,3 В и снова подайте питание на модуль.
Если используете кнопку: отключите питание, нажмите и удерживайте кнопку, снова подайте питание (удерживая кнопку). Когда увидите, что светодиод загорелся, отпустите кнопку.
Светодиод должен медленно мигать — включение/выключение каждые пару секунд. Это означает AT-режим.
AT-команды
HC-05 ожидает, что команды будут включать символы возврата каретки и новой строки (\r\n). Вы можете добавлять их автоматически в мониторе порта, выбрав «Both NL & CR» в нижней части окна.
Вы также можете вводить их вручную в формате AT\r\n. Если забудете добавить символы возврата каретки и новой строки, HC-05 не ответит.
Примеры команд
AT — простой запрос обратной связи. Вернёт «OK».
AT+VERSION — возвращает версию прошивки.
+VERSION:2.0-20100601
OK
AT+STATE — возвращает текущее состояние модуля.
+STATE:INITIALIZED
OK
AT+ROLE — возможные значения: 0 — Slave, 1 — Master, 2 — Slave-Loop.
Возвращает:
+ROLE:0
OK
Для переключения в режим Master введите AT+ROLE=1, вернёт «OK».
AT+UART — возвращает скорость передачи данных, используемую HC-05 в режиме связи. По умолчанию для моих модулей — 9600.
Возвращает:
+UART:9600,0,0
OK
Для изменения скорости на 38400: AT+UART=38400,0,0. Вернёт «OK».
Windows не поддерживает скорости выше 115200. Если вы случайно установите скорость выше 115200, вы не сможете использовать режим связи. Но вы по-прежнему сможете войти в AT-режим на скорости 38400 с помощью метода 1 или метода 2 и изменить скорость связи на поддерживаемую Windows.
AT+NAME
Запрос имени модуля с помощью AT+NAME? работает только в «полном» AT-режиме. Если AT+NAME? не работает, нужно установить пин 34 в HIGH.
Изменение имени модуля с помощью AT+NAME=новоеимя работает как в «полном», так и в «мини» AT-режиме.
Что вы должны получить:
AT+NAME?
+NAME:HC-05
OK
(или что-то подобное, в зависимости от того, как назван ваш модуль).
Другие команды, требующие HIGH на пине 34: AT+INQ и AT+RNAME. Это не полный список.
Полный список AT-команд
Этот список взят из руководства пользователя Bluetooth-модуля EGBT-045MS, и не все команды могут поддерживаться или работать сразу. Например, AT+NAME? работает только когда пин 34 в HIGH.
Для получения дополнительной информации обратитесь к руководству пользователя HC-05 или руководству пользователя EGBT-046S/EGBT-045MS.