Компоненты · 5 мин чтения

Bluetooth-модуль HC-05: управляй Arduino с телефона

Как подключить Bluetooth-модуль HC-05? Пины и делитель напряжения, сопряжение с телефоном, управление светодиодом и реле, AT-команды, HC-05, HC-06 и HM-10, iPhone, ESP32 и Pico.

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

Bluetooth-модуль HC-05 и провода-перемычки
Bluetooth-модуль HC-05: зигзагообразная дорожка сверху — это антенна, слева 6 пинов: EN, VCC, GND, TXD, RXD и STATE.

Как работает HC-05?

HC-05 использует профиль SPP (Serial Port Profile) классического Bluetooth и ведёт себя как «беспроводной последовательный кабель». Когда телефон сопряжён и подключён, каждый символ, отправленный с телефона, приходит в Arduino через пин TXD модуля, а всё, что Arduino пишет в пин RXD, уходит на телефон. На стороне Arduino ничего знать о Bluetooth не нужно: используешь Serial.print() и read() так же, как при общении с монитором порта.

ПараметрЗначение
Версия Bluetooth2.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-052.0 классическийВедущий и ведомый6Не работает
HC-062.0 классическийТолько ведомый4Не работает
HM-104.0 BLEВедущий и ведомый6Работает
Bluetooth-модуль HC-06
Bluetooth-модуль HC-06: очень похож на HC-05, но у него 4 пина и он работает только как ведомый; для связи с телефоном этого достаточно.
HC-05 и HC-06 не работают с iPhone: iOS не позволяет обычным приложениям открывать последовательное соединение по классическому Bluetooth. Если нужна связь с iPhone, возьми BLE-модуль (Bluetooth Low Energy), например HM-10, или ESP32 с BLE. Телефоны на Android и компьютеры подключаются к HC-05 без проблем.

Пины и подключение 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Ω
STATEHIGH при подключенииНе подключается или, по желанию, к входному пину
HC-05 можно подключить и к пинам 0 и 1 на Uno, но эти пины используются ещё и для загрузки кода по USB, поэтому, пока модуль подключён, загрузка не проходит. Пины 10 и 11 с SoftwareSerial оставляют свободными и загрузку, и монитор порта.

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

При подаче питания светодиод модуля часто мигает: это значит, что модуль ждёт подключения. В настройках Bluetooth на телефоне с Android найди устройство «HC-05» и выполни сопряжение с PIN-кодом 1234 (или 0000, если первый не подходит). Само сопряжение соединения не открывает; это делает приложение-терминал для Bluetooth. После подключения светодиод делает две короткие вспышки каждые 2 секунды. Если светодиод 2 секунды горит и 2 секунды не горит, модуль находится в режиме AT-команд.

Первая связь с телефоном

Код ниже превращает Arduino в мост между телефоном и компьютером: каждый символ с телефона попадает в монитор порта, а всё, что ты набираешь в мониторе порта, уходит на телефон. Это лучшая отправная точка, чтобы проверить соединение:

C++ (Arduino IDE)
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 ещё и отправляет ответ на телефон:

C++ (Arduino IDE)
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Возвращает заводские настройки
На некоторых версиях HC-05 часть AT-команд (например, AT+NAME) отвечает, только если удерживать кнопку во время отправки команды. Если на AT приходит OK, а на некоторые команды ответа нет, попробуй ещё раз с зажатой кнопкой.

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):

MicroPython
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 делитель не нужен.

Все проекты