Подключение модуля nRF24L01 к Ардуино

Подключение nRF24L01 к Ардуино

Подключение модуля nRF24L01 к Arduino позволит сделать беспроводную связь между микроконтроллерами на расстоянии до 30 метров. Рассмотрим, как наладить связь между двумя Ардуино по радиоканалу, чтобы передать данные с аналогового датчика утечки воды и цифрового датчика температуры и влажности DHT11. В первом случае будет передаваться один тип данных, во втором случае два сразу показателя.

Видео. Передача данных между Ардуино

nRF24L01 один из самых популярных беспроводных модулей для интернета вещей (IoT). Модули стоят недорого, но на их основе можно организовать многоканальную защищенную связь между контроллерами Ардуино и устройствами. Один модуль способен поддерживать связь сразу с шестью приемниками или передатчиками, т.е. можно объединить сразу семь устройств в общую радиосеть на частоте 2,4 ГГц.

Выполнить передачу данных между Arduino по радиоканалу будет намного проще, если у вас плата подключена к отдельному компьютеру или ноутбуку. Тогда сделать отладку скетча будет намного проще и быстрее. До передачи данных по радиоканалу через nRF24L01+, лучше всего проверить каждый модуль скетчем для сканирования — тогда вы будете уверены в правильности подключения и работоспособности модулей.

Как подключить nRF24L01 к Ардуино

Характеристики и описание радио модуля nRF24L01+ мы рассматривали уже ранее. Если сканирование модуля и радио частот прошло успешно, то проблем со связью между двумя Ардуино по радиоканалу у вас не будет. Для начала мы будем передавать данные с датчика уровня воды (протечки воды), но можно использовать и любой другой аналоговый датчик, например датчик температуры на основе LM35.

Для занятия нам понадобятся следующие детали:

  • 2 платы Arduino Uno;
  • 2 модуля nRF24L01;
  • USB-кабель;
  • датчик уровня воды;
  • цифровой датчик DHT11;
  • Провода «папа-мама», «папа-папа».

Передача данных с аналогового датчика

Как подключить к ардуино nrf24l01
Как подключить к Ардуино nrf24l01 и датчик воды

Скетч для передатчика. После сборки схемы с датчиком воды и модулем nRF24L01 загрузите следующий скетч в Ардуино на передающее устройство.

Скачать скетчи и библиотеки для nrf24l01+ можно с Google Диск по ссылке здесь

#include <SPI.h>      // библиотека для протокола SPI
#include <nRF24L01.h> // библиотека для nRF24L01+
#include <RF24.h>     // библиотека для радио модуля

const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи
RF24 radio(9,10); // Для MEGA2560 замените на RF24 radio(9,53);

void setup()
{
  pinMode(A0,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(A0);        // читаем значение с датчика
  
  radio.write(&data, sizeof(data)); // отправляем данные и указываем байты
  
  Serial.print("data: ");
  Serial.println(data);             // выводим данные на монитор порта
  delay(1000);
}

Скетч для приемника. На принимающее устройство загрузите следующий скетч.

#include <SPI.h>      // библиотека для протокола SPI
#include <nRF24L01.h> // библиотека для nRF24L01+
#include <RF24.h>     // библиотека для радио модуля

const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи
RF24 radio(9,10); // Для MEGA2560 замените на RF24 radio(9,53);

void setup()
{
  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);            // выводим данные на монитор порта
  }
}

На что обратить внимание:

  1. Порты 9 и 10 для подключения nRF24L01 можно поменять, как и канал связи;
  2. Данные с аналогового порта A0 отправляются на аппаратный последовательный порт и от передатчика по радио каналу 1 раз в секунду;
  3. Если данные с приемника не выводятся на мониторе порта, то первым делом проверьте правильность подключения передатчика.

Передача данных с цифрового датчика

Подключение nrf24l01+ к Arduino
Подключение nrf24l01+ к Arduino и датчика DHT11

Скетч для передатчика. После сборки схемы с датчиком DHT11 и модулем nRF24L01 загрузите следующий скетч в Ардуино на передающее устройство.

Скачать скетчи и библиотеки для nrf24l01 и DHT11 можно по ссылке здесь

#include <SPI.h>      // библиотека для протокола SPI
#include <nRF24L01.h> // библиотека для nRF24L01+
#include <RF24.h>     // библиотека для радио модуля
#include <DHT.h>      // библиотека для датчика DHT11

const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи
RF24 radio(9,10);  // Для MEGA2560 замените на RF24 radio(9,53);
DHT dht(2, DHT11); // сообщаем на каком порту будет датчик

void setup()
{
  dht.begin();         // включаем датчик DHT11
  Serial.begin(9600);  // включаем последовательный порт
  radio.begin();       // включаем радио модуль
  radio.setChannel(0); // выбираем канал (от 0 до 127)
  delay(2);

  radio.setChannel(0);            // устанавливаем канал (0-127)
  radio.setDataRate(RF24_1MBPS);  // скорость передачи данных
  radio.setPALevel(RF24_PA_HIGH); // мощность передатчика

  radio.openWritingPipe(pipe);    // открываем трубу на передачу
  radio.stopListening();          // останавливаем прослушку
}

void loop() 
{
  float data[2];
  
  data[0] = dht.readHumidity();     // заполняем массив
  data[1] = dht.readTemperature();  // заполняем массив
  radio.write(&data, sizeof(data)); // отправляем данные по радиосигналу

  Serial.print("Humidity: ");
  Serial.println(data[0]);          // выводим данные влажности
  Serial.print("Temperat: ");
  Serial.println(data[1]);          // выводим данные температуры
  Serial.println("-");
  delay(1000);
}

Скетч для приемника. На принимающее устройство загрузите следующий скетч.

#include <SPI.h>      // библиотека для протокола SPI
#include <nRF24L01.h> // библиотека для nRF24L01+
#include <RF24.h>     // библиотека для радио модуля

const uint64_t pipe = 0xF0F1F2F3F4LL; // идентификатор передачи
RF24 radio(9,10);  // Для MEGA2560 замените на RF24 radio(9,53);

void setup()
{
  Serial.begin(9600);  // включаем последовательный порт
  radio.begin();       // включаем радио модуль
  radio.setChannel(0); // выбираем канал (от 0 до 127)
  delay(2);

  radio.setChannel(0);            // устанавливаем канал (0-127)
  radio.setDataRate(RF24_1MBPS);  // скорость передачи данных
  radio.setPALevel(RF24_PA_HIGH); // мощность передатчика

  radio.openReadingPipe(1, pipe); // открываем первую трубу
  radio.startListening();         // начинаем слушать трубу
}

void loop() 
{
  float data[2];
  
  if (radio.available())             // проверяем буфер обмена
  {
    radio.read(&data, sizeof(data)); // читаем данные

  Serial.print("Humidity: ");
  Serial.println(data[0]);           // выводим данные влажности
  Serial.print("Temperat: ");
  Serial.println(data[1]);           // выводим данные температуры
  Serial.println("-");
  delay(500);
  }
}

На что обратить внимание:

  1. Порты 9 и 10 для подключения nRF24L01 можно поменять, как и канал связи;
  2. Данные с датчика температуры и влажности DHT11 отправляются на аппаратный последовательный порт и по радио каналу 1 раз в секунду;
  3. Если данные с приемника не выводятся на мониторе порта, то первым делом проверьте правильность подключения передатчика.

Задание для самостоятельного выполнения:

  1. Подключите к Ардуино, принимающее сигнал от модуля nRF24L01+, светодиод и допишите скетч, чтобы светодиод включался при достижении определенного значения температуры или влажности на передающем устройстве.
1 Star2 Stars3 Stars4 Stars5 Stars (22 votes, average: 4,82 out of 5)
Загрузка...

9 комментариев для “Подключение модуля nRF24L01 к Ардуино

  1. Код не рабочий, автор функции openWritingPipe указал и в приемнике и в передатчике. Верно указать в приемнике openReadingPipe и не stopListening, а startListening. Передатчик вроде работает верно. Брал пример для аналогового датчика

  2. Добрый день, собрал, как указано на схеме, передатчик работает, данные в Монитор порта загружаются, однако в приемник данные не поступают, Подскажите, пожалуйста, в чем может быть дело. Оба модуля тестировал по скетчу с вашей другой статьи http://роботехника18.рф/описание-радиомодуля-nrf24l01/ — работают исправно.

    1. Причин может быть очень много. Конденсаторы к радио модулям припаяны? Питание Ардуино идет от ПК или от аккумулятора?

      1. Конденсаторы не припаяны, питание от ПК, на приемнике вообще никакая информация не выводится, даже текстовая.

          1. Да, в том то и дело. И менял модули местами.

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

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