nRF24L01+: радиосвязь между платами без Wi-Fi
Когда датчик надо вынести на улицу, в теплицу или в подвал, тянуть провод неудобно, а Wi-Fi там либо не добивает, либо съедает батарею. Для таких случаев есть маленький радиомодуль nRF24L01+ производства Nordic Semiconductor: два таких модуля соединяют две платы напрямую, без роутера и без интернета.

Характеристики по документации Nordic
| Параметр | Значение |
|---|---|
| Диапазон | 2,400—2,4835 ГГц (тот же, что у Wi-Fi) |
| Скорость обмена | 250 кбит/с, 1 Мбит/с, 2 Мбит/с |
| Питание | 1,9…3,6 В |
| Ток при передаче | 11,3 мА (мощность 0 дБм) |
| Ток при приёме | 13,5 мА (на 2 Мбит/с) |
| Ток в режиме ожидания | 26 мкА |
| Ток в выключенном состоянии | 900 нА |
| Чувствительность приёмника | −85 дБм на 1 Мбит/с, −94 дБм на 250 кбит/с |
| Интерфейс с платой | SPI, входы терпят 5 В |
| Приём | до 6 адресов одновременно |
| Размер пакета | 1…32 байта |
Главная строка этой таблицы
Чувствительность на медленной скорости на девять децибел лучше, чем на быстрой. В переводе на практику: переключив модуль с 1 Мбит/с на 250 кбит/с, вы примерно втрое увеличиваете дальность на той же антенне. Для передачи трёх чисел с датчика скорость не нужна вообще — ставьте минимальную сразу.
Почему модуль «не видит» второй
Это самая частая жалоба, и в девяти случаях из десяти виновато питание, а не радио. В момент передачи модуль выдёргивает импульс тока, а вывод 3,3 В на плате Arduino Nano слаб — напряжение проседает, модуль перезагружается. Лечение стандартное и обязательное: конденсатор 10 мкФ прямо на выводы питания модуля, максимально близко к плате. Без него схема работает через раз, и никакой код это не исправит.
Второе по частоте — питание с пина 5 В. Модуль рассчитан максимум на 3,6 В, пять вольт его убивают. При этом сигнальные входы пять вольт терпят, поэтому с Arduino Uno связка работает: питание с 3,3 В, данные напрямую.
Подключение
nRF24L01+ Arduino Uno ESP32
VCC -> 3V3 3V3 (плюс конденсатор 10 мкФ!)
GND -> GND GND
CE -> D9 GPIO 4
CSN -> D10 GPIO 5
SCK -> D13 GPIO 18
MOSI -> D11 GPIO 23
MISO -> D12 GPIO 19
Минимальный обмен
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte adres[6] = "uzel1";
void setup() {
radio.begin();
radio.setDataRate(RF24_250KBPS); // дальность важнее скорости
radio.setPALevel(RF24_PA_LOW); // на столе — LOW, на дистанции — HIGH
radio.openWritingPipe(adres);
radio.stopListening();
}
void loop() {
float t = 23.4;
radio.write(&t, sizeof(t));
delay(2000);
}
На приёмной стороне тот же адрес, openReadingPipe(1, adres) и startListening(). Библиотека RF24 ставится через менеджер библиотек.
Когда брать не его
nRF24L01+ хорош для своей связки «плата — плата». Если данные нужны в телефоне или на сервере, радиомодуль лишний: у ESP32 уже есть Wi-Fi, и он же умеет ESP-NOW — обмен между платами без роутера, на том же чипе и без лишних проводов. Модуль остаётся оправдан там, где на дальнем конце стоит дешёвая Arduino без беспроводного интерфейса, а батарею надо растянуть надолго: 900 наноампер в спящем режиме — величина, которую трудно перебить.
Как выглядит такой автономный узел целиком, разобрано в сборке метеостанции.
Информация собрана из открытых источников и паспортов производителей и не является истиной в последней инстанции. Характеристики, распиновку и совместимость проверяйте по документации конкретной партии модуля перед покупкой и подключением.