No Image

Nrf24l01 pa lna подключение к ардуино

СОДЕРЖАНИЕ
175 просмотров
12 декабря 2019

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

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

Модуль работает на частоте 2.4 ГГц , что обеспечивает достаточно высокую скорость передачи данных и на большие расстояния. Так, в стандартном варианте (без антены) модуль должен работать на расстоянии 100 м. Существуют варианты с антенной (и встроенным усилителем), что должно увеличивать дальность до 500-1000 м на открытой местности, что позволяет осуществлять связь между ардуинами на расстоянии до киллометра.

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

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

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

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

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

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

Существует несколько библиотек Arduino для работы с радиомодулями nRF24L01. От выбранной библиотеки может зависеть способ подключения модуля к Ардуине. Наиболее популярные библиотеки — RF24 и Mirf.

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

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

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

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

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

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

Выводы CE и CSN модуля могут подключаться и к другим выводам ардуины. Это указывается в программе при вызове конструктора класса RF24. В нашем случае будем использовать пины D9 и D10 .

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

Для связи двух плат ардуин к обоим из них нужно подключить радиомодуль RF24 по указанной выше схеме. Один радиомодуль нужно настроить в режим приемника (receiver), а второй — в режим передатчика (transmitter). Для этого в соответствующие платы ардуино нужно зашить представленные ниже программы. Таким образом, когда приемник получит данные с отправителя, мы об этом узнаем.

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

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

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

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

Заметим, что для связи между собой только двух радиомодулей мы должны указать для них один и тот же адрес rxAddr .

Но вообще передатчик может передавать данные сразу нескольким приемникам, и обратно, приемник может принимать данные от нескольких передатчиков — смотря какие rxAddr мы для них зададим. Таким образом, радиомодули можно объединять в достаточно сложные сети.

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

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

Модуль работает на частоте 2.4 ГГц , что обеспечивает достаточно высокую скорость передачи данных и на большие расстояния. Так, в стандартном варианте (без антены) модуль должен работать на расстоянии 100 м. Существуют варианты с антенной (и встроенным усилителем), что должно увеличивать дальность до 500-1000 м на открытой местности, что позволяет осуществлять связь между ардуинами на расстоянии до киллометра.

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

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

Читайте также:  Honor 9 lite huawei p smart сравнение

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

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

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

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

Существует несколько библиотек Arduino для работы с радиомодулями nRF24L01. От выбранной библиотеки может зависеть способ подключения модуля к Ардуине. Наиболее популярные библиотеки — RF24 и Mirf.

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

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

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

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

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

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

Выводы CE и CSN модуля могут подключаться и к другим выводам ардуины. Это указывается в программе при вызове конструктора класса RF24. В нашем случае будем использовать пины D9 и D10 .

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

Для связи двух плат ардуин к обоим из них нужно подключить радиомодуль RF24 по указанной выше схеме. Один радиомодуль нужно настроить в режим приемника (receiver), а второй — в режим передатчика (transmitter). Для этого в соответствующие платы ардуино нужно зашить представленные ниже программы. Таким образом, когда приемник получит данные с отправителя, мы об этом узнаем.

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

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

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

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

Заметим, что для связи между собой только двух радиомодулей мы должны указать для них один и тот же адрес rxAddr .

Но вообще передатчик может передавать данные сразу нескольким приемникам, и обратно, приемник может принимать данные от нескольких передатчиков — смотря какие rxAddr мы для них зададим. Таким образом, радиомодули можно объединять в достаточно сложные сети.

В этой статье мы поговорим о 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 можно с успехом применять в следующих областях:

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

В плату 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 м на открытых территориях.

Беспроводной модуль 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 Вольт могут вывести модуль из строя.

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

Комментировать
175 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector