Arduino и Bluetooth модуль HC-05 в режиме ведомого (Slave)

Оригинал статьи: Martyn Currey

Arduino и HC-05 в режиме связи

Обновлено 18.07.2015.

Обновлено 01.12.2016.

Существуют более новые модули HC-06 и HC-05 на платах zs-040. Эти новые модули имеют светодиод (обычно синий) в верхней левой части дочерней платы Bluetooth и имеют другую прошивку.

Ниже представлена версия zs-040 популярного модуля HC-05. HC-05 основан на Bluetooth-модуле EGBT-045MS. Он может работать как ведомое (slave) или ведущее (master) устройство. В режиме ведомого он может только принимать подключения. В режиме ведущего он может инициировать подключение.

HC-05 zs-040

Bluetooth-модули EGBT-045MS (маленькая дочерняя плата) работают от 3,3 В. Плата расширения HC-05 имеет стабилизатор напряжения на 3,3 В, который позволяет подавать входное напряжение от 3,6 В до 6 В, но выводы TX и RX по-прежнему работают на 3,3 В. Это значит, что вы можете использовать 5 В с Arduino для питания платы, но нельзя подключать Arduino напрямую к выводу RX модуля HC-05.

Для вывода RX модуля HC-05 (вход данных) необходимо преобразовать 5 В Arduino в 3,3 В. Простой способ сделать это — использовать делитель напряжения из пары резисторов. В моём случае я использую резистор на 1 кОм и резистор на 2 кОм.

Краткое пояснение по делителю напряжения: 1 кОм + 2 кОм = 3 кОм. 1 кОм — это треть от 3 кОм, поэтому напряжение снижается на треть.

Одна треть от 5 В — это 1,66 В, и 5 - 1,66 = 3,33 В, что нам и нужно. Если поставить резисторы наоборот, напряжение снизится на 2/3.

Для получения дополнительной информации о делителях напряжения посмотрите руководство Sparkfun.

Поскольку Arduino принимает 3,3 В как HIGH, вы можете подключить вывод TX модуля HC-05 (выход данных) напрямую к выводу RX Arduino (5 В Arduino принимает напряжение 3 В и выше как HIGH).

Светодиод статуса HC-05 zs-040

Встроенный светодиод показывает текущее состояние модуля:

  • Быстрое мигание (примерно 5 раз в секунду) — модуль включён и ожидает подключения или сопряжения.

  • Одиночная короткая вспышка каждые 2 секунды — модуль только что выполнил сопряжение с другим устройством.

  • Двойная короткая вспышка каждые 2 секунды — подключён к другому устройству.

HC-05 запоминает устройства, с которыми было выполнено сопряжение, и после перезагрузки повторное сопряжение не требуется. Это означает, что вы можете перейти от:

  • быстрого мигания (около 5 раз в секунду) — модуль включён и ожидает подключения, к

  • двойной короткой вспышке каждые 2 секунды — подключён к другому устройству, напрямую.

Подключение

  • HC-05 Vcc → 5V (можно от вывода +5V Arduino)

  • HC-05 GND → общий GND

  • HC-05 RX → Arduino пин D3 (TX) через делитель напряжения

  • HC-05 TX → Arduino пин D2 (RX) подключается напрямую

Схема подключения HC-05

Не забудьте соединить GND вместе.

HC-05 на макетной плате

Подайте питание на Arduino, и светодиод на HC-05 должен быстро мигать, примерно 5 раз в секунду. Это означает, что модуль включён, но не сопряжён и не подключён. Пока всё хорошо.

Настройки по умолчанию

Настройки по умолчанию для новых модулей:

  • Имя: HC-05

  • Пароль: 1234

  • Скорость передачи данных в режиме связи: 9600*

  • Скорость передачи данных в режиме AT-команд: 38400

*Не все модули имеют одинаковые настройки по умолчанию. Если режим связи не работает на скорости 9600, попробуйте другие скорости. 38400 тоже часто встречается.

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

Добавлено 12.07.2015. У меня есть новые модули, у которых скорость по умолчанию 38400 как для AT-режима, так и для режима связи. Если 9600 не работает — попробуйте 38400.

Сопряжение с Android-устройством

В моём случае Android-устройство — это 7-дюймовый планшет.

Прежде чем установить соединение между Bluetooth-устройствами, необходимо выполнить сопряжение. Итак, при включённых Arduino и HC-05 на Android-устройстве:

  • включите Bluetooth,

  • выполните поиск устройств — HC-05 должен появиться в списке,

  • выполните сопряжение с HC-05 и введите пароль «1234» (при условии, что используется пароль по умолчанию).

После сопряжения мигающий светодиод на HC-05 изменится на одиночную короткую вспышку каждые 2 секунды.

Сопряжение с Bluetooth

Подключение через Android-приложение

Подключение Android-устройства к HC-05 создаёт канал последовательной связи, очень похожий на монитор порта в Arduino IDE. Это значит, что нам нужна Bluetooth-версия монитора порта. Я использую приложение Bluetooth Terminal.

~~Скачайте его из Google Play. Загрузите, установите и откройте Bluetooth Terminal.~~

~~- откройте меню,~~ ~~- выберите «Connect a device – Insecure»,~~ ~~- нажмите «HC-05», и вверху экрана должно появиться «connected: HC-05».~~

Приложение, которое я использовал, больше недоступно в Play Store. Однако быстрый поиск «bluetooth terminal» выдаст множество альтернатив.

После подключения светодиод на HC-05 будет быстро мигать дважды каждые 2 секунды.

Bluetooth Terminal

Итак, подключение работает, теперь попробуем отправить данные с Arduino на Android-устройство.

Скетч 01. Отправка данных на подключённое Bluetooth-устройство

Следующий скетч отправляет «Bluetooth Test» в монитор порта и через программный последовательный порт раз в секунду.

Загрузите следующий скетч:

// Basic Bluetooth sketch HC-05_01
// Sends "Bluetooth Test" to the serial monitor and the software serial once every second.
//
// Connect the HC-05 module and data over Bluetooth
//
// The HC-05 defaults to commincation mode when first powered on.
// The default baud rate for communication is 9600

#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // RX | TX
// Connect the HC-05 TX to Arduino pin 2 RX.
// Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider.
//

char c = ' ';

void setup()
{
    Serial.begin(9600);
    Serial.println("Enter AT commands:");

    // HC-06 default serial speed for communcation mode is 9600
    BTserial.begin(9600);
}

void loop()
{
    BTserial.println("Bluetooth Test");
    Serial.println("Bluetooth Test");
    delay(1000);
}

Подключите HC-05 к Android-устройству и откройте Bluetooth Terminal. Откройте монитор порта, и вы должны увидеть «Bluetooth Test», прокручивающийся вверх по экрану в обоих окнах.

Bluetooth Test на Android Serial Monitor - Bluetooth Test

Скетч 02. Двусторонняя связь с подключённым Bluetooth-устройством

Теперь попробуем двустороннюю связь с Android-устройством. Мы по-прежнему используем приложение Bluetooth Terminal, но на этот раз будем пробовать отправлять сообщения на Arduino.

// Basic Bluetooth sketch HC-05_02
// Connect the HC-05 module and communicate using the serial monitor
//
// The HC-05 defaults to commincation mode when first powered on.
// The default baud rate for communication mode is 9600
//

#include <SoftwareSerial.h>
SoftwareSerial BTserial(2, 3); // RX | TX
// Connect the HC-05 TX to Arduino pin 2 RX.
// Connect the HC-05 RX to Arduino pin 3 TX through a voltage divider.
//

char c = ' ';

void setup()
{
    Serial.begin(9600);
    Serial.println("Arduino is ready");

    // HC-05 default serial speed for commincation mode is 9600
    BTserial.begin(9600);
}

void loop()
{

    // Keep reading from HC-05 and send to Arduino Serial Monitor
    if (BTserial.available())
    {
        c = BTserial.read();
        Serial.write(c);
    }

    // Keep reading from Arduino Serial Monitor and send to HC-05
    if (Serial.available())
    {
        c = Serial.read();
        BTserial.write(c);
    }

}

Загрузите скетч.

Откройте монитор порта.

Откройте Bluetooth Terminal и подключитесь к HC-05.

Теперь всё, что вы вводите в мониторе порта, должно появляться в Bluetooth Terminal, и всё, что вводится в Bluetooth Terminal, должно появляться в мониторе порта.

Serial Monitor - двусторонняя связь Bluetooth Terminal - двусторонняя связь

Приведённые выше примеры используют Bluetooth-модуль HC-05 в режиме ведомого, и HC-06 работает точно так же — те же скетчи можно использовать.

Следующий шаг — включить и выключить светодиод с помощью Android-приложения. В примере со светодиодом использовался HC-06, но HC-05 тоже подходит.