Обзор радио модуля NRF24L01+

Обзор радио модуля NRF24L01+Начну серию обзоров по недорогим модулем радиосвязи работающих на частоте 2,4 ГГц (трансивер), которые основаны на чипе от Nordic Semiconductor nRF24L01+, поддерживающий передачу данных до 2 мбит/с и может работать на 126 каналов.  В данной статье расскажу о NRF24L01+ с малой мощностью и малым радиусом действия (до 100 метров или около 30 метров в помещении), в следующей статье расскажу о модуле NRF24L01+ с внешней антенной которые имеет большую мощность (до 1000 км). Так же, для подключения к Arduino буду использовать Адаптер для NRF24L01+.

Технические параметры 

На модуле расположена основная микросхема nRF24L01+, рядом установлен кварцевый резонатор, антенна и электрическая обвязка, программное обеспечение микросхемы nRF зашивают на производстве. Связь осуществляется в двунаправленном режиме по интерфейсе SPI (Serial Peripheral Interface), для этого предусмотрен 8 контактный разъем (шаг 2.54 мм).

Обзор радио модуля NRF24L01+

Модуль автоматически формирует и отправляет пакеты, пользователю доступны только дополнительные настройки, такие как скорость передачи, отправка и принятие данных, мощность передатчика и так далее. Каждому модулю присваивается уникальный адрес в пределах сети, что позволяет организовать большую сеть, для обмена данными между датчиками температуры, давления, а так же организовать обмен командами в системе умный дом. Принципиальную схему NRF24L01 с минимальной обвязкой можно посмотреть на фото ниже, так же кому интересно на официальном сайте, можно скачать полную документацию с Gerber файлами, прошивку, программы и т.д.

Схема радио модуля NRF24L01+

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

Необходимые детали:
► Arduino UNO R3 x 2 шт.
► Провод DuPont, 2,54 мм, 20 см x 2 шт.
► Кабель USB 2.0 A-B x 2 шт.
► Радиомодуль nRF24L01+ x 2 шт.
► Тактовая кнопка x 1 шт.
► Светодиод 5 мм x 1 шт.
► Резистор 0.125 Вт, 10 кОм — x 1 шт. (для кнопки)
► Резистор 0.125 Вт, 270 Ом — x 1 шт.  (для светодиода)

Подключение:
Для подключения nRF24L01 к Arduino используется интерфейс SPI и так как вывода этого интерфейса на различных платах отличается, приведу краткую таблицу подключения для различных плат.

Таблица подключения радио модуля NRF24L01+

На модуле nRF24L01+ предусмотрен один разъем 4 х 2 с шагом контактов 2.54 мм, назначение каждого можно посмотреть на фотографии ниже.

Таблица подключения радио модуля NRF24L01+

Модуль работает от напряжения питания 3.3В и потребляет ток около 20мА. На некоторых плат Arduino нет встроенного стабилизатора напряжения, необходимо использовать внешний, например LM1117.

Внимание! Необходимо помнить, что модуль работает от 3.3 В и в нем защиты от переполюсовки, если не соблюдать два этих правила, можно сжечь модуль!

Теперь приступим к сборке, подключаем вывода напрямую (MISO-12, MOSI-11, SCK-13), выводы CE (ChipEnable) и CSN (ChipSelectNot) подключаем к D10 и D9, можно использовать и другие цифровые вывода, главное подправить программу. Далее необходимо подключить кнопку, одну ножку через резистор 10Ком, подключаем к GND (Arduino) и этот же контакт к выводу 7. Осталось подключить питание (главное помнить два правила, что описывал выше) вывода Vcc к +3.3V и GND к GND. Вывод IRQ не используется в большинстве программ включая этот пример. Аналогично собираем вторую схему, вместо кнопки у нас будет светодиод.

Схема подключения радио модуля NRF24L01+ к Arduino

Внимание! Для стабильной работы модуля NRF24L01+ необходимо припаять конденсатор на 10 мкФ (изначально тестировал без конденсаторов, модули лежали друг от друга на расстоянии 10 см и связи не было). Так-же, обязательно заземлите вывод 7, с помощью резистор на 10 кОм, а то будет ложное срабатывание кнопки. 

Обзор радио модуля NRF24L01+

Для этого эксперимента необходимо скачать и установить библиотеку «RF24». Затем скопируйте и вставьте этот пример кода в окно программы IDE Arduino и загрузите в контроллер.

Программа для передатчика:

  Скачать скетч master

Программа для приемника:

  Скачать скетч slave

Обзор радио модуля NRF24L01+

Обзор радио модуля NRF24L01+

Ссылки
  Библиотека RF24
  Документация к NRF24L01+

Купить на Aliexpress
  Контроллер Arduino UNO R3
  Провода DuPont, 2,54 мм, 20 см
  Датчик радио модуля NRF24L01+
  Датчик радио модуля NRF24L01+PA+LNA 
  Адаптер для NRF24L01+

Купить в Самаре и области
  Купить контроллер Arduino UNO R3
  Купить провода DuPont, 2,54 мм, 20 см
  Купить радио модуля NRF24L01+
  Купить радио модуля NRF24L01+PA+LNA
  Купить адаптер для NRF24L01+

Читайте также:

комментариев 9

  1. Николай:

    Спасибо за скетч! Я ,с вашей помощью, впервые осуществил связь между модулями. До этого думал что они бракованные. Но ваш скетч работает и даже в пределах квартиры!

  2. Артём:

    Отличная статья! Я мега начинающий , не могли бы вы мне подсказать как подключить несколько кнопок?

    • Сергей Мирошниченко:

      Добрый вечер, в комментарии некорректно отображается кода, чуть попозже доработаю статью.

  3. Юрий:

    Сергей, я только присматриваюсь к arduino. Хотя с arduino у меня опыта ноль. Ваша статья навела меня на мысль попробовать сделать что-то типа метеостанции с выносными беспроводными датчиками (температуры/влажности/давления). С центральным блоком в помещении с ЖКИ и кнопками и уличными (балконными, подвальными, тепличными и т.п.) датчиками.

    У меня к вам 2 вопроса:

    Вопрос 1:
    Если датчиков будет несколько, то центральное устройство должно поочередно их опрашивать. Я так понимаю, что для каждого датчика должен быть задан свой канал (исходя из терминологии в вашем коде) или они могут висеть на одном канале, но с разными идентификаторами ?

    Вопрос 2:
    Чтобы выносные датчики не разряжали зря батарейки/аккумы, крутясь в бесконечном цикле прослушивания эфира, напрашивается элементарный протокол обмена: датчик после сеанса обмена (с центральным устройством) уходит в сон на таймаут (скажем, 60 секунд), а затем просыпается (по таймеру) и слушает эфир какой-то промежуток времени (скажем, секунды 3). Если обмен в этот промежуток состоялся, то сразу после обмена снова в сон и таким образом может дольше продлить жизнь батарейки.

    А теперь и сам вопрос: насколько сложно реализовать подобное в среде разработки arduino? Ведь для этого надо программировать регистры микроконтроллера, включать прерывания, подготовить процедуру обработчика прерывания. А ваши примеры построены на бесконечном цикле…

    • Сергей Мирошниченко:

      Добрый день, Юрий.
      Ответ на вопрос 1: На одном канале может работать до шести NRF21L01, но с разными идентификаторами. (в сетях эту технологию называют «Звезда»)
      Ответ на вопрос 2: Для уменьшения электропотребления на передающих устройствах, можно отпаять все светодиоды и перевести микроконтроллер в спящий режим, а так же отключать NRF от питания, например на 60 секунд. Затем включать NRF и микроконтроллер, на небольшое время для отправки данных и снова переводить в спящий режим и так далее.

      Несложно сделать, в следующий статье покажу один из примеров.

    • Василий:

      Вопрос 1. В примерах к библиотеке RF24 есть скетч starping. Суть такова: пять датчиков шлют данные в эфир, а один читает их все и отправляет обратно отправителю. Классический пример, и все понятно.

      Вопрос 2. В примерах к библиотеке RF24 есть скетч pingpair_sleepy там приведен пример программной реализации ухода радио модуля в сон после сеанса передачи. Если вас интересуют прерывания по таймеру, то существует великолепная простая библиотека Timerone. Почитайте про неё.

      Все вышеописанное очень просто. Если будут еще вопросы, просмотрите остальные примеры. Если вы знаете C++, то проблемы решатся.

  4. толик:

    как сделать на 2-е и более кнопок с произвольным и даже одновременным их включением

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *