UART Bluetooth-модуль
Беспроводной модуль может принимать данные от телефона и передавать их Arduino через обычный UART. Для скетча это поток байтов, похожий на Serial Monitor. Но слово «Bluetooth» не определяет радиорежим, профиль, распиновку, скорость UART или допустимые напряжения. Эти сведения берут из документации точной модели и платы-носителя.

На стороне Arduino обычно соединяют TX контроллера с RX модуля, TX модуля с RX контроллера и объединяют GND. Питание и уровни каждого сигнального входа проверяют отдельно. Bluetooth Classic с профилем последовательного порта и Bluetooth Low Energy с GATT — разные способы связи; приложение и формат обмена должны соответствовать модулю.
Зачем это нужно
Беспроводной канал удобен для учебного робота:
- отправлять команды движения с телефона;
- менять коэффициенты регулятора без USB-кабеля;
- получать короткую телеметрию;
- включать режим калибровки;
- проверять датчики после сборки корпуса;
- управлять светом или сервоприводом на стенде.
UART позволяет сначала отладить формат команд по проводу, а затем заменить компьютер радиомодулем. При этом беспроводная связь добавляет задержки, разрывы соединения и вопросы доступа. Робот должен безопасно остановиться, если команды перестали приходить.
Главная идея
Модуль соединяет два разных обмена:
Arduino <-> UART <-> радиомодуль <-> Bluetooth-соединение <-> приложение
UART существует только между микроконтроллером и модулем. По радио байты могут передаваться через Bluetooth Classic SPP или через характеристику BLE GATT, которую приложение воспринимает как поток только по соглашению. Поэтому выражение «Bluetooth Serial» нельзя автоматически переносить между любыми модулями.

Classic и Low Energy — не одно и то же
| Свойство | Bluetooth Classic с SPP | Bluetooth Low Energy |
|---|---|---|
| Типичный программный интерфейс | профиль Serial Port Profile создаёт последовательный канал | данные читают и записывают через сервисы и характеристики GATT |
| Представление в приложении | часто поток байтов | отдельные операции над характеристиками и уведомления |
| Обнаружение возможностей | профиль и параметры соединения | таблица сервисов, UUID характеристик и их свойства |
| Совместимость приложения | нужен клиент, поддерживающий SPP | нужен BLE-клиент с подходящим GATT-сервисом |
| Настройка модуля | зависит от прошивки и AT-команд | также зависит от прошивки, сервиса и характеристик |
BLE-модуль может рекламироваться как «UART», если производитель реализовал собственный сервис с характеристиками записи и уведомлений. Это не превращает GATT в аппаратный UART и не гарантирует совместимость с приложением для Classic SPP.
Некоторые телефоны и операционные системы поддерживают профили по-разному. Проверяйте требования целевой платформы до покупки партии модулей.
Контакты и электрические уровни
У готовой платы могут встречаться VCC, GND, TXD, RXD, STATE, KEY, EN и другие контакты. Их назначение зависит от производителя и версии carrier board.
Базовое UART-соединение выглядит так:
TX Arduino -> RX модуля
RX Arduino <- TX модуля
GND Arduino --- GND модуля
| Что указано на плате | Чего это не гарантирует |
|---|---|
VCC 5V | что вход RX допускает логический уровень 5 В |
| встроенный стабилизатор | что на сигнальных линиях есть level shifter |
контакт KEY | одинаковый способ входа в режим команд у всех версий |
| название популярного модуля | подлинность микросхемы, прошивку и одинаковую распиновку |
| заводская скорость из примера | скорость именно вашего режима и экземпляра |
Плата-носитель может принимать более высокое напряжение питания благодаря стабилизатору, а логические входы радиочипа оставаться рассчитанными на меньшее напряжение. Измерьте и прочитайте схему модуля. Если требуется преобразование уровня, его выбирают по направлению, скорости и порогам. Делитель на линии Arduino TX иногда подходит конкретному однонаправленному входу, но не является универсальным решением для любой платы.
Питание модуля должно быть устойчивым к импульсам потребления при передаче. Конденсаторы и источник выбирают по руководству. Общий GND нужен даже при отдельном стабилизированном питании.
Аппаратный или программный UART
У Arduino Uno основной аппаратный UART связан с USB-последовательным преобразователем и контактами 0/1. Подключённый модуль может мешать загрузке скетча и Serial Monitor. В учебном стенде часто используют SoftwareSerial на других цифровых пинах.
| Вариант | Преимущество | Ограничение |
|---|---|---|
аппаратный Serial | точная периферия, хорошая производительность | может быть занят USB и загрузчиком |
| дополнительный аппаратный порт | независимый обмен на платах с несколькими UART | доступен не на каждой плате |
SoftwareSerial | можно выбрать другие пины на поддерживаемых платах | ограничения скорости, приёма и совместимости с прерываниями |
На плате с несколькими аппаратными портами предпочтительнее использовать Serial1, Serial2 или другой порт из её документации. Номера пинов нельзя переносить с Uno на Mega, Nano Every или современную плату без проверки pinout.
Прозрачный мост для первого теста
В конструкторе SoftwareSerial(rxPin, txPin) первым указывается пин приёма Arduino. В схеме к нему приходит TX модуля.
#include <SoftwareSerial.h>
const uint8_t radioRxPin = 10;
const uint8_t radioTxPin = 11;
SoftwareSerial radio(radioRxPin, radioTxPin);
void setup() {
Serial.begin(115200);
radio.begin(9600);
Serial.println("UART bridge ready");
}
void loop() {
while (radio.available() > 0) {
Serial.write(radio.read());
}
while (Serial.available() > 0) {
radio.write(Serial.read());
}
}
Значение 9600 — только пример. Оно должно совпасть с текущей UART-скоростью модуля. Режим передачи данных и режим AT-команд могут иметь разные настройки.
Прозрачный мост не управляет мотором. Он помогает проверить направления линий, скорость и фактические ответы модуля. Перед отправкой AT-команд найдите их синтаксис, окончание строки и условия входа в командный режим в документации прошивки.
Формат команд для робота
Один символ вроде F легко проверить, но расширять такой протокол трудно. Полезно заранее определить кадр:
команда,параметр\n
Например, приложение может посылать команду движения и числовое значение. Скетч накапливает байты до \n, проверяет длину, распознаёт имя и только затем меняет состояние робота.
| Правило | Зачем оно нужно |
|---|---|
| ограничить длину строки | не выйти за границы буфера |
| иметь явный конец кадра | отличить две соседние команды |
| проверять диапазон числа | не передать недопустимый PWM или угол |
| отвечать коротким статусом | приложение понимает, принята ли команда |
| игнорировать неизвестное | случайные данные не запускают действие |
| хранить время последней команды | остановить робот при потере связи |
Не используйте String без оценки памяти на маленьких AVR-платах в длительно работающем проекте. Фиксированный символьный буфер и строгая проверка делают поведение предсказуемее.
Тайм-аут безопасной остановки
Беспроводное соединение может оборваться, пока телефон продолжает показывать кнопку «вперёд». Поэтому движение не должно зависеть от единственной команды, принятой несколько минут назад.
Принцип:
если корректная команда движения давно не приходила -> остановить моторы
Тайм-аут выбирают по частоте команд и динамике робота. Приложение периодически отправляет подтверждение активности, а контроллер обновляет lastCommandTime только после успешной проверки кадра. Аппаратная кнопка остановки и локальные датчики безопасности не должны зависеть от Bluetooth.
Пример структуры обработчика
Для мобильного робота команды лучше переводить в состояния, а не вызывать моторы прямо из функции чтения UART:
| Полученный кадр | Новое состояние | Отдельное действие главного цикла |
|---|---|---|
| корректное движение | DRIVE | задаёт скорости через драйвер |
| остановка | STOPPED | отключает PWM |
| неверный параметр | состояние не меняется | отправляет сообщение об ошибке |
| потеря активности | TIMEOUT | останавливает привод и сигнализирует |
Так UART-парсер, логика безопасности и управление драйвером проверяются отдельно. Нельзя позволять строке из радио непосредственно формировать номера пинов или произвольные значения без ограничения.
Настройка модуля
AT-команды у разных модулей несовместимы. Различаться могут:
- скорость UART в командном режиме;
- уровень или момент подачи сигнала на
KEY/EN; - окончания строки
CR,LFилиCRLF; - регистр букв;
- допустимость изменения имени, PIN, роли или GATT-параметров;
- необходимость перезапуска после сохранения.
Сначала сохраните текущую конфигурацию. Меняйте один параметр за раз и проверяйте ответ. Если связь потеряна после смены скорости, настройте Arduino на новое значение, а не перебирайте электрические соединения во включённом стенде.
Безопасность и доступ
Заводской PIN или факт pairing не следует считать достаточной защитой для устройства, способного двигаться. Для учебной локальной модели применяют хотя бы:
- непубличное имя и изменённые заводские параметры, если модуль позволяет;
- проверку формата и диапазона каждой команды;
- тайм-аут остановки;
- физическую кнопку отключения моторов;
- ограниченный PWM при испытании;
- отсутствие опасного механизма на первом тесте.
Для продукта с риском для людей нужна полноценная модель угроз, аутентификация и безопасный протокол выше уровня простого UART-моста.
Диагностика
| Симптом | Что проверить |
|---|---|
| модуль не включается | питание, полярность, ток источника |
| телефон не видит устройство | Classic или BLE, режим рекламы, состояние подключения |
| телефон видит, приложение не подключается | поддержку SPP или нужного GATT-сервиса |
| UART молчит | перекрёстные TX/RX, общий GND, скорость и формат |
| приходят нечитаемые символы | скорость, уровни, помехи, окончание строки |
| скетч не загружается | конфликт модуля с аппаратным UART загрузчика |
| робот продолжает ехать после разрыва | отсутствие или ошибка тайм-аута |
Отладку разделяют: сначала проверяют питание, затем UART через мост и только потом мобильное приложение и команды робота.
Что запомнить о Bluetooth-модуле
- UART — проводной интерфейс Arduino с модулем, а Bluetooth — радиоканал модуля.
- Classic SPP и BLE GATT требуют разных клиентов и логики обмена.
TXсоединяется с противоположнымRX, а земли объединяются.- Допустимый
VCCплаты не гарантирует такой же допустимый уровеньRX. - Скорость, AT-команды и распиновка зависят от конкретной платы и прошивки.
- Управляемый робот обязан остановиться при потере корректных команд.
Практика
Задание 1. Идентификация модуля
По маркировке и документации определите модель радиочипа и carrier board, радиорежим, профиль или GATT-сервис, питание, уровни RX/TX, заводскую скорость и вход в режим настройки. Не используйте сведения от внешне похожей платы.
Задание 2. Карта UART
Нарисуйте соединения TX/RX/GND и питания для вашей Arduino. Отметьте направление каждого сигнала и место преобразования уровня, если оно требуется по спецификации.
Задание 3. Прозрачный мост
Соберите UART-мост и обменяйтесь короткими строками между Serial Monitor и модулем. Проверьте разные варианты окончания строки, не изменяя конфигурацию устройства до фиксации исходных настроек.
Задание 4. Безопасный протокол
Спроектируйте набор из четырёх команд для мобильного робота. Задайте конец кадра, допустимые параметры, ответ контроллера и поведение при тайм-ауте. Готовую реализацию моторов не добавляйте.
Проверьте себя
- Где в этой системе заканчивается UART и начинается Bluetooth?
- Чем Classic SPP отличается от BLE GATT?
- Почему
TXподключают кRX? - Зачем нужен общий
GNDпри отдельном питании модуля? - Почему надпись
5VвозлеVCCне описывает входRX? - Что означает порядок аргументов
SoftwareSerial(rxPin, txPin)? - Зачем команде явный конец и ограничение длины?
- Как должен вести себя робот при потере связи?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Радиомодуль — устройство, связывающее проводной интерфейс контроллера с беспроводным каналом.
- Bluetooth Classic — режим Bluetooth, в котором, среди прочего, определён профиль SPP.
- Bluetooth Low Energy — режим Bluetooth с моделью сервисов и характеристик GATT.
- SPP — профиль последовательного порта Bluetooth Classic.
- GATT — модель доступа к сервисам и характеристикам в BLE.
- AT-команда — текстовая команда настройки, определённая прошивкой модуля.
- UART-мост — прозрачная передача байтов между двумя интерфейсами.
- Level shifter — схема согласования логических уровней напряжения.
- Тайм-аут — предел времени ожидания, после которого система переходит в безопасное состояние.
Связанные темы
- Протоколы обмена данными — электрическая и логическая основа UART.
- Монитор порта Serial — проводная отладка байтов и строк.
- Драйвер моторов — безопасное выполнение команд движения.
- Конструкция ветвления — выбор действия после проверки команды.