Радио модуль nRF24L01+ Arduino — это один из самых популярных беспроводных модулей. Подключение nRF24L01+ 2.4G или nRF24L01+PA+LNA 2.4G к Arduino Uno обеспечит беспроводную связь между микроконтроллерами на расстоянии до 100 метров. Рассмотрим, как установить связь между двумя Arduino по радиоканалу для передачи данных с датчика воды (water sensor) и вывода информации на LCD 1602 дисплей.
СОДЕРЖАНИЕ
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- nrf24l01+ / nrf24l01+pa+lna
- дисплей lcd 1602 i2c
- датчик воды
- коннекторы
- библиотека nRF24L01.h и SPI.h / LiquidCrystal_I2C.h
Дополнительные материалы на эту тему:
Радиомодули стоят недорого и могут быть использованы для организации защищенной многоканальной связи между устройствами на плате Ардуино. С помощью nrf24l01+ можно создать многоканальную связь, т.е. объединить в сеть до 7 устройств, которые могут одновременно принимать и отправлять сигнал. Мы будем передавать данные с датчика воды, но можно использовать в работе любой аналоговый или цифровой датчик.
nrf24l01 / pa+lna Arduino распиновка, характеристики

Характеристики NRF24L01+ 2.4G (datasheet)
- Напряжение питания: 3.3 В
- Частота передачи/приема: 2.4 ГГц
- Количество каналов: 126
- Интерфейс: SPI
- Расстояние передачи/приема: до 100 м, в помещении — до 30 м
- Скорость передачи: 250kbps, 1Mbps и 2Mbps
- Чувствительность приемника: -82 dBm
- Коэффициент усиления антенны (макс): 2dBm
Характеристики NRF24L01+PA+LNA 2.4G (datasheet)
- Напряжение питания:3.3 В
- Частота передачи/приема: 2.4 ГГц
- Количество каналов: 126
- Интерфейс: SPI
- Скорость передачи: 2MB до 520 м, 1 MB до 750 м, 250 Kb до 1000 м
- Максимальная выходная мощность: +20dBm
- Коэффициент усиления антенны (макс): 2dBi
nRF24L01 имеет встроенный демодулятор, синтезатор частоты и усилитель сигнала. Дальность действия nrf24l01+ 2.4G составляет до 100 метров, а в версии с усилителем и внешней антенной nrf24l01+pa+lna 2.4G — до 1000 метров в прямой видимости. Модуль нрф может использовать 127 каналов связи с частотой сигнала от 2,4 ГГц до 2,483 ГГц. Скорость соединения может быть установлена на 250 кбит/с, 1 Мбит/с или 2 Мбит/с.
Как подключить радиомодуль NRF24L01+ к Ардуино

Гораздо проще настроить связь по радиоканалу, если платы Ардуино подключены к разным компьютерам или ноутбуку. Тогда отладить программу для приемника и передатчика вам будет намного проще и быстрее. Перед передачей данных по радиоканалу лучше всего проверить каждый модуль nrf24l01 путем сканирования частот — это позволит убедиться, что модули были правильно подключены и работают.
Скетч для сканирования радио частот NRF24L01+
#include "SPI.h"
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9,10); // для платы MEGA2560 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);
radio.stopListening();
int i = 0;
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+

Модуль использует интерфейс SPI, поэтому подключите модуль nRF24L01 к определенным портам микроконтроллера (помните, что Arduino Mega имеет SPI на других портах). Одна плата Arduino с дисплеем должна быть настроена, как приемник сигнала, а другой микроконтроллер с датчиком воды — как передатчик. После подключения беспроводных модулей к Ардуино загрузите соответствующие скетчи в приемник и передатчик.
Скетч для передатчика NRF24L01+PA+LNA Arduino
#include "SPI.h"
#include "nRF24L01.h"
#include "RF24.h"
const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(9,10); // для платы MEGA2560 radio(9,53);
void setup() {
pinMode(A1, INPUT);
Serial.begin(9600);
radio.begin();
radio.setChannel(0); // выбор радиоканала (0 - 127)
// скорость RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
radio.setDataRate(RF24_1MBPS);
// мощность RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM
radio.setPALevel(RF24_PA_HIGH);
radio.openWritingPipe(pipe);
radio.stopListening();
}
void loop() {
int data = analogRead(A1);
radio.write(&data, sizeof(data));
Serial.print("data: ");
Serial.println(data);
delay(1000);
}

| LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VCC | 5V | 5V | 5V |
| SDA | A4 | A4 | 20 |
| SCL | A5 | A5 | 21 |
Скетч для приемника NRF24L01+PA+LNA 2.4G Arduino
#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27, 16, 2);
#include "SPI.h"
#include "nRF24L01.h"
#include "RF24.h"
const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(9,10); // для платы MEGA2560 radio(9,53);
void setup() {
LCD.init();
LCD.backlight();
Serial.begin(9600);
radio.begin();
radio.setChannel(0); // выбор радиоканала (0 - 127)
// скорость RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
radio.setDataRate(RF24_1MBPS);
// мощность RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM
radio.setPALevel(RF24_PA_HIGH);
radio.openReadingPipe(1, pipe);
radio.startListening();
}
void loop() {
int data;
if (radio.available())
{
radio.read(&data, sizeof(data));
Serial.print("data: ");
Serial.println(data);
LCD.setCursor(0, 0);
LCD.print("data: ");
LCD.print(data);
}
}
Заключение. Помимо довольно сложного подключения nrf24l01 к Arduino, модуль требует качественного питания. Поэтому к портам питания на радиомодуле (GND и VCC) следует припаять конденсатор емкостью до 10 мкФ — это уменьшит помехи в электрической цепи. Если вы проверили подключение и загрузили код с этой страницы, но радио модуль нрф отказывается работать, дело в питании или отсутствии конденсатора в схеме.
