Меню

Как подключить nrf24l01 к ардуино nano

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

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

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

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

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

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

Основой модуля служит 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 мА.

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

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

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

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

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

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

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

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

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

Более сложный модуль 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

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

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

Читайте также:  Как подключить второго игрока в майнкрафт на ps3

Подключение к Ардуино через адаптер 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:

Передача структур 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 дешево у совсем уж неизвестных продавцов, и тогда никаких проблем с работой ваших проектов не будет.

Источник

Взаимодействие nRF24L01 с Arduino: удаленное управление серводвигателем

В то время как интернет вещей (IoT), межмашинное общение и тому подобное становятся всё более популярными, потребность в беспроводной связи становится всё более востребованной, и всё больше машин/устройств общаются друг с другом в облаке. Разработчики используют множество систем беспроводной связи, таких как Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi модули, RF модули 433 МГц, Lora, nRF и т.д., и выбор посредника зависит от типа приложения, в котором она используется.

Читайте также:  Как подключить смартфон к монитору с выходом vga

Одним из популярных беспроводных посредников для локальной сети является nRF24L01. Эти модули работают на частоте 2,4 ГГц (диапазон ISM) со скоростью передачи данных от 250 кбит/с до 2 Мбит/с, что является легальным во многих странах и может использоваться в промышленных и медицинских приложениях. Также утверждается, что при наличии соответствующих антенн эти модули могут передавать и принимать сигналы на расстоянии до 100 метров между ними. Интересно! Итак, в этом уроке мы узнаем больше об этих модулях nRF24L01 и о том, как связать их микроконтроллерной платформой, такой как Arduino. Мы также поделимся некоторыми решениями для часто возникающих проблем при использовании этого модуля.

Взаимодействие nRF24L01 с Arduino: удаленное управление серводвигателем

Знакомство с RF модулем nRF24L01

Модули nRF24L01 являются приемопередающими модулями, то есть каждый модуль может отправлять и принимать данные, но поскольку они полудуплексные, в какой-либо момент времени они могут либо передавать, либо принимать данные. Модуль содержит микросхему nRF24L01 от Nordic semiconductors, которая отвечает за передачу и прием данных. Микросхема обменивается данным с помощью интерфейса SPI и, следовательно, может легко взаимодействовать с любыми микроконтроллерами. С Arduino всё становится намного проще, так как для нее доступны библиотеки. Распиновка стандартного модуля nRF24L01 показана ниже.

Распиновка модуля nRF24L01

Рабочее напряжение модуля составляет от 1,9 В до 3,6 В (как правило, 3,3 В). Модуль потребляет очень маленький ток, составляющий всего 12 мА при нормальной работе, что делает его эффективным при использовании с аккумуляторами, и, следовательно, он может работать даже от элементов питания размером с монету. Несмотря на то, что рабочее напряжение составляет 3,3 В, большинство выводов толерантны к 5 В и, следовательно, могут напрямую подключаться к 5-вольтовым микроконтроллерам, таким как Arduino. Еще одним преимуществом использования этих модулей является то, что каждый модуль имеет 6 каналов связи (pipeline). Это означает, что каждый модуль может связываться с 6 другими модулями для передачи и приема данных. Это делает данный модуль пригодным для создания сетей с топологиями «звезда» и «ячеистая» в приложениях IoT. Кроме того, они имеют широкий диапазон адресов из 125 уникальных идентификаторов, поэтому в закрытом пространстве мы можем использовать 125 таких модулей, не мешающих друг другу.

Взаимодействие nRF24L01 с Arduino

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

Принципиальная схема подключения модуля nRF24L01 к Arduino приведена ниже. Для разнообразия я использовал UNO для приемной части и Nano для предающей части. Но для других плат Arduino, таких как Mini и Mega, логика подключения остается неизменной.

Приемная часть: подключение модуля nRF24L01 к Arduino Uno

Как было сказано ранее, nRF24L01 взаимодействует с помощью интерфейса SPI. Для связи через SPI на Arduino Nano и UNO используются выводы 11, 12 и 13. Следовательно, мы подключаем выводы MOSI, MISO и SCK от nRF к выводам 11, 12 и 13 соответственно. Выводы CE и CS настраиваются пользователем, здесь я использовал выводы 7 и 8, но вы можете использовать любые выводы, изменив программу. Модуль nRF питается от вывода 3,3V на Arduino, что в большинстве случаев работать будет. Если нет, то можно попробовать отдельный источник питания. Помимо интерфейса nRF, я также подключил серводвигатель к выводу 7 и запитал его через вывод 5V на Arduino. Аналогично схема передатчика показана ниже.

Передающая часть: подключение модуля nRF24L01 к Arduino Nano

Соединения для передатчика точно такие же; кроме того, я использовал потенциометр, подключенный через выводы 5V и GND к Arduino. Выходное аналоговое напряжение, которое изменяется от 0 до 5 вольт, подается на вывод A7 Arduino Nano. Обе платы питаются через порт USB.

Работа с беспроводным приемопередающим модулем nRF24L01+

Однако для того, чтобы наш nRF24L01 работал без проблем, мы могли бы рассмотреть следующие вещи. Я долгое время работал с этим nRF24L01+ и изучил следующие моменты, которые могут помочь вам избежать препятствий. Вы можете попробовать это, когда модули не работают в нормальном режиме.

Тем не менее, если у вас есть проблемы, напишите в комментариях.

Программирование nRF24L01 для Arduino

Как и во всех программах, мы начинаем с включения заголовочных файлов. Поскольку nRF использует протокол SPI, мы включили заголовочный файл SPI, а также библиотеку, которую только что загрузили. Библиотека servo используется для управления серводвигателем.

Читайте также:  Как подключить звук на плазму

Далее идет важная строка, в которой мы указываем выводы CE и CS. На нашей принципиальной схеме CE подключен к выводу 7, а CS – к выводу 8.

Все переменные, которые связаны с библиотекой RF, должны быть объявлены как составная структура. В данной программе переменная msg используется для отправки и получения данных от RF модуля.

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

Затем внутри функции void setup() мы инициализируем RF модуль и настраиваем его на работу в диапазоне 115, который свободен от шума, а также настраиваем модуль для работы в режиме минимального энергопотребления с минимальной скоростью 250 кбит/с.

Функция void WriteData() считывает данные и помещает их в переменную. Снова из 6 различных каналов, используя которые мы может считывать и записывать данные, здесь мы использовали 0xF0F0F0F066 в качестве адреса для чтения данных. Этот означает, что передатчик другого модуля записал что-то по этому адресу, и, следовательно, мы читаем это что-то с того же адреса.

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

Беспроводное управление серводвигателем с помощью nRF24L01

Когда вы будете готовы, загрузите программы передатчика и приемника (приведены ниже) на соответствующие платы Arduino и подайте на них питание через USB порт. Вы также может запустить монитор последовательного порта для обеих плат, чтобы проверить, какое значение передается, и что принимается. Если всё работает должным образом, когда вы поворачиваете ручку потенциометра на стороне передатчика, то сервопривод на другой стороне должен вращаться соответствующим образом.

Работа проекта показана на демонстрационном видео ниже. Вполне нормально, если эти модули не заработают с первой попытки. Если вы столкнулись с какой-либо проблемой, снова проверьте код и разводку и попробуйте приведенные выше рекомендации по устранению неполадок.

Код передающей части

Код приемной части

Видео

Источник

Подключение радиомодулей RF24 (nRF24L01) к Ардуине

Описан процесс подключения самых популярных и недорогих радиомодулей (передатчика-приемника) nRF24L01 (сокращенно RF24) к плате Arduino UNO (или NANO) и даны примеры программ для работы с радиомодулями

Почему именно nRF24L01? По моему опыту это один из лучших радиомодулей для Arduino, т.к. обладает относительно невысокой стоимостью ). Но главное, что он прост в использовании, без проблем подключается к Arduino. Одна и та же плата может работать как в режиме приемника, так и в режиме передатчика.

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

На рисунке показана распиновка радиомодуля nRF24L01.

Вариант с антенной выглядит так:

Такой антенный модуль потребляет ток порядка 115 мА.

Одна плата объединяет в себе как передатчик, так и приемник. Соответственно для наладки связи нужно как минимум два таких модуля.

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

Я предпочитаю RF24 (так как с ней у меня не возникло проблем). Скачать библиотеку можно здесь:

В этом случае схема подключения следующая (показано на примере Arduino Nano; но для UNO тоже самое)

* Замечания. Возможные проблемы *

1) Большинство проблем происходит из-за шума на источнике 3.3V, что расположен на плате. Решение следующее: нужно припаять кондесаторы на радиомодуль между контактами GND и 3.3V. Я использую электролитический конденсатор емкостью 2.2 мкФ.

2) Пин 8 IRQ обычно не используется, хотя некоторые библиотеки его используют.

3) Рекомендуется запитывать модуль от 3.3 V (как показано на рисунке), хотя от 5V они тоже работают без проблем (поддерживается совместимость по питанию).

Связь двух плат Ардуионо посредством радиомодулей RF24

Код ПРИЕМНИКА (receiver)

Здесь приведена программа для работы радиомодуля в режиме ПРИЕМНИКА (receiver). То есть эту программу надо загрузить в ардуино, к который подсоединен радиомодуль. Кроме того, к данной ардуине я подключил стандратный дисплей LCD1602 для вывода информации. Если такого дисплея нет, то можно посылать сообщения на последовательный порт (для отображения на компьютере, например).

Код ПЕРЕДАТЧИКА (transmitter)

Здесь программа для работы радиомодуля в режиме ПЕРЕДАТЧИКА (transmitter). Код программы значительно проще. Мы просто отравляем с передатчика сообщение «Hello World» каждые 2 секунды.

Источник