Подключение Arduino nrf24L01
Содержание
- Описание модуля NRF24L01
- Где купить модули
- Распиновка NRF24L01
- Организация питания nrf24l01
- Различные версии модуля NRF24L01
- Подключение nRF24L01 к Ардуино
- Программирование nRF24L01
- Передача структур nrf24l01
- Скачать библиотеки nrf24l01
- Выводы по 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
Помимо выходов питания линии сигналов могут подключаться к контактам с питающим напряжением 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
Данная версия обладает дальностью до 100 м для открытого пространства, в помещении дальность ниже – до 30 м. Размеры 29х15 мм.
Мини NRF24L01. Характеристики и параметры те же, размеры 18х12 мм.
Модуль, оснащенный внешней антенной и усилителем. Дальность увеличена до 1000 м на открытых территориях.
Более сложный модуль nRF24LE1, работающий без платы Ардуино, то есть автономно.
Подключение 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 мкФ и более для обеспечения стабильной и качественной работы. Модуль с припаянным конденсатором изображен на рисунке.
Внешний вид макета представлен на рисунке ниже.
При подключении важно не перепутать напряжение – 5 Вольт могут вывести модуль из строя.
Подключение к Ардуино через адаптер NRF24L01
Адаптер специально разрабатывался для модуля NRF24L01+. На нем имеется специальный стабилизатор напряжения и удобно расположены выходы к контроллерам и платам Ардуино.
Как видно, на адаптере имеется 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 дешево у совсем уж неизвестных продавцов, и тогда никаких проблем с работой ваших проектов не будет.
Источник: