Компонент · Связь
Модуль Bluetooth HC-05
HC-05 добавляет роботу Bluetooth-связь: управляйте им с телефона или передавайте данные через те же TX/RX, что и по проводу.
Что это такое
HC-05 — самый простой способ сделать робота беспроводным. Это модуль Bluetooth, который работает как последовательный кабель без кабеля: микроконтроллер считывает и записывает байты через TX/RX точно как при связи по USB, но на другом конце находится телефон или ноутбук, сопряжённые по Bluetooth. Отправьте F из приложения на телефоне, и робот поедет вперёд — без Wi-Fi, сети и учётных записей.
Как это работает
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, вход в который выполняется по определённой последовательности, нигде не указанной в самом модуле.
- Отключите питание модуля.
- Удерживайте
ENв HIGH (либо нажмите и удерживайте маленькую кнопку, если она есть на плате). - Включите питание, удерживая
EN. - Теперь LED мигает медленно — примерно один раз за две секунды, — а не быстро.
- Общайтесь с модулем на скорости 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 через последовательный интерфейс.
Дополнительные материалы