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

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

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

===== Минусы использования =====
  * Очень чувствительны в питании
  * Сложны в подключении

===== Физические размеры =====
  * Модуль (Д х Ш х В): 29 х 16 х 14 мм

==== Библиотека для работы с модулем ====
  * [[http://files.smartelements.ru/know_libs/rf24.zip|Скачать (rf24)]]

====== Примеры подключения и использования ======
**Назначение выводов датчиков**
  - GND – земля
  - VCC – питание
  - CE - включение радиотракта микросхемы высоким уровнем 
  - SCN - Chip Select Not, активный низкий уровень. Если установлен низкий уровень, то модуль отвечает на SPI команды 
  - SCK - такт шины SPI 
  - MOSI - передача данных от микроконтроллера к устройству 
  - MISO - передача данных от устройства в микроконтроллер 
  - IRQ - выход сигнала для запроса прерывания при отправке и получении пакета 

{{ :главная:связь:nrf24_pins.jpg |}}

**Пример**
В примере тестируется отправка данных о количестве секунд с момента запуска контроллера. И прием вторым устройством отправленных данных. (Для тестирования примеров использовались [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|контроллеры Smart UNO]])
^ Что нужно                                                                                                                                 ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер                      ]]                        | 2           |
| [[http://smartelements.ru/collection/svyaz/product/besprovodnoy-priemoperedatchik-nrf24l01-24ghz|Беспроводной приемопередатчик NRF24L01+ 2,4GHz]]  | 2           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-mama|Провода папа-мама]]                    | 14          |
| [[http://smartelements.ru/collection/radiodetali/product/nabor-elektroliticheskih-kondensatorov|Конденсатор 1мкФ]]  | 2           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-papa-papa|Провода папа-папа]]                    | 4          |

==== Передатчик ====
**Подключение:**

{{ :главная:связь:nrf24.jpg |}}

**Скетч для Передатчика:**
<file Arduino>
//Подключение библиотек
#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 мс
} 
</file>

==== Приёмник ====
**Подключение:**

{{ :главная:связь:nrf24.jpg |}}

**Скетч для приёмника:**
<file Arduino>
//Подключение библиотек
#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); // вывод данных в монитор
  } 
} 
</file>