Беспроводной приемопередатчик NRF24L01+ 2,4GHz

Описание

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

Технические характеристики

  • Напряжение питания: 3,3 В
  • Скорость передачи данных: 250Кб/с — 2Мб/с
  • Входы толерантны к 5 В
  • Независимых каналов: 126
  • Дальность связи в прямой видимости: 100 м

Плюсы использования

  • Позволяют обеспечить недорогую беспроводную связь
  • Имеют 126 независимых каналов связи
  • Низкое энергопотребление
  • Позволяет работать с прерываниями (будить устройство по команде)

Минусы использования

  • Очень чувствительны в питании
  • Сложны в подключении

Физические размеры

  • Модуль (Д х Ш х В): 29 х 16 х 14 мм

Библиотека для работы с модулем

Примеры подключения и использования

Назначение выводов датчиков

  1. GND – земля
  2. VCC – питание
  3. CE - включение радиотракта микросхемы высоким уровнем
  4. SCN - Chip Select Not, активный низкий уровень. Если установлен низкий уровень, то модуль отвечает на SPI команды
  5. SCK - такт шины SPI
  6. MOSI - передача данных от микроконтроллера к устройству
  7. MISO - передача данных от устройства в микроконтроллер
  8. IRQ - выход сигнала для запроса прерывания при отправке и получении пакета

Пример В примере тестируется отправка данных о количестве секунд с момента запуска контроллера. И прием вторым устройством отправленных данных. (Для тестирования примеров использовались контроллеры Smart UNO)

Передатчик

Подключение:

Скетч для Передатчика:

//Подключение библиотек
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> 
 
  
const uint64_t pipe = 0xF0F1F2F30001; // идентификатор передачи (нужен одинаковый на принимающем и передающем устройствах)

// создание объекта radioModule
RF24 radioModule(9, 10); // параметры - пины подключения CE, CSN
 

void setup(){
  // Инициализация Serial -монитора для отладки
  Serial.begin(9600);

  radioModule.begin(); // Инициализация модуля
  delay(2); // Задержка для того, чтобы модуль подумал
  radioModule.setChannel(0); // установка канала передачи данных (0-125)
    
  // выбор скорости: RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
  // чем меньше скорость, тем выше чувствительность приемника
  radioModule.setDataRate(RF24_1MBPS); 
   
  // мощность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radioModule.setPALevel(RF24_PA_HIGH);   

  radioModule.openWritingPipe(pipe); // открытие трубы на передачу данных
} 


void loop()   
{
  
  int data = millis()/ 1000; // количество секунд со старта платы
  
  radioModule.write(&data, sizeof(data)); // отправка данных с указанием размера пакета в битах
  
  Serial.print("data: "); // вывод заголовка в монитор 
  Serial.println(data); // вывод данных в монитор
 
  delay(5); //задержка в 5 мс
} 

Приёмник

Подключение:

Скетч для приёмника:

//Подключение библиотек
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> 
 
  
const uint64_t pipe = 0xF0F1F2F30001; // идентификатор передачи (нужен одинаковый на принимающем и передающем устройствах)

// создание объекта radioModule
RF24 radioModule(9, 10); // параметры - пины подключения CE, CSN
 

void setup(){
  // Инициализация Serial -монитора для отладки
  Serial.begin(9600);

  radioModule.begin(); // Инициализация модуля
  delay(2); // Задержка для того, чтобы модуль подумал
  radioModule.setChannel(0); // установка канала передачи данных (0-125)
    
  // выбор скорости: RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
  // чем меньше скорость, тем выше чувствительность приемника
  radioModule.setDataRate(RF24_1MBPS); 
   
  // мощность передатчика, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
  radioModule.setPALevel(RF24_PA_HIGH);   
    
  radioModule.openReadingPipe(1,pipe); // открытие трубы №1 с индентификатором "pipe"
  radioModule.startListening(); // включение режима прослушки
}
 



void loop()   
{  
  int data; //переменная для принимаемых данных
  
  if (radioModule.available()) { // проверка, доступны ли какие-либо данные в буфере
    radioModule.read(&data, sizeof(data)); // чтение данных, размер данных
    
    Serial.print("data: "); // вывод заголовка в монитор
    Serial.println(data); // вывод данных в монитор
  } 
}