Смартфон не видит модуль HC-05 в списке Bluetooth-устройств — в подавляющем большинстве случаев причина в том, что модуль запитан неправильно или светодиод на нём не мигает, то есть радиоканал вообще не активирован. Прежде чем искать ошибку в коде скетча или в приложении на Android, проверьте самое простое: подано ли питание на модуль и находится ли он в режиме ожидания сопряжения (быстрое мигание встроенного светодиода).
Связка Arduino + Bluetooth-модуль + Android — одна из самых популярных схем для домашней автоматизации, радиоуправляемых моделей и учебных проектов. Обмен данными идёт через последовательный порт (UART), а со стороны телефона используется профиль SPP (Serial Port Profile), который поддерживают классические модули HC-05 и HC-06. В этой статье разберём всю цепочку: от выбора модуля и схемы подключения до скетча, приложения и диагностики типичных сбоев.
Выбор Bluetooth-модуля для Arduino
Для связи с Android чаще всего применяют модули HC-05 и HC-06. Первый умеет работать и в роли ведущего (master), и в роли ведомого (slave), второй — только ведомым, но для управления со смартфона этого достаточно. Оба модуля используют классический Bluetooth 2.x с профилем SPP, что важно: Android-приложения для последовательного обмена рассчитаны именно на этот профиль.
Альтернатива — модули BLE (Bluetooth Low Energy), например на базе HM-10. Они экономичнее, но требуют другого подхода в приложении: вместо последовательного порта используются GATT-характеристики. Если вы только начинаете, проще взять HC-05 или HC-06 — под них больше готовых примеров и приложений.
- 🔵 HC-05 — режимы master/slave, настройка через AT-команды, оптимален для экспериментов
- 🟢 HC-06 — только slave, минимум настроек, подходит для простых проектов
- ⚪ HM-10 (BLE) — низкое энергопотребление, но сложнее в программировании
- 🔴 Встроенный Bluetooth в платах ESP32 — отдельный вариант без внешнего модуля
Схема подключения модуля к Arduino
Типовая плата модуля имеет выводы VCC, GND, TXD, RXD. Питание многих плат допускает 5 В благодаря встроенному стабилизатору, но логические уровни самого модуля — 3,3 В. Поэтому линию TX Arduino (5 В) на вход RXD модуля желательно подключать через делитель напряжения из двух резисторов, чтобы не перегружать вход.
Обратите внимание на перекрёстное соединение: TXD модуля идёт на RX Arduino, а RXD модуля — на TX платы. Если использовать аппаратный UART (пины 0 и 1 на Arduino Uno), USB-монитор порта будет конфликтовать с модулем — удобнее задействовать программный последовательный порт через библиотеку SoftwareSerial на других пинах, например 10 и 11.
| Вывод модуля | Куда подключать на Arduino | Примечание |
|---|---|---|
| VCC | 5V (или 3.3V — по документации на плату) | Сверьтесь с маркировкой своей платы |
| GND | GND | Общая земля обязательна |
| TXD | RX (пин 10 при SoftwareSerial) | Прямое соединение |
| RXD | TX (пин 11 при SoftwareSerial) | Желательно через делитель напряжения |
| STATE/KEY | Не подключать (для базового обмена) | Нужны для AT-режима |
⚠️ Внимание: уровни логики модуля — 3,3 В. Длительная подача 5 В на вход RXD без делителя может вывести модуль из строя. Пара резисторов (например, 1 кОм и 2 кОм) решает проблему за минуту.
☑️ Проверка подключения модуля
Скетч для Arduino: приём и отправка данных
Минимальный скетч должен читать байты из программного порта и, для отладки, дублировать их в монитор. Библиотека SoftwareSerial входит в стандартную поставку Arduino IDE, ничего доустанавливать не нужно.
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(10, 11); // RX, TX
void setup() {
Serial.begin(9600);
BTSerial.begin(9600); // скорость зависит от настроек модуля
}
void loop() {
if (BTSerial.available()) {
char c = BTSerial.read();
Serial.write(c); // эхо в монитор порта
}
if (Serial.available()) {
BTSerial.write(Serial.read());
}
}
Скорость обмена — частый источник проблем. Модули HC-05/HC-06 с завода обычно настроены на 9600 бод, но встречаются экземпляры с другими значениями. Если в ответ приходит «мусор» из нечитаемых символов — первым делом проверьте совпадение скоростей в скетче и в настройках модуля. Изменить скорость модуля можно через AT-команды, подключив его в режиме настройки.
Сопряжение со смартфоном Android
После подачи питания модуль становится виден в списке Bluetooth-устройств телефона. Откройте Настройки → Bluetooth, включите поиск и найдите устройство с именем вроде HC-05 или HC-06. При запросе кода сопряжения чаще всего подходят стандартные заводские PIN-коды 1234 или 0000, но если ни один не принимается — сверьтесь с документацией на ваш экземпляр модуля, код мог быть изменён предыдущими настройками.
Важно понимать: сопряжение в настройках Android само по себе не передаёт данные. Оно лишь регистрирует устройство в системе. Для обмена нужно приложение, которое откроет RFCOMM-канал к модулю. Именно на этом этапе многие новички путаются: «телефон подключён, но команды не идут» — потому что приложение не запущено или не выбрано устройство внутри него.
⚠️ Внимание: на Android 12 и новее приложениям требуются разрешения
BLUETOOTH_CONNECTиBLUETOOTH_SCAN, а на ряде прошивок — ещё и доступ к геолокации для поиска устройств. Если приложение «не видит» модуль, проверьте выданные разрешения в настройках приложения.
Приложения для обмена данными
Готовых приложений в Google Play достаточно: ищите по запросам «Bluetooth Serial Terminal» или «Bluetooth SPP». Принцип у всех одинаков: выбрать сопряжённое устройство, установить соединение и отправлять текстовые команды. Для проектов с кнопками и слайдерами существуют конструкторы интерфейсов, где элементы управления привязываются к отправляемым символам.
Если нужно собственное приложение, есть два пути. Первый — визуальная среда MIT App Inventor, где Bluetooth-клиент добавляется блоками без написания кода. Второй — полноценная разработка на Kotlin или Java с использованием классов BluetoothSocket и BluetoothAdapter из Android SDK. Для прототипа App Inventor заметно быстрее, для продукта — нативная разработка.
- 📱 Терминалы SPP — ручная отправка команд, удобны для отладки
- 🎛️ Конструкторы пультов — кнопки и слайдеры без программирования
- 🧩 MIT App Inventor — своё приложение блоками
- 💻 Нативная разработка — полный контроль через
BluetoothSocket
Как сменить имя и PIN модуля HC-05
Переведите модуль в AT-режим (обычно — удерживая кнопку KEY при подаче питания или подав высокий уровень на пин EN, зависит от платы). Подключитесь через Serial-монитор на скорости AT-режима (часто 38400) и отправьте команды AT+NAME=MyDevice и AT+PSWD=1234. Точный синтаксис и доступность команд зависят от прошивки модуля — сверяйтесь с документацией на ваш экземпляр.
Типичные ошибки и их диагностика
Разберём ситуации, с которыми сталкиваются чаще всего. Если модуль виден в поиске, но приложение не подключается — почти всегда виноват либо уже занятый канал (модуль поддерживает одно соединение), либо несовпадение скорости обмена. Закройте другие приложения, которые могли захватить соединение, и перезапустите модуль по питанию.
Крякозябры вместо данных указывают на рассинхрон скоростей: проверьте, что BTSerial.begin() вызван с той же скоростью, на которую настроен модуль. Полное молчание при работающем светодиоде чаще означает перепутанные линии TX/RX — поменяйте их местами. Ну а если модуль вообще не появляется в поиске, возвращайтесь к самому началу: питание, земля, исправность самой платы.
- 🔍 Модуль не виден в поиске — проверить питание и мигание светодиода
- 🔑 Не принимает PIN-код — попробовать
1234и0000, затем документацию модуля - 📵 Сопряжён, но приложение не соединяется — закрыть другие приложения, перезапустить модуль
- 🗒️ Мусор вместо данных — несовпадение скорости UART
- 🔇 Нет данных вообще — перепутаны TX/RX или нет общей земли
Куда двигаться дальше
Когда базовый обмен заработал, логичный следующий шаг — двусторонний протокол: Arduino подтверждает приём команды ответом, а приложение показывает состояние исполнителей. Для надёжности добавьте в протокол маркер начала и конца пакета, чтобы не ловить обрывки данных при потере байтов.
Для проектов, где важна дальность и стабильность, рассмотрите переход на ESP32: плата объединяет микроконтроллер, классический Bluetooth и BLE, а также Wi-Fi, что открывает дорогу к управлению через интернет. Но освоенная связка Arduino + HC-05 + Android остаётся лучшей учебной площадкой — все принципы последовательного обмена на ней видны как на ладони.
Частые вопросы
Какой PIN-код у модуля HC-05 по умолчанию?
Чаще всего заводской код — 1234, реже встречается 0000. Если оба не подходят, код мог быть изменён через AT-команды — тогда модуль нужно перенастроить, подключив его в AT-режиме.
Почему телефон видит модуль, но приложение не подключается?
Возможные причины: соединение уже занято другим приложением, приложению не выданы разрешения Bluetooth (актуально для Android 12+), либо модуль «завис» и требует перезапуска по питанию. Закройте все Bluetooth-приложения, выключите и включите питание модуля и повторите попытку.
Можно ли использовать BLE-модуль вместо HC-05?
Да, но потребуется приложение с поддержкой BLE и другой подход в коде: вместо последовательного порта используются GATT-сервисы и характеристики. Для простых проектов классический SPP-модуль освоить проще.
Нужен ли делитель напряжения на линии RX модуля?
Логика модуля рассчитана на 3,3 В, а выход TX Arduino Uno выдаёт 5 В. Кратковременно многие модули это терпят, но для надёжной работы линию TX Arduino → RXD модуля рекомендуется подключать через делитель из двух резисторов.
Почему в мониторе порта приходят непонятные символы?
Это классический признак несовпадения скоростей обмена. Убедитесь, что скорость в BTSerial.begin() совпадает со скоростью, на которую настроен модуль (у большинства новых модулей это 9600 бод).