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 бод.

HC-05 zs-040

Для активации AT-режима на модулях HC-05 zs-040 пин 34 должен быть в состоянии HIGH при включении питания. Маленькая кнопка подключает пин 34 к +3,3 В, поэтому мы можем:

  • подключить пин 34 напрямую к +3,3 В и включить питание, или

  • удерживать кнопку нажатой при запуске модуля.

Обратите внимание: для полного режима AT-команд пин 34 должен быть в состоянии HIGH всё время, и мы не можем обеспечить это только с помощью кнопки. В AT-режиме с пином 34 не в HIGH (LOW или плавающий) некоторые команды не будут работать, поэтому при использовании кнопки нужно нажимать и удерживать её при отправке некоторых команд.

Вход в AT-режим с помощью кнопки на скорости 38400 бод

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

  2. Нажмите и удерживайте маленькую кнопку.

  3. Удерживая кнопку, подайте питание.

  4. Когда увидите, что светодиод загорелся, отпустите кнопку.

Модуль войдёт в AT-режим со встроенной скоростью 38400 бод. Эту скорость нельзя изменить пользователем.

Этот метод позволяет модулю войти в AT-режим при запуске, но не поддерживает пин 34 в состоянии HIGH, и некоторые команды не будут работать.

Альтернативный вариант — если вы используете AT-режим длительное время, сделайте прямое соединение между пином 34 и +3,3 В. Либо припаяйте провод к пину, либо используйте зажим.

Зажим на пине 34 HC-05

Вход в полный AT-режим через пин 34 на скорости 38400 бод

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

  2. Соедините пин 34 с +3,3 В.

  3. Подайте питание.

Модуль войдёт в AT-режим со встроенной скоростью 38400 бод.

Если поддерживать пин 34 в HIGH — включится «полный» AT-режим, позволяющий использовать все AT-команды.

Если пин 34 вернётся в LOW после включения — включится «мини» AT-режим.

Подключение HC-05 к Arduino

Существует несколько распространённых способов подключения HC-05 к компьютеру: через адаптер UART или с помощью Arduino. Здесь я использую Arduino.

Соберите следующую схему и загрузите скетч ниже.

Схема подключения HC-05 в AT-режиме HC-05 AT-режим на макетной плате
  • 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» в нижней части окна.

Настройка Both NL & CR

Вы также можете вводить их вручную в формате AT\r\n. Если забудете добавить символы возврата каретки и новой строки, HC-05 не ответит.

Примеры команд

AT — простой запрос обратной связи. Вернёт «OK».

AT команда - ответ OK

AT+VERSION — возвращает версию прошивки.

+VERSION:2.0-20100601
OK
AT+VERSION

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-команд

Полный список AT-команд

Этот список взят из руководства пользователя Bluetooth-модуля EGBT-045MS, и не все команды могут поддерживаться или работать сразу. Например, AT+NAME? работает только когда пин 34 в HIGH.

Для получения дополнительной информации обратитесь к руководству пользователя HC-05 или руководству пользователя EGBT-046S/EGBT-045MS.

Далее: Соединение двух Bluetooth-модулей