Подключение Bluetooth-модуля HC05 к Arduino
Bluetooth окружает нас повсюду. Это слово мы слышим постоянно, и эта технология присутствует в миллионах продуктов, которыми мы пользуемся каждый день, включая гарнитуры, мобильные телефоны, ноутбуки, игровые контроллеры, фитнес-трекеры и так далее.
В мире встраиваемой электроники Bluetooth служит отличным способом передачи небольших объёмов данных по беспроводной связи на короткие расстояния (менее 100 метров). Его можно использовать для логирования данных в реальном времени или управления проектом с помощью смартфона.
Одним из самых доступных и широко используемых Bluetooth-модулей является HC-05. Его легко найти в интернете примерно за $5, что делает его бюджетным вариантом для добавления Bluetooth-соединения в ваш проект. Больше никаких запутанных кабелей и беспорядочных проводов!
В этом руководстве мы поможем вам начать работу с HC-05. Но мы не хотим перегружать вас слишком большим количеством информации сразу, поэтому разобьём материал на три простых руководства. В первом руководстве мы покажем, как отправлять и получать данные между HC-05 и вашим смартфоном. В следующем руководстве мы научим вас настраивать HC-05 с помощью AT-команд. А в заключительном руководстве вы узнаете, как организовать беспроводную связь между двумя платами Arduino с помощью Bluetooth-модулей HC-05.
К концу этих руководств у вас будет хорошее понимание использования Bluetooth-модуля HC-05 в ваших проектах. Итак, начнём!
Обзор оборудования HC-05
HC-05 — это модуль-мост Bluetooth-Serial, который позволяет осуществлять беспроводную связь между двумя микроконтроллерами или между микроконтроллером и смартфоном, ноутбуком или настольным ПК с поддержкой Bluetooth. Он идеально подходит для прямой замены проводного асинхронного последовательного интерфейса!
Каждый из этих модулей содержит Bluetooth-трансивер, что означает, что они способны как отправлять, так и принимать данные.
Как устройство Bluetooth Class 2, HC-05 имеет номинальную дальность 10 м. Конечно, это на открытом пространстве. В помещении его дальность немного снижается, особенно из-за стен.
Более того, эти модули очень просты в использовании. Нет необходимости разбираться в протоколах Bluetooth или стеке. Просто отправьте данные через последовательный интерфейс, и они будут переданы любому Bluetooth-устройству, к которому подключён модуль.
Режимы работы
Управление модулем HC-05 и передача данных через него — это две разные операции, но обе осуществляются через последовательный интерфейс. Для различения этих двух типов данных HC-05 использует два режима связи: режим AT и режим данных.
В режиме AT вы можете настраивать различные параметры модуля HC-05, такие как имя, скорость передачи данных, PIN-код и скорость передачи данных.
В режиме данных модуль HC-05 действует как прозрачный шлюз данных. Когда HC-05 получает данные, он удаляет заголовки и концевые маркеры Bluetooth и отправляет данные на порт UART. Когда данные записываются в порт UART, HC-05 формирует Bluetooth-пакет и передаёт его по беспроводному соединению Bluetooth.
Роли подключения
Bluetooth-модуль HC-05 может работать в двух основных ролях: Master (ведущий) и Slave (ведомый).
В роли Slave модуль HC-05 ожидает, когда другие устройства инициируют подключение. Это роль модуля по умолчанию, которая обычно используется в проектах, где вы хотите управлять устройствами с помощью смартфона.
В роли Master модуль HC-05 активно ищет другие Bluetooth-устройства и пытается установить с ними соединение. Этот режим используется в проектах, где два микроконтроллера должны общаться по беспроводной связи.
Для переключения между ролями необходимо настроить модуль HC-05, переведя его в режим AT и отправив AT-команды через порт UART.
Питание
Максимальное рабочее напряжение самой микросхемы HC-05 составляет 3.3V. Поэтому модуль включает линейный стабилизатор 3.3V, который позволяет использовать напряжение от 3.6V до 6V для питания модуля.
Важно отметить, что модуль HC-05 работает с уровнем логики 3.3V, поэтому нельзя подключать вывод Rx модуля HC-05 напрямую к цифровому выводу 5V микроконтроллера, такого как Arduino UNO. Другими словами, вывод Rx модуля HC-05 не поддерживает 5V. Поэтому перед подключением к модулю HC-05 сигнал Tx микроконтроллера должен быть понижен до 3.3V.
Потребление тока модулем HC-05 зависит от его состояния. Эта таблица из технического описания даёт хорошие оценки:
Режим |
Потребление тока |
|---|---|
Подключён с передачей данных |
45 мА |
Подключён в режиме ожидания |
8 мА |
Светодиод статуса
Многие модули HC-05 оснащены встроенным светодиодом.
Он мигает с разной частотой, указывая на статус:
При включении питания модуль входит в режим сопряжения Bluetooth, и светодиод быстро мигает с частотой около 2 Гц.
Когда модуль сопряжён с устройством, паттерн мигания меняется на два быстрых вспышки, затем пауза, и цикл повторяется.
Когда модуль переведён в режим AT, светодиод мигает медленно и равномерно.
Режим AT
Режим AT — это режим конфигурации, в котором вы можете отправлять AT-команды в стиле Hayes модулю HC-05 для изменения его настроек, таких как имя, скорость передачи данных, пароль и т.д.
Обычно модуль HC-05 находится в режиме данных. Чтобы перевести его в режим AT, нужно нажать и удерживать кнопку на модуле во время подачи питания. Светодиод начнёт мигать медленно и равномерно, указывая, что модуль находится в режиме AT.
Находясь в режиме AT, вы можете отправлять AT-команды модулю через порт UART. Модуль будет отвечать на команды, подтверждая их, предоставляя запрошенные данные или сигнализируя об ошибке. Команды обычно начинаются с «AT+», за которым следует конкретная команда, например «AT+NAME?» запрашивает имя модуля, а «AT+NAME=MyHC05» изменяет имя на «MyHC05».
AT-команды следует отправлять на скорости передачи данных, указанной для режима AT, которая часто отличается от скорости, используемой для передачи данных. Скорость по умолчанию для режима AT составляет 38400 бод, но при необходимости её можно изменить.
Распиновка HC-05
Модуль HC-05 имеет шесть выводов. Давайте рассмотрим распиновку.
Вывод STATE может использоваться для определения текущего статуса модуля HC-05. Вывод State имеет LOW, когда модуль не сопряжён, и HIGH, когда сопряжён.
Вывод RXD принимает последовательные данные от микроконтроллера. Он должен быть подключён к TX микроконтроллера. Обратите внимание, что этот вывод не поддерживает 5V. Поэтому перед подключением модуля к 5V микроконтроллеру сигнал Tx микроконтроллера должен быть понижен до 3.3V.
Вывод TXD передаёт последовательные данные микроконтроллеру. Он должен быть подключён к RX микроконтроллера.
GND — это вывод заземления, общий для любого другого устройства, подключённого к модулю.
VCC — сюда подключается положительное напряжение питания. Это напряжение поступает на микросхему HC-05 через стабилизатор 3.3V. Оно должно быть в диапазоне от 3.6V до 6V.
EN подключён к выводу включения встроенного стабилизатора и подтянут к высокому уровню резистором 220 кОм. Подтяжка этого вывода к низкому уровню отключает стабилизатор и, соответственно, выключает HC-05.
Управление модулем HC-05
Для управления Bluetooth-модулем HC-05 и передачи данных через него требуется только последовательный интерфейс. Он действует, по сути, как канал передачи данных: последовательные данные, поступающие на модуль (через вывод RXD), передаются по Bluetooth-соединению. Данные, приходящие со стороны Bluetooth, передаются на последовательную сторону (через вывод TXD).
Для настройки этого канала передачи данных мы следуем двухэтапному процессу:
Подключите модуль HC-05 к устройству, способному отправлять и принимать последовательные данные, например к Arduino или любому микроконтроллеру с UART.
На стороне Bluetooth мы устанавливаем беспроводное соединение между модулем HC-05 и другим устройством с поддержкой Bluetooth, например телефоном Android. Это соединение включает процесс сопряжения, аналогичный подключению любых других Bluetooth-устройств. Вам также потребуется терминальная программа, установленная на вашем телефоне, способная обмениваться данными по Bluetooth. Для этих целей мы рекомендуем использовать «Serial Bluetooth Terminal», который доступен в Play Store. Однако существуют и другие бесплатные варианты, которые вы можете попробовать.
Таким образом, нам нужно лишь настроить последовательный интерфейс между HC-05 и нашим микроконтроллером, а затем выполнить сопряжение HC-05 с другим Bluetooth-устройством — и всё готово!
Схема подключения модуля HC-05 к Arduino
Подключение модуля HC-05 к Arduino так же просто, как подключение питания и подсоединение последовательных выводов RX и TX.
Вместо подключения модуля HC-05 к аппаратному UART Arduino, мы используем SoftwareSerial и подключим выводы RX и TX HC-05 к любым свободным цифровым выводам Arduino. Это поможет избежать конфликтов на шине и гарантирует, что HC-05 не получит нежелательных данных во время загрузки скетча.
Поэтому TXD модуля HC-05 подключается к выводу D3 Arduino, RXD — к D2, GND к GND и VCC к 5V. Выводы TXD и RXD можно подключить к любому цифровому выводу (кроме 0 и 1). Если выводы 2 и 3 нужны для других целей, их можно поменять.
Однако, помните, что вывод Rx модуля HC-05 не поддерживает 5V. Поэтому нельзя подключать вывод Rx HC-05 напрямую к цифровому выводу Arduino (5V МК). Сигнал Tx от Arduino должен быть понижен до 3.3V. Существует множество способов сделать это, но самый простой — использовать резисторный делитель напряжения. Резистор 1 кОм между Rx HC-05 и D2 Arduino и резистор 2 кОм между Rx HC-05 и GND отлично подойдут.
Подводя итог, ниже приведены соединения, которые мы сделаем для примера кода далее в этом руководстве:
| HC-05 Module | Arduino | Notes | |
| VCC | 5V | – | |
| GND | GND | – | |
| TXD | D3 | – | |
| RXD | D2 | Use level shifter if using 5V MCU |
На изображении ниже показано, как подключить модуль HC-05 к Arduino Uno.
Скетч сквозной передачи данных по Bluetooth
С небольшой изобретательностью мы можем использовать Arduino в качестве посредника между нами и модулем HC-05. Ниже приведён простой скетч, который передаёт данные между монитором последовательного порта Arduino и модулем HC-05.
#include <SoftwareSerial.h>
//Create software serial object to communicate with HC-05
SoftwareSerial mySerial(3, 2); //HC-05 Tx & Rx is connected to Arduino #3 & #2
void setup()
{
//Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
//Begin serial communication with Arduino and HC-05
mySerial.begin(9600);
Serial.println("Initializing...");
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop()
{
if(Serial.available())
{
mySerial.write(Serial.read());//Forward what Serial received to Software Serial Port
}
if(mySerial.available())
{
Serial.write(mySerial.read());//Forward what Software Serial received to Serial Port
}
delay(20);
}
После загрузки скетча откройте монитор последовательного порта на скорости 9600 бод. Вы должны увидеть сообщение: «The device started, now you can pair it with bluetooth!».
Подключение к телефону Android
Давайте настроим беспроводное соединение между модулем HC-05 и телефоном Android. Процесс может отличаться в зависимости от устройства, но общие шаги довольно похожи.
Убедитесь, что модуль HC-05 включён и готов к установлению соединения. Встроенный светодиод должен быстро мигать с частотой около 2 Гц, указывая, что модуль обнаруживаем.
Теперь проведите вниз от верхней части экрана вашего телефона Android и убедитесь, что Bluetooth включён.
Нажмите и удерживайте значок Bluetooth, затем нажмите «Сопряжение с новым устройством» и подождите несколько секунд.
Нажмите на имя Bluetooth-устройства, с которым хотите выполнить сопряжение (в нашем случае HC-05). Следуйте инструкциям на экране.
При запросе введите 1234 в качестве PIN-кода. Это PIN по умолчанию для каждого модуля HC-05.
Для дальнейших шагов в этом руководстве вам потребуется приложение Bluetooth Terminal, установленное на вашем смартфоне. Мы рекомендуем использовать Android-приложение «Serial Bluetooth Terminal», доступное в Play Store.
После установки запустите приложение «Serial Bluetooth Terminal». Нажмите на значок в левом верхнем углу и выберите «Devices» (Устройства).
Вы должны увидеть список устройств, с которыми ранее выполняли сопряжение. Выберите «HC-05» из этого списка.
Вы должны получить сообщение «Connected». Паттерн мигания встроенного светодиода HC-05 должен измениться на две быстрые вспышки с последующей паузой. Вот и всё! Ваш смартфон теперь успешно сопряжён с Bluetooth-модулем HC-05 и готов к обмену данными.
Теперь введите что-нибудь в поле ввода внизу приложения, например «Hi!»
Вы должны мгновенно получить это сообщение в мониторе последовательного порта Arduino IDE.
Вы также можете обмениваться данными между монитором последовательного порта и смартфоном. Введите что-нибудь в поле ввода монитора последовательного порта и нажмите кнопку «Отправить».
Вы должны мгновенно получить это сообщение в приложении Serial Bluetooth Terminal.
Проект Arduino: Управление реле по Bluetooth
Давайте создадим простой проект, который позволит вам управлять реле по беспроводной связи через Bluetooth. Это может быть полезно для домашней автоматизации, умного освещения, систем безопасности и других подобных применений.
В этом проекте мы будем использовать двухканальный модуль реле. Если вы не знакомы с ним, рекомендуем прочитать руководство ниже.
Схема подключения
Мы используем ту же схему подключения Arduino, что и в предыдущем примере, но на этот раз добавим двухканальный модуль реле для управления лампой.
На изображении ниже показано, как собрать схему.
Код Arduino
После завершения подключения попробуйте скетч ниже.
#include <SoftwareSerial.h>
// GPIO where relay is connected to
const int relayPin = 6;
// Handle received messages
String message = "";
// Create software serial object to communicate with HC-05
SoftwareSerial mySerial(3, 2); //HC-05 Tx & Rx is connected to Arduino #3 & #2
void setup() {
// Begin serial communication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
// Initialize relayPin as an output
pinMode(relayPin, OUTPUT);
digitalWrite(relayPin, HIGH);
//Begin serial communication with Arduino and HC-05
mySerial.begin(9600);
Serial.println("Initializing...");
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop() {
if (mySerial.available()){
char incomingChar = mySerial.read();
if (incomingChar != '\n'){
message += String(incomingChar);
}
else{
message = "";
}
Serial.write(incomingChar);
}
// Check received message and control output accordingly
if (message == "on"){
digitalWrite(relayPin, LOW);
}
else if (message == "off"){
digitalWrite(relayPin, HIGH);
}
delay(20);
}
Тестирование кода
После загрузки скетча откройте монитор последовательного порта на скорости 9600 бод. Вы должны увидеть сообщение: «The device started, now you can pair it with bluetooth!».
Запустите приложение Serial Bluetooth Terminal и подключитесь к вашему модулю HC-05.
Теперь, когда вы введёте «on» в поле ввода внизу приложения, реле должно мгновенно активироваться. Аналогично, ввод «off» мгновенно деактивирует реле.
Кроме того, вы будете получать эти сообщения в мониторе последовательного порта Arduino IDE для целей мониторинга.
Приложение предлагает несколько макросов, которые можно настроить для сохранения сообщений по умолчанию. Например, вы можете связать M1 с сообщением «on», а M2 с сообщением «off». Таким образом, вы сможете легко управлять реле с помощью предопределённых кнопок, добавляя дополнительное удобство вашему проекту.
Дальнейшее изучение
Надеемся, это руководство подготовило вас к увлекательному погружению в мир Bluetooth. Теперь, когда у вас есть хорошее представление о том, как отправлять и получать данные между HC-05 и вашим смартфоном, пришло время изучить дальше — узнать, как настраивать HC-05 с помощью AT-команд.
А также как организовать беспроводную связь между двумя платами Arduino с помощью Bluetooth-модулей HC-05, открывая ещё больше возможностей для ваших беспроводных проектов.