Компонент · Связь

Модуль Bluetooth HC-05

HC-05 добавляет роботу Bluetooth-связь: управляйте им с телефона или передавайте данные через те же TX/RX, что и по проводу.

Что это такое

HC-05 — самый простой способ сделать робота беспроводным. Это модуль Bluetooth, который работает как последовательный кабель без кабеля: микроконтроллер считывает и записывает байты через TX/RX точно как при связи по USB, но на другом конце находится телефон или ноутбук, сопряжённые по Bluetooth. Отправьте F из приложения на телефоне, и робот поедет вперёд — без Wi-Fi, сети и учётных записей.

Подписанная схема модуля Bluetooth HC-05: синяя отладочная плата с металлическим экранированным модулем Bluetooth и заклёпками по углам, печатной антенной PCB в форме зигзага, светодиодом состояния LED и 6-контактным разъёмом (EN, VCC, GND, TXD, RXD, STATE) вдоль нижнего края для последовательного подключения.
Модуль превращает Bluetooth-связь в обычное последовательное соединение — перекрестите TX/RX с микроконтроллером, и он будет выглядеть как проводной кабель. Скачать SVG

Как это работает

HC-05 реализует Bluetooth Serial Port Profile (SPP). После сопряжения всё, что модуль получает по радио, появляется на его выводе TX, а всё, что отправляется на вывод RX, передаётся по радио сопряжённому устройству. Код просто использует последовательный порт — Serial.read() / Serial.print(), — и беспроводная связь остаётся прозрачной. Настройка (имя, скорость, роль ведущего/ведомого) выполняется командами AT в отдельном командном режиме, но для большинства роботов заводских настроек достаточно.

Когда его следует использовать

Выбирайте HC-05, если требуется управлять роботом или контролировать его без проводного подключения:

  • Роботы с управлением с телефона — приложение Bluetooth отправляет команды движения, которые робот считывает через последовательный интерфейс и преобразует в управление двигателями.
  • Телеметрия в реальном времени — передача значений датчиков или одометрии на ноутбук во время работы робота.
  • Беспроводная настройка — изменение параметров на ходу без повторной прошивки.

Если робот уже использует ESP32, HC-05 не нужен — в ESP32 встроены Bluetooth и Wi-Fi. HC-05 — дополнение, которое даёт Arduino Uno ту же беспроводную возможность.

Подключение и типичные ошибки

  • Перекрестите последовательные линии: TX модуля → RX платы, RX модуля → TX платы. Обратное подключение — причина #1 сообщений «не подключается».
  • Понизьте делителем сигнал на выводе RX с 5 V до 3.3 V на плате, например Uno.
  • Освободите аппаратный последовательный порт при загрузке кода либо используйте пару выводов программного последовательного интерфейса — модуль и USB-программатор не могут совместно использовать единственный аппаратный UART Uno.
  • Сначала выполните сопряжение (PIN обычно 1234/0000); встроенный LED показывает состояние соединения.

Расположение выводов

Вывод Название Назначение
1 EN / KEY Удерживается в HIGH при включении питания для входа в режим команд AT
2 VCC 3.6–6 V. Отладочная плата стабилизирует напряжение до 3.3 V внутри
3 GND Земля
4 TXD Модуль передаёт. Подключается к RX микроконтроллера
5 RXD Модуль принимает. Логика 3.3 V — понижайте сигнал 5 V делителем
6 STATE HIGH при подключённом устройстве. Сам вывод очень полезен, но обычно не используется

Выводу STATE стоит уделять больше внимания. Робот, который его считывает, знает, когда телефон вышел за пределы дальности, и может безопасно остановиться вместо того, чтобы въехать в стену в ожидании команды, которая никогда не придёт.

Подключение к Arduino

Две ошибки здесь объясняют большинство сообщений «не подключается».

HC-05 Arduino Uno Примечание
VCC 5 V Встроенный регулятор справляется
GND GND
TXD Вывод 10 (SoftwareSerial RX) TX модуля → RX платы. Перекрестите их
RXD Вывод 11 через делитель (SoftwareSerial TX) TX платы → RX модуля через делитель 2:1
EN Оставить неподключённым Нужен только для режима AT
STATE Любой цифровой вывод Необязательная проверка соединения

Перекрестите последовательные линии

TX передаёт, RX принимает. Два устройства, оба пытающиеся передавать по одной подключённой линии, не добьются результата, и ошибки не будет: модуль успешно сопрягается, LED горит постоянно, но данные не передаются. TX модуля подключается к RX платы. RX модуля подключается к TX платы.

Понизьте напряжение на линии RX

RXD — вход 3.3 V, а Arduino Uno выдаёт 5 V. Нужны два резистора:

Arduino TX ──── 1 kΩ ──┬── HC-05 RXD
                        │
                      2 kΩ
                        │
                       GND

Для TXD в обратном направлении делитель не нужен: выход 3.3 V модуля превышает порог высокого уровня 3.0 V Uno.

Не используйте выводы 0 и 1

У Uno есть один аппаратный UART, и он уже занят USB-программатором. При подключении модуля к этим выводам загрузка завершается ошибкой, пока модуль подключён, вывод монитора последовательного порта направляется в модуль, а отладка становится невозможной. Используйте SoftwareSerial на двух других выводах.

Минимальный рабочий код

#include <SoftwareSerial.h>

SoftwareSerial bt(10, 11);      // RX (from module TX), TX (to module RX)
const int STATE_PIN = 8;

void setup() {
  Serial.begin(115200);         // USB, for debugging
  bt.begin(9600);               // HC-05 default in data mode
  pinMode(STATE_PIN, INPUT);
}

void loop() {
  // Lose the link, stop the robot. Do this before reading commands.
  if (digitalRead(STATE_PIN) == LOW) { stopMotors(); }

  if (bt.available()) {
    char c = bt.read();
    switch (c) {
      case 'F': driveForward();  break;
      case 'B': driveBackward(); break;
      case 'L': turnLeft();      break;
      case 'R': turnRight();     break;
      case 'S': stopMotors();    break;
    }
    Serial.print("cmd: "); Serial.println(c);   // echo to USB for debugging
  }
}

Проверка соединения в начале цикла — часть, которую большинство руководств опускает, и именно она предотвращает потерю управления. Дальность Bluetooth составляет около 10 m, а стены резко её сокращают; робот, продолжающий выполнять последнюю команду после разрыва связи, будет двигаться, пока не столкнётся с препятствием.

Режим команд AT

Для изменения имени модуля, скорости передачи или PIN требуется режим AT, вход в который выполняется по определённой последовательности, нигде не указанной в самом модуле.

  1. Отключите питание модуля.
  2. Удерживайте EN в HIGH (либо нажмите и удерживайте маленькую кнопку, если она есть на плате).
  3. Включите питание, удерживая EN.
  4. Теперь LED мигает медленно — примерно один раз за две секунды, — а не быстро.
  5. Общайтесь с модулем на скорости 38400 бод, а не 9600, и передавайте перевод строки и возврат каретки.
AT                    -> OK
AT+NAME=LineBot       -> OK      set the name shown when pairing
AT+PSWD="1234"        -> OK      set the pairing PIN (quotes on newer firmware)
AT+UART=115200,0,0    -> OK      data-mode baud rate
AT+ROLE=0             -> OK      0 = slave (normal), 1 = master
AT+ADDR?              -> +ADDR   the module's own address

Две тонкости: в режиме AT всегда используется 38400 бод независимо от заданной скорости в режиме данных, а частота мигания LED — единственный надёжный признак нахождения в этом режиме. Быстрое мигание означает режим данных, и команды AT будут просто передаваться по радио сопряжённому устройству.

HC-05 или HC-06?

Они выглядят одинаково и продаются как взаимозаменяемые, но реальное различие всё же есть.

HC-05 HC-06
Роль Ведущий или ведомый Только ведомый
Может инициировать соединение Да Нет
Режим AT Через вывод EN, 38400 В любое время при отсутствии сопряжения, на скорости данных
Цена Немного выше Немного ниже

Если модулю достаточно только принимать соединение от телефона, подойдёт HC-06. Если двум роботам потребуется связываться друг с другом либо роботу потребуется подключаться к модулю, а не ждать соединения, нужна роль ведущего HC-05.

Диагностика

Симптом Вероятная причина Исправление
Сопряжение проходит, но данные не передаются TX/RX не перекрещены TX модуля → RX платы, RX модуля → TX платы
Появляются случайные символы Несовпадение скорости передачи 9600 бод на обоих концах или одинаковое заданное значение
Загрузка завершается ошибкой при подключённом модуле Модуль занимает выводы 0/1 Перенесите на выводы SoftwareSerial
Команды AT ничего не делают Модуль не находится в режиме AT Удерживайте EN во время включения питания; проверьте медленное мигание
Режим AT не даёт ответа Используется скорость режима данных В режиме AT всегда 38400 бод
Сопряжение не выполняется Неверный PIN Сначала попробуйте 1234, затем 0000
Связь пропадает на расстоянии в несколько метров Дальность класса 2 и стены Так и должно быть; используйте вывод STATE для безопасного отключения
Робот продолжает движение после отключения Связь не проверяется Считывайте STATE и останавливайтесь при LOW
Работает от USB, но не от батареи Просадка питания Всплески передачи радиомодуля требуют источника 5 V с малым выходным сопротивлением и достаточным запасом по току

HC-05 или ESP32?

Если вы выбираете компоненты, а не используете то, что уже есть, именно в этом состоит реальный выбор.

HC-05 + Arduino ESP32
Беспроводная связь Bluetooth Classic SPP Встроенные Wi-Fi и Bluetooth
Дополнительное оборудование Модуль, делитель, два вывода Нет
Интерфейс управления Поток последовательных байтов Веб-страница, которую обслуживает сам робот
Дальность ~10 m ~50 m по Wi-Fi или в любой точке сети
Нужно приложение на телефоне Да — универсальный Bluetooth-терминал Нет — любой браузер
Обучающая ценность Последовательные протоколы и максимально простая связь Сетевые технологии — более обширная тема

HC-05 — правильный выбор, если Arduino уже есть и нужен кратчайший путь к беспроводному роботу. Он действительно прост: байт на входе, байт на выходе и полное отсутствие сетевых концепций. Для новой конструкции, где беспроводная связь обязательна, ESP32 делает больше при меньших затратах и не требует дополнительных деталей, а робот, обслуживающий собственную страницу управления, вообще не требует устанавливать приложение на чей-либо телефон.

Исследуйте граф

Используется в этих сборках

Проекты, учебные пути и симуляторы, в которых используется Модуль Bluetooth HC-05.

Сравнение

Альтернативы

Вопросы

Модуль Bluetooth HC-05: частые вопросы

Что такое HC-05?

HC-05 — модуль Bluetooth, который превращает беспроводное соединение в обычную последовательную связь (UART). Для микроконтроллера он выглядит как проводной последовательный кабель: байты считываются и записываются через TX/RX, но на другом конце находится телефон или компьютер (PC), подключённые по Bluetooth. Это самый простой способ управлять роботом без проводов.

Как подключить HC-05 к Arduino?

Подайте питание на VCC и GND, затем перекрестите последовательные линии — TX модуля с RX Arduino, RX модуля с TX Arduino. Поскольку вывод RX HC-05 рассчитан на 3.3 V, понизьте делителем напряжения уровень 5 V на выходе TX Arduino. После этого всё, что выводится через последовательный интерфейс, будет беспроводным способом передаваться на сопряжённый телефон, и наоборот.

Какова дальность HC-05?

Около 10 метров в пределах прямой видимости: это устройство Bluetooth класса 2. Стены и помехи уменьшают дальность. Этого достаточно для управления роботом в пределах комнаты с телефона, но для управления на большом расстоянии следует перейти на Wi-Fi или специализированное радио.

Как сопрягать модули HC-05?

Для сопряжения с телефоном включите модуль, откройте настройки Bluetooth на телефоне, выберите HC-05 и введите PIN (обычно 1234 или 0000). Чтобы сопрядить два HC-05 друг с другом, командами AT назначьте один ведущим, другой ведомым и свяжите их по адресу.

Как программировать HC-05?

У HC-05 есть два режима. В режиме данных он просто передаёт последовательные байты. Чтобы изменить имя, скорость передачи или роль ведущего/ведомого, переведите его в режим команд AT — удерживайте вывод EN/KEY в высоком уровне при включении питания — и отправляйте команды AT через последовательный интерфейс.

Дополнительные материалы

Источники