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

Содержание

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

Использовать эти модули с Arduino очень просто благодаря доступной готовой библиотеке, созданной maniacbug на GitHub. Нажмите на ссылку, чтобы загрузить библиотеку в виде zip-каталога, и добавьте её в Arduino IDE с помощью Скетч (Sketch) → Подключить библиотеку (Include Library) → Добавить ZIP библиотеку (Add .ZIP library). После добавления библиотеки мы можем начать программирование для проекта. Мы должны написать две программы, одна для передающей части, а другая для приемной части. Однако, как я уже говорил ранее, каждый модуль может работать как и передатчик, и приемник. Обе программы приведены в конце страницы, в коде передатчика будет закомментирован код приемника, а в программе приемника будет закомментирован код передатчика. Вы можете использовать его, если хотите, чтобы в вашем проекте модуль работал в обоих режимах. Работа программы описана ниже.

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

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

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

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

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

Функция записывает переданные ей данные. Как говорилось ранее, nRF имеет 6 различных каналов, в которые мы можем записывать и считывать данные, здесь мы использовали в качестве адреса для записи данных. В приемной части для получения данных мы должны использовать тот же адрес в функции .

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

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

Возможности BLE в модуле NRF24L01

Технология BLE работает в диапазоне ISM (2,4 ГГц), который во многих странах разрешен для безлицензионного использования (то есть не нужно получать никаких разрешений в радиочастотных органах) в промышленности, науке и медицине. ISM диапазон занимает полосу частот от 2400 МГц до 2483.5 МГц и разделен на 40 каналов. Три из этих 40 каналов имеют статус «информационных», они используются устройствами для передачи специальных приветственных пакетов с информацией о своем состоянии – это позволяет другим устройствам BLE устанавливать с ними связь.

В этой статье мы рассмотрим как использовать модуль NRF24L01 в качестве BLE трансивера (приёмопередатчика). BLE функциональность данного модуля будет продемонстрирована на примере передачи данных температуры в смартфон. Данные температуры будут считываться с датчика DHT11, а управлять всем процессом передачи данных будет плата Arduino. На смартфоне для приема этих данных можно использовать, например, приложение для android под названием Nordic BLE.

Программное обеспечение

Получите RF24 библиотеку из GitHub. Существует достаточно документации на эту ссылку, а также указатель на страницу загрузки. Распакуйте архив в папку вашего Arduino IDE  (моя в /home/users/maniacbug/Source/Arduino/libraries), и перезагрузите Arduino IDE.

В меню Файл, выберите пункт «Примеры», затем «RF24», и, наконец, “GettingStarted”. После этого загрузится GettingStarted пример. Выглядит примерно так. Взгляните на примере GettingStarted в документации во всех деталях.

/**
* Пример Приступая к работе с nRF24L01+.
*
* Это пример того, как использовать класс RF24. Написан этот пример к двум
* различным узлам. Переключите один из узлов в режиме "передачи" переключение
* происходит с помощью serial monitor и отправки 'T'. Узел посылает пинг и
* текущее время в понг узел, который отвечает, посылая данные обратно. Узел
* пинг может посмотреть, как долго длился весь цикл передачи.
** /
#include "SPI.h";
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

//
// Hardware configuration
//

// Подключение nRF24L01 к SPI шине к пинам 9 и 10

RF24 radio(9,10);

Загрузить пример, запустите serial monitor, установите скорость 57600, и вы должны увидеть это:

RF24/examples/GettingStarted/
ROLE: Pong back
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xf0f0f0f0d2 0xf0f0f0f0e1
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xf0f0f0f0d2
RX_PW_P0-6 = 0x08 0x08 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x03
RF_CH = 0x4c
RF_SETUP = 0x07
CONFIG = 0x0f
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = 16 bits
PA Power = PA_HIGH

Если вы вместо этого везде видите много нулей, то что-то не так с вашим соединением. Дважды проверьте все снова! В ходе создания этого материала, я даже перепутал два провода и пришлось перепаять их. Если вы подключили все правильно, вы увидите номера так же, как те, что выше.

Принцип работы и основные настройки nRF24L01 +

Частота 2.4ГГц очень популярна и на ней работает достаточно большое количество приборов, например: WiFi, радиоуправляемые модели, и тому подобное. Как они не мешают друг другу? Дело в том, что частота 2.4ГГц — это условное обозначение. На самом деле, имеется в виду диапазон частот, близкий к 2.4ГГц. nRF24L01+ работает на частотах 2.400-2.4835ГГц. Частота, на которой будут работать ваши модули, определяется номером канала. Каналы имеют шаг в 1МГц. То есть если Вы выбираете канал 0 — это частота 2.400ГГц, если канал 76 — 2.476ГГц. Разумеется, нужно выбирать свободную волну (канал) — иначе связь будет не стабильной или вообще отсутствовать.

Вы можете выбрать одну из трех скоростей передачи данных. Чем меньше скорость — тем больше чувствительность. То есть, при скорости 250kbps модули будут работать на большей дистанции, чем при более высоких скоростях.

На дальность работы модулей также влияет настройки выходной мощности модуля. Вы можете выбрать мощность в зависимости от приоритетов. То есть, если для вас важнее максимальная дальность, то надо выбрать максимальную мощность. Если приоритетной является экономичность, а дальность — несколько метров, разумно выбрать меньшую мощность сигнала. Интересное наблюдение в режиме приема данных (RX) модуль потребляет больший ток, чем в режиме передачи (TX).

Модуль nRF24L01+ в один момент времени может находиться в одном из режимов:

Power Down — выключен
Standby — спящий режим
RX Mode — режим ресивера (приемника)
TX Mode — режим трансмиттера (передатчика)

Диаграмма переходов из режима в режим изображенны на рисунке:

Информационный пакет, который передает модуль nRF24L01+ имеет следующий формат:

Preamble — Преамбула представляет собой последовательность битов и используется для синхронизации демодуляторов приемников.

Address — Адрес приемника. Адрес гарантирует, что пакет получит нужен приемник. Вы можете настроить длину адреса 3, 4 или 5 байт. Надо стараться чтобы адреса были уникальны. Но иногда Адреса могут быть одинаковые в нескольких nRF24L01+ если этого требуют Ваши задачи.

Packet Control Field — контрольное поле. Содержит: 6 бит, определяющих длину пакета (имеется в виду длина пакета полезных данных (от 0 до 32 байт)); 2 бита PID, используемые для определения является ли пакет новым или пересланным повторно; 1 бит — флаг NO_ACK.

Payload — полезный «груз». То есть данные, которые передает микроконтроллер. Может быть от 0 до 32 байт. Длину Payload можно настроить.

CRC — CRC является обязательным механизмом обнаружения ошибок в пакете. Длина CRC — 1 или 2 байта и зависит от общей длины пакета.

Для того, чтобы переданный пакет был принят нужным приемником, настройки приемника должны быть такими же, как и у передатчика. Если параметры пакета будут отличаться, приемник не сможет его обработать. Также надо корректно указывать адреса (об этом чуть ниже).

Если одновременно будут передавать несколько передатчиков, или возникнут другие препятствия, произойдет коллизия. Приемник не сможет получить пакет. Поэтому nRF24L01+ имеет настройку автоматической повторной отправки пакета (Aoto Retransmission (ART)). Эти настройки указывают с каким интервалом и сколько раз пытаться отправить пакет.

Как отмечалось в самом начале nRF24L01+ может работать на одном канале с 6-ю nRF24L01+. Для этого все модуля должны работать на одном канале, но каждый nRF24L01+ должен иметь уникальный адрес. Относительно адресации в документации приведена наглядная диаграмма:

Обратите внимание, что адреса для Data Pipe 1 — Pipe 5 отличаются друг от друга лишь последним байтом. Этого требует документация на nRF24L01+

На этой диаграмме модуль отмеченный как PRX прослушивает эфир для указанных адресов RX_ADDR_P0..RX_ADDR_P5. Каждый из PTX1..PTX6 отправляет пакеты на адреса TX_ADDR. Модуль, который работает как PRX тоже может отправлять модулям пакеты по их адресам.

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

Обзор модуля nRF24L01+

Радиочастота

Приемопередающий модуль nRF24L01 + предназначен для работы  по всему миру в диапазоне частот ISM 2,4 ГГц и использует для передачи данных GFSK модуляцию. Скорость передачи данных может составлять 250 Кбит/с, 1 Мбит/с и 2 Мбит/с.

Потребляемая мощность

Рабочее напряжение модуля составляет от 1,9 до 3,6 В, но хорошая новость заключается в том, что выводы согласуются с 5 В логикой, поэтому мы можем легко подключить его к Arduino или любому 5 В логическому микроконтроллеру без использования какого-либо преобразователя логического уровня.

Модуль поддерживает программируемую выходную мощность, а именно: 0 дБм, -6 дБм, -12 дБм или -18 дБм и потребляет невероятно мало, около 12 мА во время передачи при 0 дБм, что даже ниже, чем у одного светодиода.

И что самое приятное, он потребляет 26 мкА в режиме ожидания и 900 нА в режиме отключения. Вот почему данный модуль является беспроводным устройством для приложений с низким энергопотреблением.

Интерфейс

Модуль nRF24L01 + обменивается данными через 4-контактный последовательный интерфейс (SPI) с максимальной скоростью передачи данных 10 Мбит/с. Все параметры, такие как частотный канал (125 выбираемых каналов), выходная мощность (0 дБм, -6 дБм, -12 дБм или -18 дБм) и скорость передачи данных (250 кбит/с, 1 Мбит/с или 2 Мбит/с), можно настроить через SPI интерфейс.

Паяльная станция 2 в 1 с ЖК-дисплеем
Мощность: 800 Вт, температура: 100…480 градусов, поток возду…

Подробнее

Шина SPI использует концепцию Master и Slave, и в большинстве распространенных приложений: Arduino является Master, а модуль приемопередатчика nRF24L01 + — Slave. В отличие от шины I2C количество ведомых на шине SPI ограничено, на Arduino Uno можно использовать максимум два ведомых SPI, т.е. два модуля приемопередатчика nRF24L01 +.

Характеристики nRF24L01 +

Частотный диапазон 2,4 ГГц ISM Band
Скорость передачи по воздуху, max 2 Мбит / с
Формат модуляции GFSK
Максимум. Выходная мощность 0 дБм
Рабочее напряжение питания 1,9–3,6 В
Ток потребления, max 13,5 мA
Ток в режиме ожидания, min 26 мкA
Логические Входы 5 В совместимый
Дальность связи 800+ м (по прямой видимости)

Более подробную информацию по модулю можно посмотреть в datasheet.

На основе чипа nRF24L01 + доступно множество модулей. Ниже приведены самые популярные версии.

nRF24L01 + Беспроводной модуль

В первой версии используется встроенная антенна. Это позволило создать более компактную версию модуля. Однако небольшая антенна также означает меньшую дальность передачи. С этой версией модуля вы сможете общаться на расстоянии до 100 метров. Конечно, это на открытом воздухе без препятствий. Дальность передачи в помещении через стены будет немного меньше.

nRF24L01 + PA LNA модуль с внешней антенной

Вторая версия поставляется с разъемом SMA и внешней антенной, но это не основное отличие данной версии. Реальное отличие состоит в том, что эта версия поставляется со специальным чипом RFX2401C, который объединяет схемы коммутации PA, LNA и приема-передачи. Этот чип расширения диапазона вместе с внешней антенной помогает модулю достичь значительно большей дальности передачи — около 1000 м.

Что такое PA LNA?

PA обозначает усилитель мощности. Он просто увеличивает мощность сигнала, передаваемого с чипа nRF24L01 +. LNA означает усилитель с низким уровнем шума. Функция LNA состоит в том, чтобы чрезвычайно слабый и неопределенный сигнал от антенны (обычно порядка микровольт или ниже -100 дБм) усилить  до более приемлемого уровня (обычно около 0,5…1 В)

Малошумящий усилитель (LNA) приемного тракта и усилитель мощности (PA) тракта передачи подключаются к антенне через дуплексер, который разделяет два сигнала и предотвращает перегрузку чувствительного входа LNA относительно мощного выхода PA.

Описание регистров nRF24L01+

Регистр настроек.

7 6 5 4 3 2 1
MASK_RX_DR MASK_TX_DS MASK_MAX_RT EN_CRC CRCO PWR_UP PRIM_RX

Включает автоподтверждение приёма.

7 6 5 4 3 2 1
ENAA_P5 ENAA_P4 ENAA_P3 ENAA_P2 ENAA_P1 ENAA_P0

Выбирает активные каналы приёмника.

7 6 5 4 3 2 1
ERX_P5 ERX_P4 ERX_P3 ERX_P2 ERX_P1 ERX_P0

Задаёт длину поля адреса.

7 6 5 4 3 2 1
AW

Настройка параметров автоматического повтора отправки.

7 6 5 4 3 2 1
ARD ARC

0x05 RF_CH

Регистр задаёт номер радиоканала — частоту несущей с шагом 1Мгц. Радиочастота несущей вычисляется по формуле 2400 + RF_CH МГц. Допустимые значения от 0 до 125. При обмене на скорости 2Мбит/с, частота должна отличатся от частоты используемой другими устройствами минимум на 2 МГц.

Задаёт настройки радиоканала.

7 6 5 4 3 2 1
CONT_WAVE RF_DR_LOW PLL_LOCK RF_DR_HIGH RF_PWR

0x07 STATUS

Регистр статуса. Его значение также передаётся на линии MISO одновременно с передачей байта команды по интерфейсу SPI.

7 6 5 4 3 2 1
RX_DR TX_DS MAX_RT RX_P_NO TX_FULL

Регистр контроля передатчика

7 6 5 4 3 2 1
PLOS_CNT ARC_CNT

Оценка мощности принимаемого сигнала

7 6 5 4 3 2 1
RPD

0x0A RX_ADDR_P0

40-битный (5 байт) регистр, используемый для указания адреса канала 0 приёмника. Этот канал используется для приёма автоподтверждений в режиме передатчика. Автоподтверждения высылаются принимающей стороной с указанием собственного адреса. Поэтому значение этого регистра должно соответствовать значению регистра TX_ADDR для корректной работы в режиме передатчика. Реальная используемая ширина адреса задаётся в регистре SETUP_AW. Значение регистра записывается и читается, начиная с младших байт. Если записано менее 5 байт, то старшие байты остаются неизменными. Значение регистра по умолчанию: 0xE7E7E7E7E7.

0x0B RX_ADDR_P1

40-битный (5 байт) регистр, используемый для указания адреса канала 1 приёмника. Старшие 4 байта этого регистра являются общими для адресов на каналах 1 — 5. Реальная используемая ширина адреса задаётся в регистре SETUP_AW. Значение регистра записывается и читается, начиная с младших байт. Если записано менее 5 байт, то старшие байты остаются неизменными. Значение регистра по умолчанию: 0xC2C2C2C2C2.

0x0C-0x0F RX_ADDR_P2 — RX_ADDR_P5

8-битные регистры, задающие значения младшего байта адреса для каналов 2-5. Значения старших 32 бит берутся из регистра RX_ADDR_P1.
Значение регистров по умолчанию: 0xC3, 0xC4, 0xC5, 0xC6, соответственно.

0x10 TX_ADDR

40-битный (5 байт) регистр, используемый в режиме передатчика в качестве адреса удалённого устройства. При включенном режиме автоподтверждения, удалённое устройство ответит подтверждением с указанием своего же адреса. Это подтверждение принимается на канале 0, поэтому для успешной передачи, значение регистра RX_ADDR_P0 должно быть идентично этому. Реальная используемая ширина адреса задаётся в регистре SETUP_AW. Значение регистра записывается и читается, начиная с младших байт. Если записано менее 5 байт, то старшие байты остаются неизменными. Значение регистра по умолчанию: 0xE7E7E7E7E7.

0x11-0x16 RX_PW_P0 — RX_PW_P5

8-битные регистры, задающие размер данных, принимаемых по каналам, соответственно 0-5, если не включена поддержка произвольной длины пакетов в регистрах DYNPD и FEATURE. Значение указывает что канал не используется. Допустимы значения длины от 1 до 32.

Состояние очередей FIFO приёмника и передатчика

7 6 5 4 3 2 1
TX_REUSE TX_FULL TX_EMPTY RX_FULL RX_EMPTY

Разрешение использования пакетов произвольной длины.

7 6 5 4 3 2 1
DPL_P5 DPL_P4 DPL_P3 DPL_P2 DPL_P1 DPL_P0

Пример трансмиттера и ресивера для микроконтроллеров

Скачать пример для Atmega8 и Raspberry Pi

В примерах для Atmega8 использована библиотека, написанная Davide Gironi. Оригинальные файлы и примеры также находятся в архиве.

Сначала рассмотрим пример для микроконтроллеров, когда один модуль отправляет данные, а другой — принимает. В этом примере приемник получает данные по 6 адресам (Pipe). Передатчик последовательно отправляет пакеты по всем адресам (Pipe). Для мониторинга работы я подключал UART-USB переходник к приемнику или передатчика. И терминальной программой через компьютер наблюдал за происходящим.

Передатчик (sender.c):

Приемник (reciver.c):

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Программировать плату Raspberry Pi в нашем проекте мы будем с использованием языка Python3. Также можно использовать и язык C/C++ как и в плате Arduino, однако в данном случае преимуществом написания программы на языке python является то, что на нем написана специальная библиотека для работы с модулями nRF24l01, которую можно скачать с ее официальной страницы на github. Но здесь необходимо отметить, что наша программа на python и указанная библиотека должны находиться в одном и том же каталоге, иначе программа на python не сможет найти библиотеку. После скачивания библиотеки извлеките ее из архива и создайте отдельный каталог, в котором будут храниться все программы и библиотеки вашего проекта. Когда установка библиотеки будет закончена, можно приступать к написанию программы.

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

Python

import RPi.GPIO as GPIO
import time
import spidev
from lib_nrf24 import NRF24

1
2
3
4

importRPi.GPIO asGPIO

importtime

importspidev

fromlib_nrf24 importNRF24

Далее установим режим работы контактов (GPIO mode) платы Raspberry Pi «Broadcom SOC channel», что будет означать что мы будем обращаться к контактам платы по их физическим номерам (а не по их номерам на плате).

Python

GPIO.setmode(GPIO.BCM)

1 GPIO.setmode(GPIO.BCM)

Далее в программе мы зададим адреса каналов (pipe address) – они будут нужны для взаимодействия с приемной частью проекта на основе платы Arduino. Адреса укажем в шестнадцатеричном коде.

Python

pipes = , ]

1 pipes=0xE0,0xE0,0xF1,0xF1,0xE0,0xF1,0xF1,0xF0,0xF0,0xE0

Инициализируем модуль nRF24l01 используя контакты GPIO08 в качестве CE и GPIO25 в качестве CSN.

Python

radio.begin(0, 25)

1 radio.begin(,25)

Установим размер пакета (payload size) 32 бита, адрес канала 76, скорость передачи данных 1 Мбит/с и выходную мощность модуля на минимум.

Python

radio.setPayloadSize(32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)

1
2
3
4

radio.setPayloadSize(32)

radio.setChannel(0x76)

radio.setDataRate(NRF24.BR_1MBPS)

radio.setPALevel(NRF24.PA_MIN)

Откроем каналы и начнем в них запись данных. Также будем выводить на экран основные параметры (details) работы модуля nRF24l01.

Python

radio.openWritingPipe(pipes)
radio.printDetails()

1
2

radio.openWritingPipe(pipes)

radio.printDetails()

Подготовим сообщение в форме строки. Это сообщение мы будем передавать плате Arduino UNO.

Python

sendMessage = list(«Hi..Arduino UNO»)
while len(sendMessage) < 32:
sendMessage.append(0)

1
2
3

sendMessage=list(«Hi..Arduino UNO»)

whilelen(sendMessage)<32

sendMessage.append()

Начнем запись информации в радио модуль и будем продолжать запись пока не закончится вся строка для передачи. Одновременно с этим зафиксируем текущее время и выведем на экран сообщение об успешной передаче (в целях отладки).

Python

while True:
start = time.time()
radio.write(sendMessage)
print(«Sent the message: {}».format(sendMessage))
send
radio.startListening()

1
2
3
4
5
6

whileTrue

start=time.time()

radio.write(sendMessage)

print(«Sent the message: {}».format(sendMessage))

send

radio.startListening()

Если передача сообщения завершена и радио канал закрыт (не доступен) более 2-х секунд, то выведем на экран сообщение о том, что время истекло (timed out).

Python

while not radio.available(0):
time.sleep(1/100)
if time.time() — start > 2:
print(«Timed out.») # print error message if radio disconnected or not functioning anymore
break

1
2
3
4
5

whilenotradio.available()

time.sleep(1100)

iftime.time()-start>2

print(«Timed out.»)# print error message if radio disconnected or not functioning anymore

break

Закрываем прослушивание (listening) радио канала, закрываем соединение и заново открываем соединение спустя 3 секунды чтобы передать другое сообщение.

Python

radio.stopListening() # close radio
time.sleep(3) # give delay of 3 seconds

1
2

radio.stopListening()# close radio

time.sleep(3)# give delay of 3 seconds

Подключение 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).

More NRF24L01 and Arduino examples

The NRF24L01 module is a must-have for any Arduino enthusiast. I have already used the NRF24L01 module in many of my Arduino projects. Here I will list all of my projects in which I have used these modules.

  • Arduino Robot Car Wireless Control using HC-05 Bluetooth, NRF24L01 and HC-12 Transceiver Modules
  • Arduino Wireless Weather Station Project
  • DIY Arduino RC Transmitter
  • Arduino Ant Hexapod Robot
  • DIY Arduino based RC Hovercraft
  • Arduino Mecanum Wheels Robot
  • DIY Arduino RC Receiver for RC Models and Arduino Projects
  • Arduino RC Airplane | 100% DIY

Each of these projects/ tutorials has a detailed explanation how to use the NRF24L01 module, including circuit diagrams, improved code implementation for better communication and so on.

DIY Arduino RC Transmitter Example

That’s all for this tutorial, I hope you enjoyed it and learned something new. As always, feel free to ask any question in the comments section below.

Arduino Wireless Bi-directional Communication with two NRF24L01 modules

Let’s see the second example, a bi-directional wireless communication between two Arduino boards. Here’s the circuit schematics:

You can get the components needed for this example from the links below:

  • NRF24L01 Transceiver Module………… Amazon / Banggood / AliExpress
  • Arduino Board…………………………………. Amazon / Banggood / AliExpress
  • Joystick Module ………………………………. Amazon / Banggood / AliExpress
  • Servo Motor ……………………………………. Amazon / Banggood / AliExpress
  • Pushbutton …………………………………….. Amazon / Banggood / AliExpress
  • LED ………………………………………………… Amazon / Banggood / AliExpress

Disclosure: These are affiliate links. As an Amazon Associate I earn from qualifying purchases.

See Also