Радиомодуль HC-12: беспроводной UART, AT-команды и примеры

HC-12 передаёт последовательные данные по радио на расстояние до 1800 м. Разбираем выводы, режимы работы, AT-команды и способы повысить надёжность обмена.
Беспроводная замена проводу UART
HC-12 — приёмопередатчик, задача которого — перенести цифровой сигнал по воздуху без каких-либо изменений. У модуля два сигнальных вывода, для входящего и исходящего потока: то, что подано на вход одного модуля, появляется на выходах всех таких же модулей в радиусе приёма. Два разнонаправленных канала — это, по сути, UART, и разрабатывался HC-12 именно под него, что видно и по названиям выводов. При этом приёмников может быть несколько, а сам сигнал не обязан быть последовательным протоколом: на одной стороне может стоять обычный выключатель, на другой — лампа.

Плата компактная, 15×28 мм без учёта ножек и антенны. Вместо штатной антенны можно подключить внешнюю — для неё предусмотрен отдельный разъём. Это особенно полезно, когда модуль размещают в металлическом корпусе.

Выводы и подключение к Arduino
- VCC — питание +5 В (на Arduino — 5V)
- GND — общий провод
- RXD — вход данных, соединяется с TX контроллера
- TXD — выход данных, соединяется с RX контроллера
- SET — выбор режима: при высоком уровне модуль работает как приёмопередатчик, при низком переходит в режим настройки
Вывод SET подтянут к питанию встроенным резистором 10 кОм, поэтому, если менять настройки не планируется, его можно не подключать. В противном случае его заводят на любой свободный вывод контроллера. В схему также рекомендуется добавить небольшой конденсатор, сглаживающий колебания питания во время сеансов связи.

Характеристики и режимы
| Рабочая частота | от 433,4 до 473,0 МГц, задаётся в настройках |
| Дальность | до 1800 м на открытом пространстве при оптимальных условиях |
| Мощность передатчика | до 100 мВт, 8 уровней |
| Режимы работы | 4 (FU1–FU4) |
| Скорость обмена | 1200–115200, по умолчанию 9600 |
| Шаг частотного канала | 400 кГц |
| Трансивер | SI4463 |
Режимов четыре. FU1 — экономичный, с потреблением 3,6 мА. FU2 — сверхэкономичный, 80 мкА. FU3 — скоростной, он установлен по умолчанию и потребляет 16 мА. FU4 — режим максимальной дальности с тем же током 16 мА, но с жёсткими ограничениями: скорость только 1200, не более 60 байт за передачу и пауза между пакетами не менее 2 секунд. Наиболее универсален третий режим, остальные нужны в специфических случаях.
Настройка AT-командами
Чтобы изменить параметры, на SET подают низкий уровень и примерно через 80 мс начинают обмен командами. После возврата высокого уровня модуль за те же 80 мс переходит в рабочий режим. Настройки хранятся в энергонезависимой памяти и после отключения питания не теряются.
- AT — проверка связи; исправный модуль отвечает OK
- AT-Bxxxx — скорость передачи: от 1200 до 115200 с удвоением на каждом шаге. После смены скорости общаться с модулем нужно уже на новой
- AT+Cxxxx — номер частотного канала; независимые сети разносят не менее чем на 5 каналов
- AT-FUx — выбор режима работы с 1 по 4
- AT-Px — мощность от 1 до 8; по умолчанию максимальная, снижение уменьшает потребление и нагрев
- AT-DEFAULT — возврат к заводским настройкам
С ростом скорости падают надёжность и дальность. Для большинства задач заводские параметры оптимальны; менять их имеет смысл, если на первом канале много помех, если рядом должны работать несколько независимых сетей, если нужна предельная дальность в ущерб скорости или требуется сверхнизкое энергопотребление.
Сети из нескольких модулей
Поскольку каждый модуль слышит все остальные в зоне приёма, на HC-12 можно строить не только связь точка-точка, но и простые сети по образцу RS-485, только без проводов. При этом приходится дополнительно заботиться о помехоустойчивости.

От простой передачи к надёжной
В базовом примере на два одинаковых устройства загружается одна программа: нажатие кнопки на одном включает светодиод на другом. Кнопка подключена к выводу 2, светодиод — к 13, SET — к выводу 6 с высоким уровнем, порт открыт на 9600. При нажатии отправляется символ 1, при отпускании — 5. На практике такая схема срабатывает не всегда: радиоканал теряет байты даже на малом расстоянии, а при одновременном нажатии кнопок возникает коллизия.
Надёжность повышают избыточностью. Команда упаковывается в пакет из четырёх байт: стартовый 0x10, номер копии, сама команда и стоповый 0x20, и пакет отправляется три раза подряд. Приёмник выделяет пакет по первому и последнему байту, выполняет команду, а если принятая копия не последняя — отбрасывает остальные. После такой доработки сбои практически исчезают, и связка стабильно работает даже с тремя и более устройствами. Дальше систему можно улучшать: убрать delay(), добавить контрольную сумму, разделить опрос кнопок и отправку, а при риске одновременной передачи — ввести поочерёдный опрос устройств, как в RS-485.
Перед началом работы полезно убедиться, что модуль исправен: программа переводит SET в низкий уровень, отправляет AT и не идёт дальше, пока не получит OK.
Помехи и совместимость
Связи мешают толстые стены, крупные металлические предметы, а также электромоторы и другие мощные приборы. Часть помех удаётся обойти сдвигом частоты: эфир оценивают осциллографом или логическим анализатором на выводе TX и переходят на 5 каналов, пока не найдётся тихий участок. Аппаратно качество улучшают внешняя антенна и мощный стабильный источник питания. С любым UART-устройством HC-12 работает без особенностей, достаточно согласовать скорость. Модуль HC-11 похож в подключении и настройке, но построен на трансивере CC1101 и с HC-12 несовместим.