Радиомодуль SI4432: выводы, подключение к Arduino, обмен данными

Радиомодуль SI4432: выводы, подключение к Arduino, обмен данными

Трансивер SI4432 обеспечивает двустороннюю связь на 240–930 МГц на дистанции до 1 км. Рассказываем о выводах, подключении по SPI и работе с библиотекой RF22.

Возможности трансивера

Модули на микросхеме SI4432 — это компактные приёмопередатчики для двусторонней радиосвязи в диапазоне от 240 до 930 МГц. На открытой местности связь держится на расстоянии до 1 км, в помещении — на 100–300 м. Поддерживаются три вида модуляции: FSK, GFSK и OOK, а мощность передатчика достигает +20 дБм.

Радиомодуль SI4432
  • Частотный диапазон: 240–930 МГц
  • Чувствительность приёмника: до 121 дБм
  • Модуляция: FSK (ЧМн), GFSK (ГЧМн), OOK (АМн)
  • Максимальная выходная мощность: 20 дБм
  • Скорость передачи данных: 0,123–256 кбит/с
  • Напряжение питания: 1,8–3,6 В
  • Рабочая температура: от −20 до 60 °C

Назначение выводов

Назначение выводов радиомодуля SI4432
  • VDD — питание, GND — общий провод
  • NSEL — разрешение работы интерфейса SPI
  • SCLK — тактовый сигнал SPI
  • SDI — приём данных по SPI, SDO — отправка данных по SPI
  • NIRQ — прерывание по получению данных
  • SDN — перевод в режим энергосбережения (активный уровень HIGH)
  • GPIO0, GPIO1, GPIO2 — программируемые порты ввода-вывода

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

Обмен с контроллером идёт по SPI. Важный момент: модуль работает от 3,3 В, а логика Arduino Uno и Mega — 5 В, поэтому между ними обязательно ставят конвертер уровней. Питать трансивер желательно от отдельного источника 3,3 В; брать питание с вывода 3.3 В самой платы допустимо только при передаче на небольшое расстояние.

GNDGNDGND
SDNGNDGND
NIRQD2D2
NSELD10D53
SCLKD13D52
SDID11D51
SDOD12D50
Схема подключения SI4432 к плате Arduino

Обратите внимание на вывод SDN: высокий уровень на нём переводит трансивер в режим энергосбережения, поэтому в приведённой схеме он соединён с землёй, и модуль постоянно активен. Вывод прерывания NIRQ на обеих платах заводится на D2, а линии SPI различаются: у Uno это D10–D13, у Mega — D50–D53.

Первая проверка: примеры библиотеки RF22

Для работы с модулем используется библиотека RF22. Проверить пару трансиверов проще всего её штатными примерами: на одну плату загружается rf22_client, на другую — rf22_server.

Примеры rf22_client и rf22_server в библиотеке RF22

Клиент периодически отправляет строку Hello world, ждёт ответа и сообщает в монитор последовательного порта, пришёл он или нет. Сервер постоянно слушает эфир и на каждое полученное сообщение отправляет ответ. Открыв монитор порта для обеих плат, можно наблюдать обмен с двух сторон.

Проект: температура и влажность по запросу

Более практичный пример — передача показаний датчика с одной платы на другую по запросу. Для него понадобятся две платы Arduino Uno, две макетные платы, два модуля SI4432, два конвертера уровней и модуль GY21 с датчиком SHT21, который подключается к серверной стороне.

Клиент раз в 3 секунды поочерёдно отправляет в эфир текстовый запрос tempSH21 или humiditySH21, дожидается окончания передачи (waitPacketSent) и ждёт ответа с тайм-аутом. Полученное значение выводится в монитор порта с пометкой, что именно запрашивалось. Если инициализация трансивера не удалась, скетч сообщает об этом строкой si4432 no init.

Сервер, помимо SPI и RF22, подключает библиотеки Wire и SHT2x. Он ожидает входящий пакет, определяет по тексту запроса, что требуется — температура или влажность, — считывает соответствующую величину с SHT21, преобразует число в строку и отправляет его обратно. На нераспознанный запрос в порт выводится сообщение error, а в ответ уходит значение 999.

Обе программы открывают последовательный порт на скорости 9600, так что после загрузки скетчей работу связки удобно контролировать в двух окнах монитора порта: у клиента видны отправленные запросы и полученные значения температуры и влажности, у сервера — принятые запросы и отметки об отправке ответа. Схемы клиента и сервера различаются только наличием датчика: трансивер на обеих платах подключается одинаково, через конвертер уровней.

Что проверить при отсутствии связи

Если модули не обмениваются данными, причину обычно ищут в питании, монтаже или несовпадении радиопараметров:

  • подано ли питание на модуль и достаточно ли его
  • правильно ли модуль соединён с платой Arduino
  • совпадают ли на обоих модулях частота, скорость передачи и тип модуляции

← Все статьи