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

Содержание

В этой статье мы поговорим о nrf24l01 одном из самым популярных и недорогих радиомодулей для проектов Arduino и интернета вещей IoT. Модули nrf24l01 для Arduino легко найти в любом интернет-магазине, они относительно недороги. При этом с их помощью можно организовать достаточно надежную многоканальную связь с подтверждением доставки пакетов между контроллерами ардуино и другими устройствами. В этой статье мы рассмотрим описание, распиновку nrf24l01, а также узнаем, какие библиотеки можно использовать с этим радиомодулем.

Описание модуля NRF24L01

Нельзя создать по-настоящему интересный проект, не дав возможность создания коммуникаций между различными элементами системы. Поэтому так важно выбрать правильную платформу для организации связи между модулями. NRF24l01 отлично подходит для создания распределенных систем с датчиками и контроллерами, разнесенными на расстояния до 100 метров.

NRF24l01 – это высокоинтегрированная микросхема с пониженным потреблением энергии (ULP) 2Мбит/с для диапазона 2,4 ГГц. При помощи модуля можно связать несколько устройств для передачи данных по радиоканалу. Можно объединить до семи приборов в одну общую радиосеть на частоте 2,4 ГГц, один из модулей будет выступать в роли ведущего, остальные – ведомые. Радиомодуль NRF24l01 стоит дешево, поэтому его можно встретить в самых разных проектах – от умного дома до различных самодельных роботов.

Характеристики nrf24l01

  • Низкие затраты энергии;
  • Наличие усовершенствованного ускорителя аппаратного протокола ShockBurst;
  • Операционная система ISM;
  • Скорость передачи данных 250 Кбит/с, 1 Мбит/с и 2 Мбит/с;
  • Полная совместимость со всеми стандартными сериями nRF24L Nordic, а также сериями nRF24E и nRF240;
  • Напряжение питания 3,3В;
  • Рабочие температуры от -40С до 85С, температуры хранения от -40С до 125С;
  • Дальность связи до 100 м.

Основой модуля служит nRF24L01+ производства компании Nordic Semiconductor. На микросхеме расположены все необходимые элементы и вилка разъема. По интерфейсу SPI можно произвести настройку протокола, установить выходную мощность и наладить каналы обмена данных.

Сфера применения модуля nrf24l01

Одним из самых главных компонентов проектов IoT являются средства коммуникации. nrf24l01 можно с успехом применять в следующих областях:

  • Мобильная электроника;
  • Компьютеры;
  • Автоматизированные системы;
  • Различные элементы «умного дома» сигнализация, регулирование температуры и другие функции;
  • Игры;
  • Бытовая электроника.

В плату nRF24L01+ входят синтезатор частот, демодулятор, усилители и другие составляющие. Рабочая частота модуля определяется номером канала, диапазон частот, в котором происходит связь, 2,4 – 2,483 ГГц. Каналы располагаются через 1 МГц, то есть нулевому соответствует частота 2,4ГГц, каналу 83 – 2,483 ГГц.

Модуль имеет 4 рабочих режима – выключение (Power Down), спящий режим (Standby), прием данных(RX mode), передача данных (TX Mode). В режиме приема данных RX потребление тока выше, чем в режиме передачи данных TX.

За стабильную и надежную передачу и прием данных отвечает протокол Enhanced ShockBurst. Принимающее устройство должно давать ответ о приеме данных, подтверждая таким образом обратную связь.

Где купить модули

Купить nrf24L01 можно в любом интернет-магазине, торгующем электронными компонентами. Рекомендуется приобретать плату вместе со специальными модулями питания это позволит избежать множество непредсказуемых проблем, связанных с нестабильным питанием. Также рекомендуем обратить внимание на уже готовые шилды и платы со встроенными чипами nrf. Вот несколько примеров на Алиэкспресс:

Распиновка NRF24L01

Беспроводной модуль NRF2401 в Arduino

Помимо выходов питания линии сигналов могут подключаться к контактам с питающим напряжением 5 В. Вход устройства, которое подключается к плате, должен потреблять ток не выше 10 мА.

Микросхема содержит следующие выходы:

  • GND – земля;
  • VCC – напряжение питания 3,3В
  • CE – высокий уровень микросхемы;
  • CSN – включение низкого уровня микросхемы. В этом случае устройство реагирует на SPI команды;
  • SCK – такт SPI, максимальное значение 10 МГц;
  • MOSI – передача информации от контроллера;
  • MISO – прием данных в контроллер;
  • IRQ – сигнал для аппаратного прерывания.

Организация питания nrf24l01

Во время запуска микроконтроллера могут возникнуть проблемы, которые связаны с тем, что не предусмотрена нужная сила тока в модуле питания 3,3 В. Из-за этого могут возникнуть помехи, мешающие стабильной работе. Обычно подобные трудности появляются, когда используются платы Arduino Uno, Nano, Mega, то есть в тех, в которых не хватает мощности. Для приведенных видов плат на пины подается небольшой ток 50 мА.

Существует несколько методов решения этой проблемы:

  • Подключение конденсатора к микросхеме на 3, 3 В(+) и землю GND (-). Емкость лучше выбирать 10 мкФ и более.
  • Дополнительный источник напряжения на 3,3 В.
  • Разработка отдельной платы, установка на нее модуля nRF24L01 и добавление конденсаторов на 1 и 10 мкФ.
  • Применение YourDuinoRobo1, который обладает дополнительным регулятором на 3,3 В.

Различные версии модуля NRF24L01

Беспроводной модуль NRF2401 в Arduino

Данная версия обладает дальностью до 100 м для открытого пространства, в помещении дальность ниже – до 30 м. Размеры 29х15 мм.

Беспроводной модуль NRF2401 в Arduino

Мини NRF24L01. Характеристики и параметры те же, размеры 18х12 мм.

Беспроводной модуль NRF2401 в Arduino

Модуль, оснащенный внешней антенной и усилителем. Дальность увеличена до 1000 м на открытых территориях.

Беспроводной модуль NRF2401 в Arduino

Более сложный модуль nRF24LE1, работающий без платы Ардуино, то есть автономно.

Беспроводной модуль NRF2401 в Arduino

Подключение nRF24L01 к Ардуино

Вывод MOSI с платы nRF24L01 подключается к пину 11 для Ардуино Uno, Nano и на 51 для Arduino Mega. Контакт SCK нужно подключить к 13 для Ардуино Uno, Nano и 52 для Arduino Mega. MISO – к 12 для Ардуино Uno, Nano и 50 для Arduino Mega. Контакты CE и CSN подключаются к любому цифровому пину Ардуино. Питание – на 3,3 В. Если используется плата Arduino Mini, придется использовать внешний стабилизатор напряжения, так как на плате отсутствует выход 3,3В. Также к пинам питания можно добавить конденсатор на 10 мкФ и более для обеспечения стабильной и качественной работы. Модуль с припаянным конденсатором изображен на рисунке.

Беспроводной модуль NRF2401 в Arduino

Внешний вид макета представлен на рисунке ниже.

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

При подключении важно не перепутать напряжение – 5 Вольт могут вывести модуль из строя.

Подключение к Ардуино через адаптер NRF24L01

Адаптер специально разрабатывался для модуля NRF24L01+. На нем имеется специальный стабилизатор напряжения и удобно расположены выходы к контроллерам и платам Ардуино.

Беспроводной модуль NRF2401 в Arduino

Как видно, на адаптере имеется 2 вида разъемов. Двухрядный разъем используется для подключения радиомодуля, однорядный – для соединения с Ардуино. Отдельно расположены выходы на питание (5В) и землю.

Для подключения радиомодуль NRF24L01+ нужно вставить в соответствующий двухуровневый разъем. При помощи проводов адаптер подключается к плате Ардуино к тем же выводам, которые нужны для подключения напрямую к модулю. Для подключения к Arduino Uno, Nano: MISO-12, MOSI-11, SCK-13,выводы CE –к D10 и CSN – D9, вывод VCC к Arduino (+5V), а вывод GND к Arduino (GND).

Программирование nRF24L01

Для написания скетчей в среде ARDUINO IDE нужно установить 2 библиотеки RF24 и SerialFlow. Первая нужна для работы с модулем, вторая – для пакетной передачи данных. Ссылки на скачивание библиотек вы найдете в конце статьи.

Пример программы для передатчика. В первую очередь создается объект класса SerialFlow:

В этой строке 9 и 10 – это свободные пины с Ардуино, к которым подключаются контакты CN и CSN.

Настройка формата передаваемых пакетов производится в функции setup:

Первый аргумент (в данном случае число 2) определяет размер передаваемого числа. Для конкретного случая число находится в диапазоне от 0 до 655535 и занимает 2 байта. Для 0 до 255 будет занят 1 байт. Второй аргумент количество чисел.

Далее нужно настроить адреса передатчика и приемника:

Первым аргументом записывается адрес передатчика, вторым – адрес приемника.

Цикл loop выполняет отправку пакетов.

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

В коде так же записывается объект SerialFlow и настраиваются необходимые параметры пакета данных. Изменения происходят в строчке

Теперь первым аргументом должен быть указан адрес приемника, а вторым – передатчика.

После загрузки программы на оба модуля при правильном выполнении всех действий в окне будет появляться значение таймера в миллисекундах на передатчике.

Помимо библиотек RF24 и SerialFlow существует и другая библиотека Mirf. Выбор той или иной библиотеки определяется удобством работы.

Операторы для передачи данных между двумя модулями с помощью библиотеки Mirf:

  • payload = PAYLOAD; задает размеры буфера для приема. На payload установлено ограничение – максимальный размер равен 32 байтам.
  • setRADDR((byte*)’serv1′); выбор адреса приемника (размер не менее 3 байт и не более 5 байт).
  • setTADDR((byte *)’clie1′); выбор адреса передатчика (размер не менее 3 байт и не более 5 байт).. Во время передачи пакета данных на первом модуле происходит установка адресата Mirf.setTADDR((byte *)’clie1′), затем пакет отправляется ко второму модулю. После этого на втором модуле устанавливается Mirf.setTADDR((byte *)’serv1′) и возвращается ответ на первый модуль.
  • isSending() – проверка окончания передачи данных.
  • dataReady() – проверка получения входящего пакета.
  • getData((byte *) data); чтение полученных пакетов в переменную data.
  • send((byte *) data); подача команды на отправку пакета. В библиотеке указывается адрес, в котором находятся переменные. После этого происходит копирование их в память и в итоге пользователь получает доступ к переданным данным через переменные. Способ удобен тем, что можно передавать любой тип данных, в том числе структуры.

Передача структур nrf24l01

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

Во время работы со структурами нужно внимательно рассчитать ее размер и указать PAYLOAD. Общий размер структуры будет равен сумме всех размеров составляющих ее переменных.

Основные элементы кода:

#define ADDR “mod0” //указывается адрес модуля

#define NEXT “mod1” //указывается адрес следующего модуля

boolean iamfirst=true;//начинает ли этот модуль цепочку?

#define PAYLOAD 5 //размер полезной нагрузки

Все модули в итоге будут получать одинаковый скетч, в котором различаться будут только переменные ADDR, NEXT и iamfirst.

Скачать библиотеки nrf24l01

Основная библиотека для работы с модулем RF24. В библиотеке содержится огромное количество примеров программ. Важно отметить, что во время записи программы в ардуино нужно отключить модуль передатчика. Также перед первой инициализацией нужно сделать паузу в 2 секунды после подачи напряжения. Перед началом работы функцию RF24::flush_tx нужно сделать публичной и очистить буфер передачи перед отправкой новых сообщений.

Другая библиотека nrf24l01 – SerialFlow. Эта библиотека нужна для того, чтобы задавать формат передаваемого пакета, устанавливать функции для упаковки информации в пакет и их распаковки.

Библиотека Mirf. Эта библиотека является альтернативой вышеописанной RF24. Последняя ближе к стандартам, используемым для программирования ардуино, поэтому многим, особенно новичкам, может быть неудобна работа с mirf. Выбор той или иной библиотеки определяется только удобством и простотой ее для пользователя.

Выводы по nrf24l01

Беспроводной модуль nrf24l01 нельзя назвать простым в освоении устройством. И подключение, и программирование требует определенных навыков. Но стоимость и доступность модуля позволяет рекомендовать его для тех, кто занимается проектами интернета вещей или нуждается в простых инструментов для коммуникаций. Купив специальный адаптер для nrf24l01 вы можете существенно упростить подключение к ардуино. А использование библиотек позволяет максимально упростить код. Старайтесь не покупать модули nrf24l01 дешево у совсем уж неизвестных продавцов, и тогда никаких проблем с работой ваших проектов не будет.


Источник: arduinomaster.ru