Полное руководство по nRF24L01 – радиочастотный трансивер 2.4 ГГц с Arduino
Эта статья является полным руководством по модулю nRF24L01 – радиочастотному трансиверу 2.4 ГГц. Я объясню, что он делает, покажу его характеристики и приведу пример проекта Arduino, который вы сможете взять и применить в своих собственных проектах.
У меня есть более полные руководства по другим популярным датчикам, ознакомьтесь с ними ниже:
Полное руководство по датчику влажности и температуры DHT11/DHT22
Полное руководство по радиочастотному модулю передатчика/приёмника 433 МГц
Описание
Эти радиочастотные модули очень популярны среди любителей Arduino. Модуль nRF24L01 используется в самых разнообразных приложениях, требующих беспроводного управления. Это трансиверы, что означает, что каждый модуль может как передавать, так и принимать данные.
Эти модули очень дёшевы, и вы можете использовать их с любым микроконтроллером (MCU).
Технические характеристики nRF24L01 – радиочастотный трансивер 2.4 ГГц
Недорогая однокристальная микросхема радиочастотного трансивера 2.4 ГГц GFSK
Дальность с антенной: на скорости 250 Кбит/с (открытая местность) > 1000 метров
Питание: сверхнизкое энергопотребление
Входное напряжение: 3.3 В
Выводы: совместимы с 5 В
Цена: $2
Где купить?
Вы можете приобрести эти модули всего за несколько долларов. Нажмите здесь, чтобы сравнить модуль nRF24L01 в нескольких магазинах и найти лучшую цену. Они выпускаются в двух версиях: с внешней антенной (большая дальность) или со встроенной антенной (меньшая дальность).
Вы можете воспользоваться приведёнными выше ссылками или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все детали для ваших проектов по лучшей цене!
Arduino с nRF24L01
Для этого примера вам понадобятся следующие компоненты:
Загрузка библиотеки
Вот библиотека, которая вам нужна для этого проекта:
Скачайте библиотеку `RadioHead <http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.46.zip>`_
Распакуйте библиотеку RadioHead
Установите библиотеку RadioHead в вашу Arduino IDE
Перезапустите вашу Arduino IDE
Библиотека RadioHead отлично подходит и работает практически со всеми радиочастотными модулями на рынке. Вы можете узнать больше об этом проекте здесь.
Распиновка
Схема клиента
Важно: Входное напряжение составляет 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);
}
Схема сервера
Важно: Входное напряжение составляет 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». Эти сообщения отображаются в мониторе последовательного порта. Вот что вы должны увидеть в окнах вашего последовательного терминала (см. рисунок ниже).
Примечание: В левом окне я устанавливаю последовательную связь с помощью PuTTY.org. В правом окне я использую монитор последовательного порта Arduino IDE.
Заключение
При использовании этого модуля необходимо иметь реалистичные ожидания. Они работают очень хорошо, когда приёмник и передатчик находятся достаточно близко друг к другу. Если вы разнесёте их слишком далеко, связь будет потеряна.
Дальность связи будет варьироваться. Она зависит от уровня помех в вашей среде, наличия препятствий и от того, используете ли вы внешнюю антенну.
Надеюсь, вы нашли это руководство полезным.