Соединение 2 Arduino через Bluetooth с помощью HC-05 и HC-06: Pair, Bind и Link
Оригинал статьи: Martyn Currey
В предыдущей статье я показал, как HC-05 может автоматически подключаться к другим Bluetooth-устройствам, установив HC-05 на сопряжение с любым устройством через CMODE=1. Это быстро и просто, но не даёт контроля над тем, к какому устройству подключается HC-05.
В этой статье я покажу, как настроить HC-05 на постоянное подключение к одному и тому же HC-06 (или HC-05 в режиме Slave). Для этого мы используем PAIR, BIND и LINK.
Примечание
Существуют более новые модули с прошивкой 3.0-20170601. Данное руководство не работает для этих модулей (AT+INQ выдаёт ошибку). У меня нет новых модулей, и я не могу найти надёжного поставщика.
Если вы ещё не купили Bluetooth Classic модули, рекомендую покупать оригинальные HC. Они немного дороже, но хорошо поддерживаются и имеют полную документацию. Оригинальные HC-модули имеют логотип HC на основной BT-плате, а текущие платы имеют синий светодиод слева вверху.
Я использую две отдельные Arduino IDE: версию 1.6.3 (установленную) и версию 1.0.5 (запускаемую из папки, портативная версия). Это позволяет использовать две IDE одновременно, каждая подключена к своему Arduino. Также это даёт два монитора порта — по одному на каждый Arduino.
Используемые модули — версии zs-040 для HC-05 и HC-06. HC-05 имеет прошивку Wavesen/HC 2.0-20100601, и любой модуль с той же прошивкой будет работать аналогично.
HC-05 имеет два режима AT-команд, которые я называю «мини» AT-режим и «полный» AT-режим. Некоторые команды работают только в «полном» AT-режиме. Для входа в «полный» AT-режим пин 34 должен быть в HIGH и оставаться в HIGH. Для этого я сделал соединение от пина 34 к +3,3 В. Смотрите схему ниже.
Если вы не уверены насчёт AT-режима, посмотрите Arduino и HC-05 (ZS-040) — AT-режим.
Если вы не знакомы с тем, как работают HC-06 и HC-05, стоит ознакомиться с другими статьями:
Подключение
У меня два Arduino. Один подключён к HC-05 zs-040, другой — к HC-06 zs-040.
HC-05 имеет соединение от пина 34 к +3,3 В. Это активирует «полный» AT-режим.
Настройка HC-05
HC-05 настроен со следующими значениями:
ROLE = 0 (режим Slave)
UART = 9600 (скорость для режима связи)
CMODE = 0 (подключаться только к сопряжённым устройствам)
PSWD = 1234 (пароль/PIN для сопряжения)
В AT-режиме используется скорость 38400.
Соберите схему, подайте питание и загрузите следующий скетч.
// Basic Bluetooth sketch HC-05_02_38400
// Connect the HC-05 module and communicate using the serial monitor
//
// The HC-05 defaults to commincation mode when first powered on.
// Needs to be placed in to AT mode
// After a factory reset the default baud rate for communication mode is 38400
//
//
// Pins
// BT VCC to Arduino 5V out.
// BT GND to GND
// BT RX to Arduino pin 3 (through a voltage divider)
// BT TX to Arduino pin 2 (no need voltage divider)
#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()
{
// start th serial communication with the host computer
Serial.begin(9600);
Serial.println("Arduino with HC-05 is ready");
// start communication with the HC-05 using 38400
BTserial.begin(38400);
Serial.println("BTserial started at 38400");
}
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();
// mirror the commands back to the serial monitor
// makes it easy to follow the commands
Serial.write(c);
BTserial.write(c);
}
}
Поскольку пин 34 Bluetooth-модуля установлен в HIGH, HC-05 должен войти в AT-режим при включении питания.
Откройте монитор порта на компьютере и подтвердите, что вы в AT-режиме, введя «AT» (без кавычек). Вы должны получить ответ «OK».
Помните, что HC-05 требует установки «Both NL & CR».
Скетч отображает введённые команды обратно в монитор порта. Это упрощает отслеживание.
Настройка HC-06
Соберите схему HC-06, подайте питание и загрузите следующий скетч. Мой HC-06 настроен на скорость 9600. Если ваш использует другую скорость, вам нужно будет изменить скетч. Измените следующие строки:
BTSerial.begin(9600);
Serial.println("BTserial started at 9600");
Замените 9600 на скорость вашего HC-06.
// Basic bluetooth test sketch. HC-06_01_9600
// HC-06 ZS-040
//
//
// Uses hardware serial to talk to the host computer and software serial
// for communication with the bluetooth module
//
// Pins
// BT VCC to Arduino 5V out.
// BT GND to GND
// BT RX to Arduino pin 3 (through a voltage divider)
// BT TX to Arduino pin 2 (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.
//
// These HC-06 modules require capital letters and no line ending
//
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // RX | TX
void setup()
{
Serial.begin(9600);
Serial.println("Arduino with HC-06 is ready");
// HC-06 default baud rate is 9600
BTSerial.begin(9600);
Serial.println("BTserial started at 9600");
}
void loop()
{
// Keep reading from HC-06 and send to Arduino Serial Monitor
if (BTSerial.available())
Serial.write(BTSerial.read());
// Keep reading from Arduino Serial Monitor and send to HC-06
if (Serial.available())
BTSerial.write(Serial.read());
}
Модули HC-06 запускаются в AT-режиме, поэтому можно начинать вводить команды сразу после открытия монитора порта. Помните, что HC-06 требует команды в верхнем регистре и не требует символов новой строки или возврата каретки — установите «No line endings» внизу окна монитора порта. Откройте монитор порта и подтвердите AT-режим, введя «AT» (без кавычек). Вы должны получить ответ «OK».
Для HC-06 нужно немного — просто убедитесь, что пароль совпадает с паролем HC-05.
Чтобы изменить пароль/PIN на 1234, введите AT+PSWD1234 (без кавычек) и нажмите Send.
Сопряжение и привязка
На данном этапе HC-06 должен ожидать подключения. Пароль/PIN — 1234.
HC-05 должен быть в «полном» AT-режиме. Если вы не уверены, что это значит, смотрите Arduino и HC-05 (ZS-040) — AT-режим.
Шаги для подключения к HC-06:
Установить одинаковую скорость передачи на обоих устройствах.
Убедиться, что пароли на HC-05 и HC-06 совпадают.
Найти адрес HC-06.
Выполнить сопряжение HC-05 с HC-06.
Привязать HC-06 к HC-05.
Настроить HC-05 на подключение только к сопряжённым устройствам.
Установить связь с HC-06.
1. Установить одинаковую скорость
Установите скорость связи 9600 на HC-05 и HC-06. Я уже это сделал.
Это только для целей данного примера. Когда всё заработает, вы сможете изменить скорости.
2. Убедиться, что пароли совпадают
Мы уже установили пароли.
3. Найти адрес HC-06
Это можно сделать с помощью Android-устройства или с помощью HC-05. Вот как это сделать через HC-05.
Убедитесь, что HC-05 в AT-режиме, и введите следующие команды:
AT+RMAAD
AT+ROLE=1
AT+RESET
AT+RMAAD — очищает ранее сопряжённые устройства.
AT+ROLE=1 — переводит HC-05 в режим Master.
AT+RESET — сбрасывает HC-05. Иногда это необходимо после смены роли.
Теперь введите следующее:
AT+CMODE=0
AT+INQM=0,5,9
AT+INIT
AT+INQ
AT+INQM=0,5,9, AT+INIT и AT+INQ требуют, чтобы пин 34 был в HIGH. Если пин 34 не в HIGH, вы не получите никакого ответа от этих команд. Ни сообщения, ни сообщения об ошибке.
AT+CMODE=0 — позволяет HC-05 подключаться к любому устройству.
AT+INQM=0,5,9 — настраивает поиск до 5 устройств в течение 9 секунд.
AT+INIT — инициализирует профиль SPP. Если SPP уже активен, вы получите error(17), которую можно игнорировать.
AT+INQ — ищет другие Bluetooth-устройства.
На скриншоте выше видно, что HC-05 нашёл 2 Bluetooth-устройства:
+INQ:A854:B2:3FB035,8043C,7FFF
+INQ:3014:10:171179,1F00,7FFF
Одно из них — HC-06. Чтобы узнать какое, используем команду AT+RNAME?.
AT+INQ возвращает 3 значения: первое — адрес (это нужное значение), второе — класс устройства, третье — сила сигнала (RSSI).
AT+INQ будет работать только если HC-05 в режиме Master и после команды AT+INIT.
Для получения имени найденных устройств используем команду AT+RNAME?. Адреса — первое поле, возвращаемое AT+INQ: A854:B2:3FB035 и 3014:10:171179.
При вводе адреса нужно заменить двоеточия на запятые. Формат: AT+RNAME?A854,B2,3FB035 и AT+RNAME?3014,10,171179.
Разумеется, вы будете использовать адрес вашего HC-06.
Из результатов видно, что A854:B2:3FB035 — это мой телевизор, а 3014:10:171179 — это HC-06.
Теперь, когда у нас есть адрес HC-06, можно завершить подключение.
4. Сопряжение HC-05 с HC-06
Для сопряжения используем команду AT+PAIR=<addr>,<timeout>.
Введите AT+PAIR=3014,10,171179,9 (без кавычек).
Если HC-05 не сможет выполнить сопряжение с HC-06 в течение 9 секунд, вы получите сообщение об ошибке. Если сопряжение успешно, получите «OK».
5. Привязка HC-06 к HC-05
Привяжите с помощью AT+BIND=3014,10,171179.
6. Настроить подключение только к сопряжённым устройствам
Используем команду CMODE: AT+CMODE=1.
7. Связь с HC-06
Используем команду link: AT+LINK=<addr>.
В моём случае AT+LINK=3014,10,171179. Если всё в порядке, получите ответ «OK».
Светодиод на HC-05 должен делать 2 быстрых мигания каждые 2 секунды (приблизительно).
Светодиод на HC-06 должен гореть постоянно (не мигать).
Вы подключили HC-05 и HC-06!
Теперь, когда соединение установлено, HC-05 будет автоматически подключаться к HC-06 каждый раз при включении.
После установления соединения HC-05 переключится в режим связи. Если вы хотите продолжить работу в AT-режиме, нужно сбросить модуль с пином 34 в HIGH или с нажатой кнопкой.
Проверка подключения
На HC-05 отключите соединение к пину 34 и загрузите следующий скетч на Arduino, подключённый к нему. Скетч открывает BTserial на скорости 9600 для режима связи.
// Basic Bluetooth sketch HC-05_03_9600
// Connect the HC-05 module and communicate using the serial monitor
//
// The HC-05 defaults to commincation mode when first powered on.
// Needs to be placed in to AT mode
// After a factory reset the default baud rate for communication mode is 38400
//
//
// Pins
// BT VCC to Arduino 5V out.
// BT GND to GND
// BT RX to Arduino pin 3 (through a voltage divider)
// BT TX to Arduino pin 2 (no need voltage divider)
#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()
{
// start the serial communication with the host computer
Serial.begin(9600);
Serial.println("Arduino with HC-05 is ready");
// start communication with the HC-05 using 9600
BTserial.begin(9600);
Serial.println("BTserial started at 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);
}
}
Сбросьте оба Arduino и отключите питание HC-05 и HC-06.
Включите HC-06. Светодиод должен быстро мигать 5 раз в секунду. Это означает, что модуль ожидает подключения или сопряжения.
Включите HC-05. Светодиод мигнёт пару раз при включении, затем перейдёт на регулярный паттерн — быстрое мигание каждые пару секунд.
Светодиод на HC-06 загорится постоянно (без мигания).
Модули подключены.
Откройте мониторы порта — всё, что вы вводите в одном, появится в другом, и наоборот.
Каждый раз при включении модули должны подключаться. Если подключение не происходит, перезагрузите питание Arduino. Иногда HC-05 застревает при попытке подключения. В этом случае светодиод на HC-05 будет либо:
Быстро мигать 3 раза каждые пару секунд.
Мигать вкл/выкл дважды в секунду.
Это обычно происходит, когда HC-06 выключается и снова включается без сброса HC-05.
Устройства подключаются быстрее, если HC-06 запускается первым.
Дополнительная информация
Для получения дополнительной информации об AT-командах обратитесь к руководству пользователя HC-05 или руководству EGBT-046S/EGBT-045MS.
Phillipe Cantin написал похожую статью здесь.
Следующий шаг. Организовать общение Arduino через Bluetooth. Arduino to Arduino by Bluetooth