Перейти к содержанию

Радиомодуль NRF24L01+ подключение к Ардуино

Радиомодуль NRF24L01 2.4G подключение к Ардуино

Радио модуль 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

Дополнительные материалы на эту тему:

  1. Подключение WiFi модуля ESP-12E к Ардуино
  2. Подключение WiFi модуля ESP-01 к Ардуино
  3. Как подключить модуль RFID RC522 к Ардуино

Радиомодули стоят недорого и могут быть использованы для организации защищенной многоканальной связи между устройствами на плате Ардуино. С помощью nrf24l01+ можно создать многоканальную связь, т.е. объединить в сеть до 7 устройств, которые могут одновременно принимать и отправлять сигнал. Мы будем передавать данные с датчика воды, но можно использовать в работе любой аналоговый или цифровой датчик.

nrf24l01 / pa+lna Arduino распиновка, характеристики

nrf24l01 и nrf24l01+pa+lna распиновка, характеристики

Характеристики 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 путем сканирования частот — это позволит убедиться, что модули были правильно подключены и работают.

Скетч для сканирования радио частот 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+

Радиосвязь между платами Ардуино на 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);
}

Как подключить радиомодуль NRF24L01 и LCD дисплей

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 мкФ — это уменьшит помехи в электрической цепи. Если вы проверили подключение и загрузили код с этой страницы, но радио модуль нрф отказывается работать, дело в питании или отсутствии конденсатора в схеме.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

newzaym
➜