ELECTRONICS

nRF24L01+ и Arduino: схема подключения по SPI, библиотека RF24, передатчик и приёмник

Беспроводные модулиСкетч проверен компиляцией

nRF24L01+ — радиомодуль на 2,4 ГГц для связи двух и более Arduino между собой: пульт и машинка, датчики по дому и приёмник у компьютера. Дальность обычной версии 30–100 метров, версии PA+LNA с внешней антенной — до километра на открытом месте.

У модуля репутация капризного, и она заслужена одним обстоятельством: питание 3,3 В со всплесками тока при передаче. Стабилизатор UNO их не тянет. Конденсатор 10–100 мкФ прямо на выводах питания модуля решает девять проблем из десяти.

Схема подключения

Схема подключения радиомодуля nRF24L01+ к Arduino UNO: VCC к 3,3 В, GND к GND, CE к пину 9, CSN к пину 10, SCK к 13, MOSI к 11, MISO к 12
Питание только от 3,3 В, SPI — на выводы 11, 12 и 13. CE и CSN — любые цифровые, номера задаются в конструкторе RF24 radio(9, 10).
Запустить в симулятореЭта схема со скетчем — поменяйте что угодно и посмотрите токи · как работает симулятор

Распиновка

ПроводКуда и зачем
GND (1)Земля. Квадратная площадка — ключ разъёма.
VCC (2)3,3 В, до 15 мА в пиках. Конденсатор рядом.
CE (3)Chip Enable: включает приём или передачу. Любой вывод.
CSN (4)SPI Chip Select. Любой вывод, в примере 10.
SCK (5)Такт SPI, вывод 13.
MOSI (6)Вывод 11.
MISO (7)Вывод 12.
IRQ (8)Прерывание по приёму. Не подключается в простых схемах.

Характеристики

Частота
2,4 ГГц, 126 каналов
Скорость
250 кбит/с, 1 и 2 Мбит/с
Дальность
30–100 м; PA+LNA — до 1 км
Питание
1,9–3,6 В
Ток
12–15 мА в пиках, 1 мкА в сне
Интерфейс
SPI
Размер
29 × 15,5 мм

Труба, адрес и канал

Модули общаются по «трубам» — адресам из пяти байт. Передатчик открывает трубу на запись, приёмник — на чтение с тем же адресом. Адрес произвольный, лишь бы совпадал; в примерах ставят что-то вроде 00001.

Канал — номер частоты от 0 до 125. По умолчанию 76, и он пересекается с Wi-Fi. Если связь рвётся в квартире, переставьте оба модуля на канал выше 100: там Wi-Fi нет. Скорость 250 кбит/с даёт лучшую дальность — для датчиков её хватает с запасом.

Библиотека

RF24 (TMRh20)— В менеджере библиотек их несколько с похожими именами. Нужна RF24 от TMRh20 — самая живая и с нормальными примерами.

Методы RF24, примеры и типичные ошибки

Готовый скетч

#include <SPI.h>
#include <RF24.h>

RF24 radio(9, 10);                      // CE, CSN
const byte address[6] = "00001";

// Поставьте true на одной плате и false на другой
const bool IS_TRANSMITTER = true;

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);         // рядом хватает малой мощности
  radio.setDataRate(RF24_250KBPS);        // медленнее — дальше
  radio.setChannel(108);                  // выше Wi-Fi
  if (IS_TRANSMITTER) {
    radio.openWritingPipe(address);
    radio.stopListening();
  } else {
    radio.openReadingPipe(1, address);
    radio.startListening();
  }
}

void loop() {
  if (IS_TRANSMITTER) {
    int value = analogRead(A0);
    bool ok = radio.write(&value, sizeof(value));
    Serial.println(ok ? "отправлено" : "нет ответа");
    delay(500);
  } else if (radio.available()) {
    int value = 0;
    radio.read(&value, sizeof(value));
    Serial.print("принято: ");
    Serial.println(value);
  }
}

Скетч собирается arduino-cli под Arduino UNO

Один скетч на обе платы: меняется только IS_TRANSMITTER. Передатчик шлёт значение с A0, приёмник печатает его.

Частые ошибки

radio.write возвращает false, приёмник молчит

В девяти случаях из десяти — питание. Конденсатор 10–100 мкФ между VCC и GND модуля, максимально близко к разъёму. Без него модуль сбрасывается в момент передачи.

Работает на столе, теряется в другой комнате

Мощность стоит RF24_PA_LOW — поднимите до HIGH или MAX. Для MAX нужен ещё больший конденсатор и хороший источник 3,3 В.

Сгорел при подключении

Подали 5 В на VCC. Модуль терпит 5-вольтовые сигналы на входах, но не на питании.

Модули не видят друг друга через раз

Разные версии библиотеки, разные настройки скорости или канала. Оба модуля должны иметь одинаковые setDataRate и setChannel, а адреса совпадать побайтно.

Версия PA+LNA хуже обычной

Антенный модуль ест до 115 мА и требует стабилизатора на 3,3 В с запасом — от UNO он не работает. Ставят переходник с собственным стабилизатором или конденсатор от 470 мкФ.

Что понадобится