Управление Arduino по Bluetooth: подключение, код и настройка

Модуль HC-05 подключен к Arduino, смартфон его видит, но данные не передаются — в большинстве таких случаев причина кроется в несовпадении скорости UART в скетче и в настройках самого модуля или в том, что модуль подключен к аппаратным пинам RX/TX, которые заняты USB-портом платы. Проверка этих двух моментов решает проблему чаще всего, и именно с этого стоит начинать диагностику.

Управление Arduino по Bluetooth — один из самых доступных способов добавить беспроводной канал в проект: от простого включения светодиода со смартфона до управления роботом или реле в самодельном «умном доме». В этой статье разберём, какие модули подходят, как их правильно подключить, какой код загрузить и что проверить, если связь не работает.

Какие Bluetooth-модули подходят для Arduino

Для проектов на Arduino чаще всего используются модули HC-05 и HC-06. Оба работают по классическому протоколу Bluetooth SPP (Serial Port Profile) и передают данные через последовательный порт. Разница между ними в роли устройства: HC-05 умеет работать и в режиме master, и в режиме slave, тогда как HC-06 — только slave, то есть всегда ждёт подключения со стороны смартфона.

Ещё один вариант — модули на базе BLE (Bluetooth Low Energy), например HM-10. Они потребляют меньше энергии, но требуют других приложений на смартфоне, поскольку классический SPP-профиль с ними не работает. Для первого проекта проще всего взять именно HC-05 или HC-06: под них написано больше всего примеров и приложений.

  • 🔵 HC-05 — универсальный модуль, поддерживает режимы master и slave, подходит для связи двух Arduino между собой.
  • 🟢 HC-06 — упрощённый вариант, только slave, дешевле и проще в настройке.
  • HM-10 (BLE) — энергоэффективный модуль для проектов с батарейным питанием, требует BLE-совместимых приложений.
  • 📱 Все три модуля работают со смартфонами на Android; с iOS классические SPP-модули обычно несовместимы.

Схема подключения модуля к Arduino

Модуль подключается к Arduino четырьмя проводами: VCC, GND, TX, RX. Питание большинства плат с HC-05 рассчитано на 5 В (на плате модуля стоит стабилизатор), но логические уровни сигнала RX модуля — 3,3 В. Подавать на этот вход 5 В напрямую рискованно, поэтому между пином TX Arduino и входом RX модуля ставят делитель напряжения из двух резисторов.

Линию TX модуля можно подключать к RX Arduino напрямую — плата корректно воспринимает уровень 3,3 В как логическую единицу. Если вы используете программный последовательный порт (SoftwareSerial), свободные цифровые пины назначаются в скетче, например 10 и 11.

Пин модуляКуда подключать на Arduino UnoПримечание
VCC5VПроверьте допустимое напряжение в документации к вашей плате модуля
GNDGNDОбщая земля обязательна
TXПин 10 (RX SoftwareSerial)Подключается напрямую
RXПин 11 (TX SoftwareSerial)Через делитель напряжения на 3,3 В
⚠️ Внимание: не подключайте линии данных модуля к аппаратным пинам 0 и 1 (RX/TX) на время прошивки платы — эти пины используются USB-интерфейсом, и загрузка скетча завершится ошибкой. Либо отключайте модуль на время прошивки, либо используйте SoftwareSerial на других пинах.

Скетч для приёма команд по Bluetooth

Минимальный рабочий скетч читает символы из программного порта и выполняет действие — например, включает и выключает встроенный светодиод. Проверьте, чтобы скорость btSerial.begin() совпадала со скоростью, настроенной в модуле; для многих модулей заводское значение — 9600 бод, но оно могло быть изменено предыдущим владельцем, поэтому при проблемах стоит перебрать стандартные значения.

#include <SoftwareSerial.h>

SoftwareSerial btSerial(10, 11); // RX, TX

void setup() {

pinMode(LED_BUILTIN, OUTPUT);

btSerial.begin(9600);

Serial.begin(9600);

}

void loop() {

if (btSerial.available()) {

char cmd = btSerial.read();

if (cmd == '1') digitalWrite(LED_BUILTIN, HIGH);

if (cmd == '0') digitalWrite(LED_BUILTIN, LOW);

Serial.println(cmd); // эхо в монитор порта для отладки

}

}

Такой код легко расширить: вместо светодиода команды могут переключать реле, менять скорость мотора через analogWrite() или запускать целые сценарии. Удобно завести таблицу команд — например, символ F для движения вперёд, B для назад, если речь идёт о машинке или роботе.

☑️ Проверка перед первым запуском

Выполнено: 0 / 4

Приложения для управления со смартфона

Для Android существует множество приложений, которые отправляют символы или строки на сопряжённый Bluetooth-модуль. Ищите в магазине приложений по запросам вроде «Bluetooth terminal» или «Arduino Bluetooth controller». Терминальные приложения просто передают введённый текст, а приложения-«пульты» позволяют назначить на кнопки и джойстики конкретные символы — их и удобно использовать с кодом из предыдущего раздела.

Перед подключением из приложения модуль нужно сопрячь в настройках Bluetooth смартфона. Стандартный PIN-код для HC-05 и HC-06 обычно 1234, реже 0000, но если ни один не подходит, сверьтесь с документацией к конкретному модулю — код мог быть изменён через AT-команды. После сопряжения модуль появится в списке устройств внутри приложения.

📊 Чем вы управляете через Bluetooth на Arduino?
Робот или машинка
Реле и освещение
Светодиодные эффекты
Только учусь, тестирую связь

Настройка модуля через AT-команды

Имя устройства, PIN-код и скорость порта меняются через AT-команды, которые модуль принимает в специальном режиме настройки. Способ входа в этот режим зависит от версии платы: у части модулей есть кнопка или вывод EN/KEY, который нужно подтянуть к питанию перед подачей напряжения, у других процедура отличается. Точную последовательность для вашей платы уточняйте в её документации — универсальной комбинации нет.

В режиме настройки модуль обычно отвечает на команды вроде AT (проверка связи, ответ OK), AT+NAME? (запрос имени) и AT+UART? (запрос скорости). Набор поддерживаемых команд и их синтаксис различаются у HC-05 и HC-06, поэтому используйте список команд именно для вашей модели.

⚠️ Внимание: в AT-режиме модуль может работать на скорости, отличной от рабочей (у многих HC-05 это 38400 бод). Если модуль не отвечает на AT, попробуйте другие стандартные скорости, прежде чем считать его неисправным.
Зачем менять имя и PIN модуля

Если в одном помещении работает несколько проектов, одинаковые заводские имена «HC-05» создают путаницу при сопряжении. Уникальное имя и собственный PIN-код позволяют точно подключаться к нужному устройству и защищают проект от случайного подключения посторонних.

Типичные проблемы и их решение

Если смартфон не находит модуль, сначала убедитесь, что тот вообще включился: на плате должен мигать светодиод. Отсутствие мигания чаще всего означает проблему с питанием — проверьте контакты VCC и GND и допустимое напряжение для вашей платы модуля. Постоянно горящий (не мигающий) светодиод обычно означает, что модуль уже сопряжён с каким-то устройством.

Сопряжение прошло, но данные не идут? Возможные причины: перепутаны линии RX/TX (их нужно подключать «накрест»), несовпадение скорости порта, отсутствие общей земли между модулем и Arduino. Полезный приём диагностики — выводить принятые символы в монитор порта через Serial.println(), как в скетче выше: так вы сразу увидите, доходят ли данные до платы.

  • 🔁 Данные приходят «мусором» — почти наверняка не совпадает скорость UART у модуля и в скетче.
  • 📵 Модуль виден, но приложение не подключается — удалите сопряжение в настройках смартфона и выполните его заново.
  • 🔌 Связь обрывается при включении моторов или реле — вероятна просадка питания; запитайте силовую часть отдельно.
  • 📶 Дальность связи меньше ожидаемой — возможная причина в помехах, металлическом корпусе или особенностях антенны конкретного модуля.
⚠️ Внимание: не питайте мощную нагрузку (моторы, ленты, реле с большим током) от пина 5V платы Arduino. Это может вызвать перезагрузку платы и сбои Bluetooth-связи, а в худшем случае — выход из строя стабилизатора. Используйте отдельный источник питания с общей землёй.

Идеи проектов с Bluetooth-управлением

Освоив базовую связь, вы можете двигаться дальше в нескольких направлениях. Классика — машинка на Arduino с драйвером моторов L298N, где символы с джойстика приложения превращаются в команды движения. Другой популярный вариант — управление адресной светодиодной лентой WS2812: по Bluetooth передаются номер эффекта, яркость и цвет.

Для домашней автоматизации подойдёт связка Arduino с модулем реле: команды со смартфона включают свет, вентилятор или полив. В таких проектах полезно добавить обратную связь — чтобы плата отправляла в приложение подтверждение выполнения команды или показания датчиков, а не только принимала приказы.

Часто задаваемые вопросы

Можно ли управлять Arduino по Bluetooth с iPhone?

Классические модули HC-05 и HC-06 используют профиль SPP, который iOS не поддерживает для сторонних приложений. Для iPhone нужны BLE-модули, например HM-10, и совместимое BLE-приложение.

Какая дальность связи у HC-05?

Точная дальность зависит от версии модуля, антенны и условий (стены, помехи). На практике в пределах комнаты связь обычно стабильна, но конкретные цифры для вашего модуля стоит проверять в его документации или опытным путём.

Можно ли связать две Arduino между собой по Bluetooth?

Да. Для этого один модуль должен работать в режиме master — это умеет HC-05. Его настраивают через AT-команды на подключение к адресу второго (slave) модуля. Процедура привязки зависит от версии прошивки модуля.

Почему скетч не загружается, когда модуль подключен?

Если модуль соединён с аппаратными пинами 0 и 1, он конфликтует с USB-интерфейсом, через который идёт прошивка. Отключите модуль на время загрузки или переведите его на пины SoftwareSerial.

Нужен ли делитель напряжения на линии RX модуля?

Логика модуля рассчитана на 3,3 В, поэтому подача 5 В с пина Arduino на его вход RX нежелательна. Делитель из двух резисторов — простое и надёжное решение; некоторые платы модулей уже имеют защиту на борту, что указано в их документации.