Радиомодуль nRF24L01: питание, подключение и примеры

Радиомодуль nRF24L01: питание, подключение и примеры

Радиомодули nRF24L01 диапазона 2,4 ГГц: дальность связи, особенности питания, работа с библиотекой RF24 и два проекта.

Назначение и варианты исполнения

Когда данные нужно передать на расстояние, а проложить провод невозможно — скажем, от уличного термодатчика к центральному устройству или от датчика движения к сирене в другом помещении, — используют радиоканал. Модули nRF24L01 работают в диапазоне 2,4–2,5 ГГц и стали популярны в любительских конструкциях благодаря простоте, надёжности и невысокой стоимости.

Радиомодуль nRF24L01 и назначение его выводов

Базовая плата содержит сам чип, штыревую колодку и антенну в виде дорожки-змейки. В такой комплектации дальность связи составляет до 100 м при прямой видимости и до 30 м в помещении. Версия с дополнительным усилителем и внешней антенной увеличивает дальность до 1000 м.

Модуль nRF24L01 с усилителем и внешней антенной

Питание — главный источник проблем

Большинство трудностей при первом запуске связано с питанием. В момент инициализации модуль потребляет значительный ток, и штатный 3-вольтовый стабилизатор Arduino с ним не справляется — связь работает со сбоями. Решений два. Первое — припаять параллельно выводам VCC и GND модуля электролитический конденсатор ёмкостью около 100 мкФ: он сглаживает пульсации при старте и даёт запас энергии. Второе — применить плату-адаптер со встроенным стабилизатором. Она допускает внешнее питание от 4,8 до 12 В и обеспечивает выходной ток до 800 мА.

Адаптер со стабилизатором для nRF24L01
Электрическая схема модуля nRF24L01

Подключение и библиотека

Выводы CE и CSN модуля можно подключить к любым цифровым пинам Arduino — их номера указывают в скетче при создании объекта, например RF24 radio(10, 9). Библиотек для nRF24L01 несколько, наиболее популярной и стабильной считается RF24; вместе с ней подключают SPI.h и nRF24L01.h.

Скорость обмена и мощность передатчика задаются константами. Для скорости это RF24_250KBPS (250 кбит/с), RF24_1MBPS (1 Мбит/с) и RF24_2MBPS (2 Мбит/с). Для мощности — RF24_PA_MIN (−18 dBm), RF24_PA_LOW (−12 dBm), RF24_PA_HIGH (−6 dBm) и RF24_PA_MAX (0 dBm). На передатчике и приёмнике канал, скорость и мощность задают одинаковыми.

Мини-сеть: до шести передатчиков

Чаще всего используют пару модулей — передатчик и приёмник на одной частоте. Но nRF24L01 позволяет собрать и небольшую сеть: на одном канале могут работать до шести передатчиков и один приёмник. Каждому передатчику назначается идентификатор «трубы» (Pipe ID) — число из 5 байт, а приёмнику сообщают идентификаторы всех передатчиков, которые он должен слушать. Правила выбора идентификаторов такие:

  • в пределах одного канала идентификатор каждого передатчика уникален;
  • Pipe0 и Pipe1 различаются всеми пятью байтами, например 0x7878787878 и 0xB4B5B6B7F1;
  • Pipe2–Pipe5 отличаются от Pipe1 только последним байтом, например 0xB4B5B6B7CD, 0xB4B5B6B7A3, 0xB4B5B6B70F, 0xB4B5B6B705.

Простейшая связка: потенциометр и светодиод

В учебном примере две платы Arduino соединены по радио: на первой потенциометр на входе A7, на второй — светодиод на пине 3. Обе программы после radio.begin() выбирают пятый канал (2,405 ГГц), скорость 1 Мбит/с и мощность RF24_PA_HIGH. Передатчик открывает трубу вызовом radio.openWritingPipe(0x7878787878LL), в цикле считывает потенциометр и отправляет значение через radio.write(). Приёмник вызывает radio.openReadingPipe(1, 0x7878787878LL) и radio.startListening(), а при появлении данных (radio.available()) читает их и задаёт яркость светодиода, пересчитывая диапазон 0–1023 в 0–255.

Удалённый контроль температуры и влажности

Основная сфера применения этих модулей — удалённый мониторинг. В первом проекте передатчик раз в две секунды опрашивает датчик DHT11 на пине 3 (библиотека iarduino_DHT) и отправляет массив из двух значений — температуры и влажности. Приёмник выводит их на символьный дисплей 16x2, подключённый по I2C через библиотеку LiquidCrystal_I2C. Настройки радио те же: канал 5, 1 Мбит/с, труба 0x7878787878. Если на экране ничего не появляется, стоит проверить адрес дисплея: у I2C-переходников он бывает разным, в примере это 0x27, а точное значение определяют скетчем-сканером шины I2C.

Второй вариант того же проекта построен на модулях nRF24L01+ с другими параметрами. Выводы CE и CSN подключены к пинам 7 и 8, канал — 0x55, скорость — 250 кбит/с, идентификатор — 0xF0F0F0F0E2. Датчик DHT11 на пине 6 опрашивается через библиотеку DHT.h каждые 10 секунд. Передаётся пакет из четырёх байт: стартовый байт 55, влажность, температура и стоповый байт 56. Приёмник выводит влажность и температуру в две строки дисплея.

← Все статьи