Перейти к основному содержимому

UART Bluetooth-модуль

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

Обобщённый беспроводной 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 с SPPBluetooth 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. Безопасный протокол

Спроектируйте набор из четырёх команд для мобильного робота. Задайте конец кадра, допустимые параметры, ответ контроллера и поведение при тайм-ауте. Готовую реализацию моторов не добавляйте.

Проверьте себя

  1. Где в этой системе заканчивается UART и начинается Bluetooth?
  2. Чем Classic SPP отличается от BLE GATT?
  3. Почему TX подключают к RX?
  4. Зачем нужен общий GND при отдельном питании модуля?
  5. Почему надпись 5V возле VCC не описывает вход RX?
  6. Что означает порядок аргументов SoftwareSerial(rxPin, txPin)?
  7. Зачем команде явный конец и ограничение длины?
  8. Как должен вести себя робот при потере связи?
Ориентиры для самопроверки

Сначала ответьте без подсказки. Ответ можно считать полным, если вы:

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

Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.

Словарь статьи

  • Радиомодуль — устройство, связывающее проводной интерфейс контроллера с беспроводным каналом.
  • Bluetooth Classic — режим Bluetooth, в котором, среди прочего, определён профиль SPP.
  • Bluetooth Low Energy — режим Bluetooth с моделью сервисов и характеристик GATT.
  • SPP — профиль последовательного порта Bluetooth Classic.
  • GATT — модель доступа к сервисам и характеристикам в BLE.
  • AT-команда — текстовая команда настройки, определённая прошивкой модуля.
  • UART-мост — прозрачная передача байтов между двумя интерфейсами.
  • Level shifter — схема согласования логических уровней напряжения.
  • Тайм-аут — предел времени ожидания, после которого система переходит в безопасное состояние.

Связанные темы

Источники