Rf24 arduino nano

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

Описан процесс подключения самых популярных и недорогих радиомодулей (передатчика-приемника) 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 с Arduino

Для проекта нам понадобятся:

1 Описание и характеристики приёмопередатчика NRF24L01

NRF24L01 – миниатюрный (4×4 мм) приёмопередатчик на одном чипе. Он очень дешёвый, при этом обеспечивает устойчивую радиосвязь на расстояниях в десятки метров (а при усилении и с хорошей антенной – сотни метров в зоне прямой видимости), и поэтому получил широкое распространение среди радиолюбителей. Основные технические характеристики чипа nRF24L01:

NRF24L01 можно приобрести в составе готового модуля. Назначение выводов модуля показано на иллюстрации. На обратной стороне модуля радиоэлементов нет.

Внешний вид и назначение выводов приёмопередатчика nRF24L01

Для организации приёма и передачи понадобятся как минимум два подобных модуля с nRF24L01.

Выводы приёмопередатчика nRF24L01

Название Назначение Примечание
GND Земля
VDD Питание 1,9…3,6 В. Если сигнал на MOSI/MISO >3,6 В, то питание не более 2,7…3,3 В.
CE Цифровой вход Chip Enable. Активирует режим приёма или передачи. Активный уровень «1» (HIGH).
CSN Цифровой вход SPI Chip Select. Режим выбора устройства SPI. Активный «0» (LOW).
SCK Цифровой вход SPI Clock. Линия синхронизации SPI.
MOSI Цифровой вход Вход данных SPI от контроллера к nRF24L01. Толерантность к 5 В.
MISO Цифровой выход Выход данных SPI от nRF24L01 к контроллеру. Толерантность к 5 В.
IRQ Цифровой выход Пин прерывания. Активный «0» (LOW).

По традиции, сначала подключим nRF24L01 к Arduino и проверим его работоспособность, используя существующие библиотеки. А затем детально рассмотрим протокол управления и научимся работать с приёмопередатчиком без библиотек.

2 Подключение приёмопередатчика nRF24L01к Arduino

Подключим модули к Arduino, как показано на рисунке. Каждый модуль к своему контроллеру.

Схема подключения nRF24L01 к Arduino

Модули подключаются одинаково, как можно догадаться. А программы в Ардуино будут разные. Один модуль будет работать в режиме приёмника, а другой – передатчика. Но сначала необходимо загрузить библиотеку для nRF24L01 и установить её обычным способом. Библиотека прилагается также в конце статьи.

Напишем для передатчика простейший скетч, который раз в секунду будет отправлять сообщение и инкрементируемый счётчик. Загрузим в одну из плат Arduino скетч передатчика:

Скетч передатчика nRF24L01 (разворачивается)

В другую Ардуинку загрузим скетч приёмника:

Скетч приёмника nRF24L01 (разворачивается)

В моём случае макет с подключёнными модулями выглядит так:

Подключение передатчика и приёмника nRF24L01 к Arduino

Часто пользователи сообщают о проблемах в питании данных модулей nRF24L01. Это проявляется в том, что приёма нет. В таком случае попробуйте припаять на свободное место модуля конденсатор ёмкостью 1…2 пФ.

Передатчик nRF24L01 подключён к Arduino Nano

Запустим монитор последовательного порта для платы Arduino, которая управляет приёмником nRF24L01. В мониторе мы увидим, что 1 раз в секунду нам приходят пакеты, 31 байт в которых не меняется, а последний, 32-ой, байт содержит увеличивающийся счётчик.

Принимаемые радиоприёмником nRF24L01 пакеты в мониторе последовательного порта

Мы убедились, что модули работают, и что мы можем с помощью них передавать и принимать данные по радиоканалу. Теперь залезем под «капот» и разберёмся, как же управлять приёмопередатчиком nRF24L01.

3 Режимы работы и управление приёмопередатчиком nRF24L01

Приёмопередатчик может находиться в четырёх состояниях: выключен, ожидание, приём, передача. Чип nRF24L01 имеет встроенную машину состояний, которая обеспечивает корректный переход между этими состояниями. Пользователь управляет состояниями, загружая в управляющие регистры специальные команды.

Режим выключения (power down mode)

В этом режиме чип потребляет минимальный ток, но может принимать команды по SPI от контроллера.

Режим ожидания (standby mode)

Есть два режима ожидания.

Первый режим ожидания (Standby-I) используется для снижения потребления. В этом режиме чип принимает команды по SPI, быстро переходит в режим передачи, и так же быстро возвращается обратно в режим ожидания 1. Для перехода в этот режим нужно подать на CE «HIGH» и в регистре CONFIG установить бит PWR_UP в «1».

Второй режим ожидания (Standby-II) более энергозатратен по сравнению с первым: чип работает полностью, и устройство готово к приёму и передаче практически моментально (около 130 мкс). Как только в передающем буфере оказываются данные, микросхема nRF24L01 начинает передачу. Для перехода в этот режим нужно держать CE в «HIGH» и в регистре CONFIG должен быть установлен бит PWR_UP в «1».

Режим приёма (RX mode)

Это режим, в котором чип nRF24L01 используется как приёмник. При этом он постоянно сканирует эфир на наличие валидных пакетов. Как только валидный пакет будет найден, он помещается в свободный слот приёмного буфера. Если буфер полностью заполнен, то пакет игнорируется.

Для перехода в режим приёма нужно установить биты PWR_UP и PRIM_RX в «1», и вывод CE установить в «HIGH». Режим будет держаться до тех пор, пока контроллер не переключит его в другой (например, режим ожидания или выключения).

Режим передачи (TX mode)

Режим передачи используется для передачи данных.

Для перехода в режим приёма нужно установить бит PWR_UP в «1», бит PRIM_RX в «0», и вывод CE установить в «HIGH». Данные передаются пакетами максимальной длиной по 32 байта. Режим будет держаться до тех пор, пока передаётся пакет. По окончанию передачи пакета чип перейдёт в режим ожидания 2 (standby-II).

Важно не держать nRF24L01 в режиме передачи дольше 4 мс! Чип поддерживает расширенный режим Enhanced ShockBurst, который соблюдает это требование. Кроме того, этот режим обеспечивает автоматическую обработку пакетов.

В таблице ниже сведены все условия для управления режимами чипа.

Источник

Arduino и NRF24L01 в одной плате. Первое знакомство

Привет хабровчане! Не так давно попалась мне в руки пара плат Arduino Nano со встроенным модулем NRF24L01, которые оказались достойной заменой популярной связки Arduino Nano + NRF24L01. Модуль NRF24L01 часто используется в различных проектах для обеспечения надежной беспроводной передачи данных. Небольшая цена, низкая задержка и энергопотребление, а также возможность выбора до128 каналов связи дает NRF24L01 преимущество перед другими радиочастотными модулями, такими как wifi, bluetooth, Zigbee и т.д.

В данной статье хочу поделиться с вами своим первым опытом работы как с Arduino RF, так и с NRF24L01 в целом.

Изображенную выше плату можно приобрести на Aliexpress. Данная плата является аналогом следующей схемы:

Для тестирования схемы я использую библиотеку RF24. В рамках данного обзора я рассмотрю:

передачу данных между платами Arduino RF;

передачу данных между Arduino RF и Raspberry Pi;

сравнение со связкой Arduino + модуль NRF24L01.

Передача данных между платами Arduino RF

Обе платы Arduino RF подключаются к портам одного ноутбука. Для работы с платами я использую среду Arduino Studio, в которой выполняю следующие настройки:

Tools -> Boards-> Arduino AVR Boards -> Arduino Nano

Tools -> Processor -> ATmega328P (Old Bootloader)

Tools -> Managie Libraries -> «RF24» -> установка последней версии библиотеки RF24 by TMRh20 ( у меня версия 1.4.1). Также понадобятся библиотеки SPI.h и printf.h

работа с разными портами в Arduino Studio

Если у вас есть проблема одновременного открытия двух окон SerialMonitor, в которые выводится информация от двух Arduino, подключенных к разным портам, нужно сначала запустить ArduinoStuio в обычном режиме и отобразить информацию с одного порта, а потом запустить среду ArduinoStuio в режиме «от администратора» и отобразить информацию с другого порта.

Для проверки плат использовался пример, поставляемый с библиотекой RF24, который нужно загрузить на обе платы Arduino.

Files -> Examples -> GettingStarted

код программы GettingStarted.ino

В рамках данного примера, одна плата настраивается как передатчик, а другая как получатель. В моем случае пины CE и CSN указываемые в конструкторе RF24 radio(CEpin, CSNpin) были 7 и 8 соответственно. После загрузки скетча на плату, в Serial monitor выводится строка:

Which radio is this? Enter ‘0’ or ‘1’. Defaults to ‘0’

Ввожу «1» в окошке отправителя и «0» в окошке получателя. После вывода следующей строки

*** PRESS ‘T’ to begin transmitting to the other node

выбираю «T» для настройки одной из Arduino как отправителя и «R» как получателя.

После выполнения вышеописанных настроек, получился следующий результат (время передачи пакета и пакет с числом 0.0, увеличивающимся с шагом 0.01):

Время передачи в среднем заняло всего 552 микросекунды

Передача данных между Arduino RF и Raspberry Pi

Далее пусть в качестве передатчика снова выступает микроконтроллер Arduino Nano RF, а в качестве приемника — Raspberry Pi 4 с модулем NRF24L01, подключённым по следующей схеме:

Для настройки Raspberry в качестве приемника, я выполнила следующие шаги:

Для удаленного подключения к Raspberry, определяю IP адрес Raspberry с помощью программы Aadvanced Ip scanner (альтернативный способ — через список подключенных устройств на странице роутера).

С помощью Putty, подключаюсь к Raspberry по ssh, указывая Ip адрес Raspberry и порт 22 (по умолчанию логин «pi», пароль «raspberry» ).

P.S. Для удобства работы через графический интерфейс, можно скачать программу VNCviewer, после чего ввести в консоль Raspberry команду vncserver.

В консоли Raspbrry для настройки SPI выполняю следующую команду

В появившемся окне выбираю 5. Interfacting options -> SPI -> Enabledtparam=spi=on

Изначально, моя Raspberry Pi поставлялась в комплекте с дисплеем, подключаемым к тем же портам, что и NRFL01 модуль. После того, как дисплей убран, нужно отредактировать файл boot/config.txt , закоментировав строки, относящиеся к дисплею. В моем случае незакоментированной осталась только строка

Перезагружаюсь и обновляюсь

Далее устанавливаю библиотеку RF24 (например по инструкции на github или medium)

установка библиотиеки RF24 на Raspberry

Install prerequisites if there are any (MRAA, LittleWire libraries, setup SPI device etc)

Make it executable

Run it and choose your options

Run an example from one of the libraries

Edit the gettingstarted example, to set your pin configuration

В качестве примера также использую файл gettingstarted.py, после выполнения которого выбираю номер модуля «1» и режим «R».

код программы gettingstarted.py

Получился аналогичный предыдущему пункту результат (на изображении показан вывод в IDE ArduinoStudio и Thonny):

В данном случае время передачи одного из пакетов значительно выше. Такая ситуация повторилась несколько раз.

Сравнение со связкой Arduino Leonardo + модуль NRF24L01

Данный краткий обзор был бы совсем кратким, не выполни я пример gettingstarted на стандартной связке Arduino + NRFL01 и Raspberry + NRFL01

Схема подключения NRFL01 к Arduino Nano изображена в посте выше. У меня не было под рукой Arduino Nano, но была Arduino Leonardo, у которой SPI пины вынесены сбоку платы.

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

код Arduino US.ino

Результат выполнения показан ниже. Время передачи значительно выше. С ходу не хватает знаний понять, почему так вышло и как улучшить результат.

Заключение

К сожалению мне сходу не удалось найти в интернете подробных гайдов по работе с Arduino RF, поэтому пришлось пару недель повозиться. Знакомство с библиотекой Mirf как-то сразу не задалось. После многих попыток разобраться в теме, получился вот такой вот гайд. Оказалось, что работать с Arduino RF интересно и не так уж и трудно. Надеюсь что мой опыт пригодится новичкам и желающим построить какой-либо проект на базе Arduino RF. Также хочу выразить благодарность авторам постов про NRF24L01, которых набралось уже не мало :)

Источник

Adblock
detector