Arduino Bluetooth Controller: подключение модуля и управление со смартфона

Модуль HC-05, подключенный к Arduino Uno напрямую к пинам 0 и 1, блокирует загрузку скетча и выдает ошибку avrdude: stk500_recv() — это самая частая проблема при сборке Bluetooth-контроллера, и решается она отключением модуля от аппаратного UART на время прошивки. Запрос «arduino bluetooth controller» обычно означает одну из двух задач: управлять платой Arduino со смартфона через Bluetooth или собрать самодельный контроллер (пульт) на базе Arduino. В обоих случаях основой служит последовательный порт и Bluetooth-модуль.

В статье разберем выбор модуля, схему подключения с учетом уровней напряжения, настройку через AT-команды, минимальный скетч для приема команд и типичные ошибки, из-за которых связь не устанавливается. Инструкции даются для классических модулей HC-05 и HC-06 как самых распространенных; поведение конкретного клона может отличаться, поэтому при расхождениях сверяйтесь с документацией на вашу плату.

Выбор Bluetooth-модуля для Arduino

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

Классические HC-05/HC-06 работают по профилю SPP (Serial Port Profile) и прозрачно передают байты: все, что Arduino отправляет в Serial, уходит в эфир, и наоборот. Это делает их совместимыми практически с любым терминальным приложением на Android. Учтите, что iOS с классическим Bluetooth 2.0 через SPP не работает — для iPhone нужен BLE-модуль.

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

Схема подключения и согласование уровней

Логика модуля рассчитана на 3,3 В, тогда как Arduino Uno выдает на TX-пине 5 В. Сам модуль обычно питается от 5 В через вывод VCC (на плате модуля стоит стабилизатор), а вот линия RX модуля требует защиты. Классическое решение — делитель напряжения из двух резисторов между TX Arduino и RX модуля: например, 1 кОм и 2 кОм, что снизит 5 В примерно до 3,3 В.

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

Пин модуляКуда подключать на ArduinoПримечание
VCC5VЧерез стабилизатор на плате модуля
GNDGNDОбщая земля обязательна
TXDПин 10 (RX SoftwareSerial)Напрямую, 3,3 В совместимо
RXDПин 11 (TX SoftwareSerial)Через делитель напряжения
KEY/EN3,3 В или не подключенНужен для входа в AT-режим
⚠️ Внимание: подача 5 В напрямую на RX модуля может со временем вывести его из строя. Не пропускайте делитель напряжения, даже если «на макетке и так работает».

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

Перед использованием модуль желательно настроить: задать имя устройства, PIN-код и скорость порта. Для этого HC-05 переводится в AT-режим — обычно удержанием кнопки на модуле (или подачей высокого уровня на пин KEY) в момент подачи питания. Признак входа в AT-режим — редкое медленное мигание светодиода вместо частого. Точная процедура зависит от версии платы модуля, поэтому при сомнениях сверьтесь с описанием конкретной ревизии.

Команды отправляются через Serial-монитор Arduino IDE. Полезный набор команд для HC-05:

AT          — проверка связи, ответ OK

AT+NAME? — запрос текущего имени

AT+NAME=ArduinoCtrl — установка имени

AT+PSWD? — запрос PIN-кода

AT+UART=9600,0,0 — скорость 9600 бод

Обратите внимание: в AT-режиме многие модули работают на фиксированной скорости (часто 38400 бод), а в рабочем режиме — на той, что задана командой AT+UART. Если модуль не отвечает в мониторе порта, первым делом проверьте скорость соединения и настройку окончания строки — HC-05 обычно требует NL & CR (оба символа перевода строки).

Почему модуль не отвечает на AT-команды

Наиболее вероятные причины: модуль не переведен в AT-режим (светодиод мигает часто), неверная скорость порта в мониторе, не выбрано окончание строки "NL & CR", перепутаны линии RX/TX. Проверяйте по одному пункту, меняя только один параметр за раз.

Скетч контроллера: прием команд со смартфона

Минимальный скетч принимает символы из Bluetooth и выполняет действия — например, включает светодиод или управляет мотором. Логика проста: читаем байт из SoftwareSerial, сравниваем с ожидаемыми командами, выполняем действие.

#include <SoftwareSerial.h>

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

void setup() {

pinMode(13, OUTPUT);

Serial.begin(9600);

BTSerial.begin(9600);

}

void loop() {

if (BTSerial.available()) {

char cmd = BTSerial.read();

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

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

Serial.println(cmd); // эхо в монитор

}

}

На смартфоне устанавливается любое приложение типа «Bluetooth Terminal» или специализированное — Arduino Bluetooth Controller и аналоги, где кнопкам назначаются отправляемые символы. Сопряжение выполняется стандартно: в настройках Bluetooth Android найдите модуль по имени и введите PIN (у новых модулей это чаще всего 1234 или 0000, точное значение указано в описании вашего модуля).

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

Выполнено: 0 / 5
📊 Для какой задачи вы собираете Arduino Bluetooth controller?
Управление машинкой/роботом
Умный дом и реле
Связь двух Arduino
Обучение и эксперименты

Типичные проблемы и их диагностика

Если скетч не загружается с ошибкой программатора — почти наверняка модуль занимает аппаратный UART. Отключите провода от пинов 0 и 1, прошейте плату, затем верните подключение. Именно поэтому и рекомендуется SoftwareSerial: аппаратный порт остается свободным для отладки.

Когда смартфон не видит модуль, проверьте питание: светодиод на модуле должен мигать. Отсутствие свечения указывает на проблему с питанием или неисправность платы. Если модуль виден, но приложение не подключается — удалите старое сопряжение в настройках Bluetooth и выполните его заново. Данные передаются в приложение, но приходят «мусором» из непонятных символов — это почти всегда несовпадение скоростей порта в скетче и в модуле.

  • 🔌 Ошибка загрузки скетча — модуль занимает пины 0/1, отключите его на время прошивки.
  • 📵 Модуль не виден — проверьте питание и землю, светодиод должен мигать.
  • 🌀 Кракозябры в терминале — скорость BTSerial.begin() не совпадает с настройкой модуля.
  • 🔁 Связь рвется — слабое питание; не питайте модуль и моторы от одного слабого источника.
⚠️ Внимание: не питайте мощную нагрузку (моторы, сервоприводы) от пина 5V Arduino одновременно с Bluetooth-модулем — просадки напряжения вызывают разрывы соединения и перезагрузку платы. Используйте отдельный источник питания для силовой части с общей землей.

Arduino как пульт: передача команд на другое устройство

Обратная задача — сделать из Arduino сам контроллер, который отправляет команды. Здесь нужен модуль в режиме master, то есть HC-05. В AT-режиме ему задают роль мастера командой AT+ROLE=1 и привязку к адресу ведомого устройства через AT+BIND. После этого модуль при включении сам устанавливает соединение, и скетч просто пишет байты в Serial — например, по нажатию кнопок или по показаниям джойстика.

Такая схема применяется в самодельных пультах для роботов и машинок: на передающей стороне Arduino с джойстиком и HC-05, на приемной — вторая Arduino с любым slave-модулем и драйвером моторов. Протокол обмена вы задаете сами — проще всего передавать один байт на команду или короткие текстовые пакеты вида F100 (вперед, скорость 100).

FAQ: частые вопросы

Чем HC-05 отличается от HC-06 на практике?

HC-05 умеет работать мастером и сам устанавливать соединение, HC-06 — только ведомый. Для управления со смартфона разницы нет, для связи двух Arduino нужен хотя бы один HC-05.

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

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

Какой PIN-код у модуля по умолчанию?

Чаще всего 1234 или 0000, но значение зависит от прошивки конкретного модуля. Точный PIN указан в описании товара или меняется командой AT+PSWD.

Почему данные приходят непонятными символами?

Почти всегда это несовпадение скоростей: в скетче задана одна скорость SoftwareSerial, а модуль настроен на другую. Узнайте скорость модуля командой AT+UART? и укажите ее в BTSerial.begin().

Нужен ли делитель напряжения, если модуль и так работает?

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