Полное руководство по nRF24L01 – радиочастотный трансивер 2.4 ГГц с Arduino

Эта статья является полным руководством по модулю nRF24L01 – радиочастотному трансиверу 2.4 ГГц. Я объясню, что он делает, покажу его характеристики и приведу пример проекта Arduino, который вы сможете взять и применить в своих собственных проектах.

nRF24L01 радиочастотный трансивер 2.4 ГГц

У меня есть более полные руководства по другим популярным датчикам, ознакомьтесь с ними ниже:

Описание

Эти радиочастотные модули очень популярны среди любителей Arduino. Модуль nRF24L01 используется в самых разнообразных приложениях, требующих беспроводного управления. Это трансиверы, что означает, что каждый модуль может как передавать, так и принимать данные.

Эти модули очень дёшевы, и вы можете использовать их с любым микроконтроллером (MCU).

Технические характеристики nRF24L01 – радиочастотный трансивер 2.4 ГГц

  • Недорогая однокристальная микросхема радиочастотного трансивера 2.4 ГГц GFSK

  • Дальность с антенной: на скорости 250 Кбит/с (открытая местность) > 1000 метров

  • Питание: сверхнизкое энергопотребление

  • Входное напряжение: 3.3 В

  • Выводы: совместимы с 5 В

  • Цена: $2

Где купить?

Вы можете приобрести эти модули всего за несколько долларов. Нажмите здесь, чтобы сравнить модуль nRF24L01 в нескольких магазинах и найти лучшую цену. Они выпускаются в двух версиях: с внешней антенной (большая дальность) или со встроенной антенной (меньшая дальность).

Вы можете воспользоваться приведёнными выше ссылками или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все детали для ваших проектов по лучшей цене!

Arduino с nRF24L01

Для этого примера вам понадобятся следующие компоненты:

  • 2x Arduino (eBay)

  • 2x nRF24L01 – радиочастотный трансивер 2.4 ГГц (eBay)

  • Макетная плата (eBay)

Загрузка библиотеки

Вот библиотека, которая вам нужна для этого проекта:

  1. Скачайте библиотеку `RadioHead <http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.46.zip>`_

  2. Распакуйте библиотеку RadioHead

  3. Установите библиотеку RadioHead в вашу Arduino IDE

  4. Перезапустите вашу Arduino IDE

Библиотека RadioHead отлично подходит и работает практически со всеми радиочастотными модулями на рынке. Вы можете узнать больше об этом проекте здесь.

Распиновка

Распиновка NRF24L01, вид сверху

Схема клиента

nRF24L01 RadioHead подключение к Arduino

Важно: Входное напряжение составляет 1.9 В ~ 3.6 В, не превышайте это напряжение, иначе вы сожжёте ваш модуль.

Следуйте приведённой выше схеме для вашего клиента. Затем загрузите код, приведённый ниже, который можно найти в вашей Arduino IDE (после установки библиотеки RadioHead).

Перейдите в File > Examples > RadioHead > nrf24 > nrf24_client.

// nrf24_client

#include <SPI.h>
#include <RH_NRF24.h>

// Singleton instance of the radio driver
RH_NRF24 nrf24;
// RH_NRF24 nrf24(8, 7); // use this to be electrically compatible with Mirf
// RH_NRF24 nrf24(8, 10);// For Leonardo, need explicit SS pin
// RH_NRF24 nrf24(8, 7); // For RFM73 on Anarduino Mini

void setup()
{
  Serial.begin(9600);
  while (!Serial)
    ; // wait for serial port to connect. Needed for Leonardo only
  if (!nrf24.init())
    Serial.println("init failed");
  // Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
  if (!nrf24.setChannel(1))
    Serial.println("setChannel failed");
  if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
    Serial.println("setRF failed");
}

void loop()
{
  Serial.println("Sending to nrf24_server");
  // Send a message to nrf24_server
  uint8_t data[] = "Hello World!";
  nrf24.send(data, sizeof(data));

  nrf24.waitPacketSent();
  // Now wait for a reply
  uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
  uint8_t len = sizeof(buf);

  if (nrf24.waitAvailableTimeout(500))
  {
    // Should be a reply message for us now
    if (nrf24.recv(buf, &len))
    {
      Serial.print("got reply: ");
      Serial.println((char*)buf);
    }
    else
    {
      Serial.println("recv failed");
    }
  }
  else
  {
    Serial.println("No reply, is nrf24_server running?");
  }
  delay(400);
}

Просмотреть исходный код

Схема сервера

nRF24L01 RadioHead подключение к Arduino

Важно: Входное напряжение составляет 1.9 В ~ 3.6 В, не превышайте это напряжение, иначе вы сожжёте ваш модуль.

Следуйте приведённой выше схеме для вашего сервера. Затем загрузите код, приведённый ниже, который можно найти в вашей Arduino IDE (после установки библиотеки RadioHead).

Перейдите в File > Examples > RadioHead > nrf24 > nrf24_server.

// nrf24_server

#include <SPI.h>
#include <RH_NRF24.h>

// Singleton instance of the radio driver
RH_NRF24 nrf24;
// RH_NRF24 nrf24(8, 7); // use this to be electrically compatible with Mirf
// RH_NRF24 nrf24(8, 10);// For Leonardo, need explicit SS pin
// RH_NRF24 nrf24(8, 7); // For RFM73 on Anarduino Mini

void setup()
{
  Serial.begin(9600);
  while (!Serial)
    ; // wait for serial port to connect. Needed for Leonardo only
  if (!nrf24.init())
    Serial.println("init failed");
  // Defaults after init are 2.402 GHz (channel 2), 2Mbps, 0dBm
  if (!nrf24.setChannel(1))
    Serial.println("setChannel failed");
  if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm))
    Serial.println("setRF failed");
}

void loop()
{
  if (nrf24.available())
  {
    // Should be a message for us now
    uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
    uint8_t len = sizeof(buf);
    if (nrf24.recv(buf, &len))
    {
//      NRF24::printBuffer("request: ", buf, len);
      Serial.print("got request: ");
      Serial.println((char*)buf);

      // Send a reply
      uint8_t data[] = "And hello back to you";
      nrf24.send(data, sizeof(data));
      nrf24.waitPacketSent();
      Serial.println("Sent a reply");
    }
    else
    {
      Serial.println("recv failed");
    }
  }
}

Просмотреть исходный код

Демонстрация

В этом проекте клиент отправляет сообщение «Hello World!» серверу по радиоканалу, а сервер отправляет обратно следующее сообщение «And hello back to you». Эти сообщения отображаются в мониторе последовательного порта. Вот что вы должны увидеть в окнах вашего последовательного терминала (см. рисунок ниже).

Последовательная связь nRF24L01 между клиентом и сервером

Примечание: В левом окне я устанавливаю последовательную связь с помощью PuTTY.org. В правом окне я использую монитор последовательного порта Arduino IDE.

Заключение

При использовании этого модуля необходимо иметь реалистичные ожидания. Они работают очень хорошо, когда приёмник и передатчик находятся достаточно близко друг к другу. Если вы разнесёте их слишком далеко, связь будет потеряна.

Дальность связи будет варьироваться. Она зависит от уровня помех в вашей среде, наличия препятствий и от того, используете ли вы внешнюю антенну.

Надеюсь, вы нашли это руководство полезным.