Модуль nRF24L01: описание, распиновка

Рассмотрим сегодня радио модуль для Ардуино nRF24L01, который часто используется в различных проектах. Предоставим распиновку и схему подключения беспроводного радиомодуля nRF24L01+ к Arduino UNO или Arduino Mega, характеристики и описание модуля на русском. На странице вы можете скачать все необходимые (работающие) библиотеки для работы с модулем и загрузить скетч для тестирования модуля.
Характеристики модуля nRF24L01
На плате nRF24L01 встроен демодулятор, синтезатор частот и усилитель сигнала. Дальность действия модуля Arduino nRF24L01+ до 30 метров, а в версии с усилителем и антенной до 1000 метров в прямой видимости. Модуль может использовать 127 каналов связи, отличающихся частотой сигнала — от 2,4 ГГц до 2,483 ГГц. Скорость беспроводного соединения можно настраивать: 250kbps, 1Mbps или 2Mbps.
Дальность действия модуля сравнима с блютуз модулем HC-05/06, но с помощью nRF24L01 можно создать многоканальную связь. Т.е. можно объединить в общую сеть до 7 устройств, которые могут одновременно принимать и отправлять сигнал.
Распиновка радиомодуля nRF24L01+

Кроме сложной схемы подключения nrf24l01 к Arduino NANO и MEGA2560, плата требовательна к питанию (так утверждается на многих форумах и сайтах). Поэтому необходимо припаять к портам питания модуля (GND и VCC) конденсатор до 10мкФ — это снизит помехи. Если вы несколько раз проверили подключение и загрузили скетч с этой страницы, но модуль отказывается работать — то все дело в питании.
Но не торопитесь искать блок питания на 3,3 Вольта или припаивать конденсаторы (хотя он не помешает). У нас тоже модуль не сразу заработал, но после множества попыток найти подходящую библиотеку и скетч (найдете далее) — модули стабильно заработали. После этого мы загрузили скетч на модули без конденсатора, подключали их к кроне, блоку питания, компьютеру и ноутбуку — все работает стабильно.

Схема подключения nRF24L01 к Arduino
Модуль работает по интерфейсу SPI, соответственно подключать модуль nRF24L01 следует к определенным портам микроконтроллера (не забывайте, что у Arduino Mega интерфейс SPI находится на других портах). Для наладки связи между двумя Ардуино, потребуется, как минимум два беспроводных радио модуля. Одну плату нужно настроить, как приемник сигнала (receiver), а вторую, как передатчик (transmitter).
Для занятия нам понадобятся следующие детали:
- плата Arduino Uno;
- радио модуль;
- USB-кабель;
- Провода «папа-мама».

После подключения беспроводных модулей к микроконтроллеру, загрузите скетч.
Скачать готовый скетч можно с Google Диск по ссылке здесь.
#include <SPI.h> // библиотека для обмена данными по протоколу SPI #include <nRF24L01.h> // библиотека для nRF24L01+ #include <RF24.h> // библиотека для радио модуля RF24 radio(9,10); // Для MEGA2560 замените на RF24 radio(9,53); const uint8_t num_channels = 128; uint8_t values[num_channels]; int serial_putc( char c, FILE * ) { Serial.write( c ); return c; } void printf_begin(void) { fdevopen( &serial_putc, 0 ); } void setup(void) { Serial.begin(9600); printf_begin(); radio.begin(); radio.setAutoAck(false); radio.startListening(); // включаем прием сигнала radio.printDetails(); // если правильно соединили, то увидите настройки модуля delay(10000); // задержка на 10 секунд radio.stopListening(); // выключаем прием сигнала int i = 0; // вывод заголовков всех 127 каналов while ( i < num_channels ) { printf("%x",i>>4); ++i; } printf("\n\r"); i = 0; while ( i < num_channels ) { printf("%x",i&0xf); ++i; } printf("\n\r"); } const int num_reps = 100; void loop(void) { memset(values, 0, sizeof(values)); int rep_counter = num_reps; while (rep_counter--) { int i = num_channels; while (i--) { radio.setChannel(i); radio.startListening(); // включаем прием сигнала delayMicroseconds(128); radio.stopListening(); // выключаем прием сигнала if ( radio.testCarrier() ) ++values[i]; } } int i = 0; while ( i < num_channels ) { printf("%x", min(0xf, values[i] & 0xf)); ++i; } printf("\n\r"); }
Пояснения к коду:
- Скетч выводит на последовательный порт информацию о модуле nRF24L01+;
- Далее выводится информация о всех частотах на которых работает модуль и информацию об их загруженности, выбирайте частоту для работы без помех;

Если скетч успешно загрузился на Arduino NANO или UNO, но вы не видите похожую информацию на мониторе последовательного порта, то еще раз проверьте соединение платы с микроконтроллером (возможно где-то просто нет контакта). Возможно у вас модуль от другого производителя, тогда советуем вам ознакомиться с информацией на форуме: forum.amperka.ru/threads/nrf24l01-побеждаем-модуль.3205/.

Через 10 секунд после получения информации о характеристиках nRF24L01+ вы получите информацию о помехах на всех 127 каналах связи. Первые две строчки — это имена каналов, состоящие из двух символов на первой и второй строке (выделены красным квадратом). Далее идет информация о помехах. На скриншоте видно, что с 4 по 22 канал лучше не использовать для соединения устройств по радиосигналу.
Если оба модуля работают, то можно переходить к следующему эксперименту — соединение Ардуино по беспроводной связи и передачу данных через радиосигнал.
Здравствуйте!
Подскажите, пожалуйста, в Вашем примере в возвращаемых модулем данных видно, что уровень сигнала на максимуме
«PA Power =PA_HIGH»
В моем случае выдается строка:
«PA Power = PA_MIN»
Пытался программно поменять на значение МАХ, но ничего не выходит (см. предыдущий комментарий)
От чего зависит это значение? Зашито производителем?
Здравствуйте, Сергей. С вашими вопросами по настройке модуля nRF24L01 будем разбираться чуть позже, пока совсем нет времени.
99% неверно подключен модуль
Добрый вечер. Правильно я понял, что имея два модуля, можно собрать многоканальный блок управления? И ещё, поддеживает модуль ШИМ модулицию, передовать ШИМ на расстоянии? Спасибо большое .
Все верно, можно собрать блок с дистанционным управлением. Минус данных радио модулей в небольшом радиусе действий, но в квартире или в небольшом доме nRF24 будет достаточно.
Передавать ШИМ через модуль nRF24 можно в виде данных.
Добрый день. Подскажите, пожалуйста, по его документации у него 125 каналов, а объединяться могут только 6? Если стоит задача сделать 100 устройств, которые способны общаться между собой, то это нельзя реализовать с использованием NRF24L01?
Можно, причем на одной трубе по следующему алгоритму:
Приемник включаете в режим передатчика, который посылает с небольшим интервалом поочередно числа от 1 до 100. После отправки одного числа, он переходит в режим прослушки.
Передатчики работают в режиме приемника изначально, когда первый приемник получил число «1», он переключается в режим передатчика и отправляет нужные данные, затем снова переключается в режим приемника. Число «1» получают все модули NRF24L01, но срабатывает только первый передатчик. И так поочередно опрашиваете все модули.