Bluetooth-модуль HC-05: управляй Arduino с телефона
Как подключить Bluetooth-модуль HC-05? Пины и делитель напряжения, сопряжение с телефоном, управление светодиодом и реле, AT-команды, HC-05, HC-06 и HM-10, iPhone, ESP32 и Pico.
HC-05 — дешёвый и очень распространённый Bluetooth-модуль, который добавляет в проекты на Arduino беспроводную последовательную связь. С ним можно включить светодиод с телефона, включать и выключать лампу через реле, управлять машинкой на радиоуправлении или отправлять на телефон показания датчиков. В этой статье шаг за шагом разберём, как правильно и безопасно подключить HC-05, выполнить сопряжение с телефоном, написать первый код и пользоваться AT-командами, которые меняют настройки модуля.

Как работает HC-05?
HC-05 использует профиль SPP (Serial Port Profile) классического Bluetooth и ведёт себя как «беспроводной последовательный кабель». Когда телефон сопряжён и подключён, каждый символ, отправленный с телефона, приходит в Arduino через пин TXD модуля, а всё, что Arduino пишет в пин RXD, уходит на телефон. На стороне Arduino ничего знать о Bluetooth не нужно: используешь Serial.print() и read() так же, как при общении с монитором порта.
| Параметр | Значение |
|---|---|
| Версия Bluetooth | 2.0 + EDR (классический, SPP) |
| Дальность | ~10 м на открытом пространстве |
| Напряжение питания | 3,6–6 V (на плате модуля есть стабилизатор) |
| Логический уровень | 3,3 V |
| Скорость по умолчанию | 9600 бод (38400 в режиме AT) |
| PIN-код по умолчанию | 1234 или 0000 |
| Роль | Ведущий и ведомый (master и slave) |
HC-05, HC-06 и HM-10: сравнение
| Модуль | Bluetooth | Роль | Пины | iPhone |
|---|---|---|---|---|
| HC-05 | 2.0 классический | Ведущий и ведомый | 6 | Не работает |
| HC-06 | 2.0 классический | Только ведомый | 4 | Не работает |
| HM-10 | 4.0 BLE | Ведущий и ведомый | 6 | Работает |

Пины и подключение HC-05
Модуль можно питать от 5V, потому что на плате есть стабилизатор, но его пины данных работают на 3,3 V. Сигнал 3,3 V с пина TXD модуля HC-05 Arduino читает без проблем. В обратную сторону не подключай сигнал TX Arduino на 5 V напрямую к пину RXD модуля, а используй делитель напряжения: TX Arduino → 1 kΩ → RXD, RXD → 2 kΩ → GND. Так на RXD приходит около 3,3 V.
| Пин HC-05 | Назначение | Arduino Uno |
|---|---|---|
| EN (KEY) | Вход в режим AT | Не подключается (3,3 V для режима AT) |
| VCC | Питание | 5V |
| GND | Земля | GND |
| TXD | Выход данных модуля | D10 (RX для SoftwareSerial) |
| RXD | Вход данных модуля (3,3 V) | D11 через делитель 1 kΩ / 2 kΩ |
| STATE | HIGH при подключении | Не подключается или, по желанию, к входному пину |
Состояния светодиода и сопряжение с телефоном
При подаче питания светодиод модуля часто мигает: это значит, что модуль ждёт подключения. В настройках Bluetooth на телефоне с Android найди устройство «HC-05» и выполни сопряжение с PIN-кодом 1234 (или 0000, если первый не подходит). Само сопряжение соединения не открывает; это делает приложение-терминал для Bluetooth. После подключения светодиод делает две короткие вспышки каждые 2 секунды. Если светодиод 2 секунды горит и 2 секунды не горит, модуль находится в режиме AT-команд.
Первая связь с телефоном
Код ниже превращает Arduino в мост между телефоном и компьютером: каждый символ с телефона попадает в монитор порта, а всё, что ты набираешь в мониторе порта, уходит на телефон. Это лучшая отправная точка, чтобы проверить соединение:
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11); // RX, TX → HC-05 TXD, RXD
4
5void setup() {
6 Serial.begin(9600);
7 bt.begin(9600); // veri modu hızı / data mode baud rate
8}
9
10void loop() {
11 if (bt.available()) {
12 Serial.write(bt.read()); // telefondan bilgisayara / phone to PC
13 }
14 if (Serial.available()) {
15 bt.write(Serial.read()); // bilgisayardan telefona / PC to phone
16 }
17}Загрузи код и открой монитор порта на скорости 9600 бод. На телефоне подключись к HC-05 через приложение из Google Play, например Serial Bluetooth Terminal, и напиши что-нибудь: набранный текст появится в мониторе порта. Текст, набранный в мониторе порта, тоже появится на телефоне. Если всё работает, соединение, подключение и скорость в порядке.
Управление светодиодом и реле с телефона
Теперь будем реагировать на символы с телефона: когда приходит 1, светодиод включается, а когда приходит 0, выключается. После каждой команды Arduino ещё и отправляет ответ на телефон:
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11); // RX, TX
4const int LED = 13;
5
6void setup() {
7 pinMode(LED, OUTPUT);
8 bt.begin(9600);
9 bt.println("Ready");
10}
11
12void loop() {
13 if (bt.available()) {
14 char c = bt.read();
15 if (c == '1') {
16 digitalWrite(LED, HIGH); // LED'i yak / turn the LED on
17 bt.println("LED ON");
18 } else if (c == '0') {
19 digitalWrite(LED, LOW); // LED'i söndür / turn the LED off
20 bt.println("LED OFF");
21 }
22 }
23}Многие Bluetooth-приложения позволяют назначить кнопке любой символ, так что на телефоне можно собрать маленький пульт с кнопками «Вкл» и «Выкл». Если вместо светодиода подключить модуль реле, тот же код будет управлять с телефона лампой или вентилятором. А если направить символы F, B, L и R (вперёд, назад, влево и вправо) на драйвер моторов L298N, получится основа машинки с управлением по Bluetooth.
Настройка модуля AT-командами
Имя, PIN-код и скорость HC-05 меняются с помощью AT-команд. Чтобы войти в режим AT, подай питание на модуль, удерживая маленькую кнопку на нём (или с пином EN, подключённым к 3,3 V); светодиод начнёт медленно мигать, раз в 2 секунды. В коде-мосте напиши bt.begin(38400), выбери в мониторе порта окончание строки Both NL & CR (NL и CR) и отправляй команды:
| Команда | Назначение |
|---|---|
| AT | Проверка связи, ответ OK |
| AT+NAME=BlueGrays | Меняет видимое имя модуля |
| AT+PSWD="4321" | Меняет PIN-код (в старых версиях без кавычек) |
| AT+UART=9600,0,0 | Задаёт скорость в режиме данных |
| AT+ROLE=0 | Делает модуль ведомым (1 делает ведущим) |
| AT+VERSION? | Показывает версию прошивки |
| AT+ORGL | Возвращает заводские настройки |
Bluetooth на ESP32 и Raspberry Pi Pico
В классическую ESP32 встроены и классический Bluetooth, и BLE; с библиотекой BluetoothSerial к телефону можно подключиться без HC-05. А вот ESP32-S3 и ESP32-C3 поддерживают только BLE. В Raspberry Pi Pico W тоже есть встроенный Bluetooth. К обычной Raspberry Pi Pico без Bluetooth модуль HC-05 подключается к пинам UART; поскольку Pico работает от 3,3 V, делитель напряжения на этот раз не нужен. Питай модуль от пина VBUS (5V):
1from machine import UART, Pin
2
3bt = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1)) # GP0 → RXD, GP1 ← TXD
4led = Pin("LED", Pin.OUT) # kart üstü LED / onboard LED
5
6while True:
7 if bt.any():
8 c = bt.read(1)
9 if c == b'1':
10 led.on()
11 bt.write(b'LED ON\n')
12 elif c == b'0':
13 led.off()
14 bt.write(b'LED OFF\n')Идеи проектов с HC-05
- Машинка с управлением по Bluetooth: робот, которым управляют с телефона, на драйвере моторов L298N и двух DC-моторах.
- Выключатель для умного дома: включай и выключай лампы и розетки с телефона через модуль реле.
- Лампа с выбором цвета: задавай цвет RGB-светодиода значениями, отправленными с телефона.
- Беспроводной вывод показаний: отправляй температуру и влажность с DHT11 в терминал на телефоне.
- Рука-манипулятор: управляй сервоприводами ползунками на телефоне.
- Связь между двумя Arduino: сделай один HC-05 ведущим, а другой ведомым и передавай данные без проводов.
Частые ошибки и как их исправить
- Телефон не находит модуль: телефон — iPhone, модуль подключён к другому устройству или завис в режиме AT.
- Приходят непонятные символы: скорости не совпадают; в режиме данных обычно 9600, в режиме AT — 38400.
- Нет ответа на AT-команды: модуль не в режиме AT, скорость не 38400 или окончанием строки не выбрано Both NL & CR.
- Код не загружается: модуль подключён к пинам 0 и 1; отключай его на время загрузки или используй SoftwareSerial.
- Соединение рвётся, когда запускаются моторы: моторы мешают питанию; питай их от отдельного источника и поставь конденсатор на питание модуля.
- Модуль через какое-то время вышел из строя: возможно, на пин RXD подавали 5 V без делителя; всегда используй делитель 1 kΩ / 2 kΩ.
HC-05 — самый простой способ сделать проводные проекты беспроводными; добавь управление моторами, и можно собирать первого робота с дистанционным управлением. В приложении BlueGrays есть машинка с управлением по Bluetooth на L298N и робот, объезжающий препятствия, со схемами подключения и кодом.
Частые вопросы
Работает ли HC-05 с iPhone?
Нет. iOS не позволяет обычным приложениям открывать последовательное соединение по классическому Bluetooth, которое используют HC-05 и HC-06. Для iPhone нужен BLE-модуль, например HM-10, или ESP32 с BLE.
Какая дальность у HC-05?
Около 10 метров на открытом пространстве. Стены, металлические поверхности и другие беспроводные устройства сокращают это расстояние. В помещении модуль надёжно работает в пределах одной или соседней комнаты.
Чем HC-05 отличается от HC-06?
Оба используют классический Bluetooth. HC-05 может быть ведущим или ведомым, у него 6 пинов; HC-06 — только ведомый, обычно с 4 пинами. Для связи с телефоном хватит любого; чтобы связать две Arduino, нужен хотя бы один HC-05.
Какой PIN-код у HC-05 по умолчанию?
На большинстве модулей 1234, на некоторых 0000. Его можно сменить в режиме AT командой AT+PSWD; если не хочется, чтобы проектом управлял кто-то посторонний, стандартный PIN-код лучше поменять.
Можно ли связать две Arduino через HC-05?
Да. Сделай один HC-05 ведущим командой AT+ROLE=1 и укажи ему адрес второго модуля командой AT+BIND; второй модуль остаётся ведомым. При включении ведущий сам подключается к ведомому, и две Arduino общаются через последовательный порт.
Действительно ли нужен делитель напряжения на пине RXD?
Рекомендуется. Пины данных HC-05 работают на 3,3 V; многие модули какое-то время выдерживают 5 V, но со временем могут выйти из строя. Простой делитель из резисторов 1 kΩ и 2 kΩ убирает этот риск. Пину TXD делитель не нужен.
Что собрать после прочтения
Все проекты
Машинка на L298N с управлением по Bluetooth
Преврати телефон в пульт и управляй своей машинкой-роботом. Arduino получает команды из приложения-пульта на телефоне через Bluetooth-модуль и вращает колёса через драйвер моторов; машинка едет вперёд

Робот, объезжающий препятствия
Как насчёт того, чтобы собрать умную машину, которая сама находит дорогу? Робот, объезжающий препятствия, постоянно осматривает всё вокруг благодаря ультразвуковому датчику спереди. Встретив препятств
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

