Радиомодуль nrf24l01. обзор

Программирование nRF24L01

Для написания скетчей в среде ARDUINO IDE нужно установить 2 библиотеки – RF24 и SerialFlow. Первая нужна для работы с модулем, вторая – для пакетной передачи данных. Ссылки на скачивание библиотек вы найдете в конце статьи.

Пример программы для передатчика. В первую очередь создается объект класса SerialFlow:

В этой строке 9 и 10 – это свободные пины с Ардуино, к которым подключаются контакты CN и CSN.

Настройка формата передаваемых пакетов производится в функции setup:

Первый аргумент (в данном случае число 2) определяет размер передаваемого числа. Для конкретного случая число находится в диапазоне от 0 до 655535 и занимает 2 байта. Для 0 до 255 будет занят 1 байт. Второй аргумент – количество чисел.

Далее нужно настроить адреса передатчика и приемника:

Первым аргументом записывается адрес передатчика, вторым – адрес приемника.

Цикл loop выполняет отправку пакетов.

Пример программы для приемника. При получении данных приемник должен сигнализировать об этом. Данные будут отправляться в монитор порта Arduino IDE.

В коде так же записывается объект SerialFlow и настраиваются необходимые параметры пакета данных. Изменения происходят в строчке

Теперь первым аргументом должен быть указан адрес приемника, а вторым – передатчика.

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

Помимо библиотек RF24 и SerialFlow существует и другая – библиотека Mirf. Выбор той или иной библиотеки определяется удобством работы.

Операторы для передачи данных между двумя модулями с помощью библиотеки Mirf:

  • payload = PAYLOAD; – задает размеры буфера для приема. На payload установлено ограничение – максимальный размер равен 32 байтам.
  • setRADDR((byte*)’serv1′); – выбор адреса приемника (размер не менее 3 байт и не более 5 байт).
  • setTADDR((byte *)’clie1′); – выбор адреса передатчика (размер не менее 3 байт и не более 5 байт).. Во время передачи пакета данных на первом модуле происходит установка адресата Mirf.setTADDR((byte *)’clie1′), затем пакет отправляется ко второму модулю. После этого на втором модуле устанавливается Mirf.setTADDR((byte *)’serv1′) и возвращается ответ на первый модуль.
  • isSending() – проверка окончания передачи данных.
  • dataReady() – проверка получения входящего пакета.
  • getData((byte *) &data); – чтение полученных пакетов в переменную data.
  • send((byte *) &data); – подача команды на отправку пакета. В библиотеке указывается адрес, в котором находятся переменные. После этого происходит копирование их в память и в итоге пользователь получает доступ к переданным данным через переменные. Способ удобен тем, что можно передавать любой тип данных, в том числе структуры.

Описание радиомодуля nRF24L01+

Радиомодуль nRF24L01+, как я уже писал, стоит достаточно дешево – всего 50 руб, то есть за 100 руб можно купить два передатчика, между которыми и будет осуществляться беспроводная передача данных. Модуль может работать как передатчик и как приемник, отличия будут только в прошивке. Дальность действия составляет 100 метров на открытой местности и 30 метров в помещении. Из минусов стоит отметить, что nRF24L01+ работает на частоте 2,4 ГГц, которую используют Wi-Fi и Bluetooth, они могут заглушать сигнал передатчика. Еще одним небольшим минусом является то, что nRF24L01+ питается от напряжения 3.3в, поэтому подключать его нужно аккуратно – 5в могут испортить модуль. Большинство плат arduino имеет пины с напряжением 3.3в, поэтому иногда проблема решается просто. Но бывают и другие случаи, например, arduino pro mini не всегда оснащена пином с нужным питанием, в таком случае придется использовать преобразователь напряжения. Также к сложностям можно отнести то, что при запуске, nRF24L01+ требуется довольно большой ток и многие китайские копии arduino не могут его выдавать. Чтобы решить такую проблему достаточно припаять к радиомодулю(к пинам питания) конденсатор емкостью от 10 мфд. Поскольку я пользуюсь arduino, которые бережно собирают в Китае, то столкнувшись с проблемой, немного модернизировал nRF24L01+, получилось вот так:

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

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

  • nRF24 Library;
  • nRF24 Audio Library;
  • Maniaxbug RF24 Library.

В программе мы производим подключение заголовочных файлов этих библиотек.

Arduino

#include <RF24.h>
#include <SPI.h>
#include <RF24Audio.h>
#include «printf.h» // General includes for radio and audio lib

1
2
3
4

#include <RF24.h>
#include <SPI.h>
#include <RF24Audio.h>
#include «printf.h»    // General includes for radio and audio lib

Далее мы произведем инициализацию объекта радио на контактах 7 и 8 платы Arduino и установим номер радиоканала равный 0. Также инициализируем кнопку PPT на контакт 3.

Arduino

RF24 radio(7,8); // Set radio up using pins 7 (CE) 8 (CS)
RF24Audio rfAudio(radio,0); // Set up the audio using the radio, and set to radio number 0
int talkButton = 3;

1
2
3

RF24radio(7,8);// Set radio up using pins 7 (CE) 8 (CS)

RF24AudiorfAudio(radio,);// Set up the audio using the radio, and set to radio number 0

inttalkButton=3;

Arduino

void setup() {
Serial.begin(115200);
printf_begin();
radio.begin();
radio.printDetails();
rfAudio.begin();
pinMode(talkButton, INPUT);//sets interrupt to check for button talk abutton press
attachInterrupt(digitalPinToInterrupt(talkButton), talk, CHANGE); //sets the default state for each module to receive
rfAudio.receive();
}

1
2
3
4
5
6
7
8
9
10

voidsetup(){

Serial.begin(115200);

printf_begin();

radio.begin();

radio.printDetails();

rfAudio.begin();

pinMode(talkButton,INPUT);//sets interrupt to check for button talk abutton press

attachInterrupt(digitalPinToInterrupt(talkButton),talk,CHANGE);//sets the default state for each module to receive

rfAudio.receive();

}

Далее мы запрограммируем функцию talk(), которая будет служить функцией обработки прерывания. При нажатии PTT кнопки будет формироваться сигнал прерывания, который будет передавать управление функции talk(), которая, в свою очередь, будет переключать нашу радиостанцию в режим передачи. При отпускании кнопки радиостанция будет снова возвращаться в режим приема.

Arduino

void talk()
{
if (digitalRead(talkButton)) rfAudio.transmit();
else rfAudio.receive();
}
void loop()
{
}

1
2
3
4
5
6
7
8

voidtalk()

{

if(digitalRead(talkButton))rfAudio.transmit();

elserfAudio.receive();

}

voidloop()

{
}

Подробно работу нашего проекта можно посмотреть на видео, приведенном в конце статьи. Примерно похожий проект радиостанций можно реализовать и на основе модулей Lora.

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

Программирование nRF24L01

Для написания скетчей в среде ARDUINO IDE нужно установить 2 библиотеки – RF24 и SerialFlow. Первая нужна для работы с модулем, вторая – для пакетной передачи данных. Ссылки на скачивание библиотек вы найдете в конце статьи.

Пример программы для передатчика. В первую очередь создается объект класса SerialFlow:

В этой строке 9 и 10 – это свободные пины с Ардуино, к которым подключаются контакты CN и CSN.

Настройка формата передаваемых пакетов производится в функции setup:

Первый аргумент (в данном случае число 2) определяет размер передаваемого числа. Для конкретного случая число находится в диапазоне от 0 до 655535 и занимает 2 байта. Для 0 до 255 будет занят 1 байт. Второй аргумент – количество чисел.

Далее нужно настроить адреса передатчика и приемника:

Первым аргументом записывается адрес передатчика, вторым – адрес приемника.

Цикл loop выполняет отправку пакетов.

Пример программы для приемника. При получении данных приемник должен сигнализировать об этом. Данные будут отправляться в монитор порта Arduino IDE.

В коде так же записывается объект SerialFlow и настраиваются необходимые параметры пакета данных. Изменения происходят в строчке

Теперь первым аргументом должен быть указан адрес приемника, а вторым – передатчика.

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

Помимо библиотек RF24 и SerialFlow существует и другая – библиотека Mirf. Выбор той или иной библиотеки определяется удобством работы.

Операторы для передачи данных между двумя модулями с помощью библиотеки Mirf:

  • payload = PAYLOAD; – задает размеры буфера для приема. На payload установлено ограничение – максимальный размер равен 32 байтам.
  • setRADDR((byte*)’serv1′); – выбор адреса приемника (размер не менее 3 байт и не более 5 байт).
  • setTADDR((byte *)’clie1′); – выбор адреса передатчика (размер не менее 3 байт и не более 5 байт).. Во время передачи пакета данных на первом модуле происходит установка адресата Mirf.setTADDR((byte *)’clie1′), затем пакет отправляется ко второму модулю. После этого на втором модуле устанавливается Mirf.setTADDR((byte *)’serv1′) и возвращается ответ на первый модуль.
  • isSending() – проверка окончания передачи данных.
  • dataReady() – проверка получения входящего пакета.
  • getData((byte *) &data); – чтение полученных пакетов в переменную data.
  • send((byte *) &data); – подача команды на отправку пакета. В библиотеке указывается адрес, в котором находятся переменные. После этого происходит копирование их в память и в итоге пользователь получает доступ к переданным данным через переменные. Способ удобен тем, что можно передавать любой тип данных, в том числе структуры.

NRF24L01 Arduino Guide

In this guide, we’ll be using the first version of NRF2401 that comes with the onboard antenna instead.

It’ll be kept simple by using a regular cherry switch, where when clicked, it’ll send a value that’s picked up by another module and light up a WS2812 LED stick.

Transmitter + Receiver Connections:

Board used: Arduino Nano

Consider Seeeduino Nano, a better alternative

Switch and Nano configuration:

The switch is connected to the GND and Pin 8 on the Nano

Nano and NRF24L01 pin configuration:

  • MISO connects to pin 12 of the Nano
  • MOSI connects to pin 11 of the Nano
  • SCK connects to pin 13 of the Nano
  • CE connects to pin 9 of the Nano
  • CSN connects to pin 10 of the Nano
  • GND and VCC of the NRF24L01 are connected to GND and 3.3V of the Nano

It’s recommended to use Arduino Nano and Uno as they share the same SPI pins.

Transmitter Code:

Copy the sketch code below in your Arduino IDE software to program your Arduino

Board used: Arduino Uno

The receiver part will be the one that has the WS2812 LED stick, receiving information sent by the Transmitter.

WS2812 LED and Uno Pin Configuration:

  • DI pin on the WS2812 is connected to Pin 8 on the Uno
  • GND and VCC on the WS2812 are connected to the GND and 5V of the Uno

NRF24L01 and Uno Pin Configuration:

  • MISO connects to pin 12 of the Uno
  • MOSI connects to pin 11 of the Uno
  • SCK connects to pin 13 of the Uno
  • CE connects to pin 9 of the Uno
  • CSN connects to pin 10 of the Uno
  • GND and VCC are connected to GND and 3.3V of the Uno

Receiver Code:

Copy the sketch code below in your Arduino IDE software to program your Arduino

For the full tutorial, you can head here!

Скачать библиотеки nrf24l01

Основная библиотека для работы с модулем – RF24. В библиотеке содержится огромное количество примеров программ

Важно отметить, что во время записи программы в ардуино нужно отключить модуль передатчика. Также перед первой инициализацией нужно сделать паузу в 2 секунды после подачи напряжения

Перед началом работы функцию RF24::flush_tx нужно сделать публичной и очистить буфер передачи перед отправкой новых сообщений.

Другая библиотека nrf24l01 – SerialFlow. Эта библиотека нужна для того, чтобы задавать формат передаваемого пакета, устанавливать функции для упаковки информации в пакет и их распаковки.

Библиотека Mirf. Эта библиотека является альтернативой вышеописанной RF24. Последняя ближе к стандартам, используемым для программирования ардуино, поэтому многим, особенно новичкам, может быть неудобна работа с mirf. Выбор той или иной библиотеки определяется только удобством и простотой ее для пользователя.

Передача структур nrf24l01

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

Во время работы со структурами нужно внимательно рассчитать ее размер и указать PAYLOAD. Общий размер структуры будет равен сумме всех размеров составляющих ее переменных.

Основные элементы кода:

#define ADDR “mod0” //указывается адрес модуля

#define NEXT “mod1” //указывается адрес следующего модуля

boolean iamfirst=true;//начинает ли этот модуль цепочку?

#define PAYLOAD 5 //размер полезной нагрузки

Все модули в итоге будут получать одинаковый скетч, в котором различаться будут только переменные ADDR, NEXT и iamfirst.

Передача структур nrf24l01

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

Во время работы со структурами нужно внимательно рассчитать ее размер и указать PAYLOAD. Общий размер структуры будет равен сумме всех размеров составляющих ее переменных.

Основные элементы кода:

#define ADDR “mod0” //указывается адрес модуля

#define NEXT “mod1” //указывается адрес следующего модуля

boolean iamfirst=true;//начинает ли этот модуль цепочку?

#define PAYLOAD 5 //размер полезной нагрузки

Все модули в итоге будут получать одинаковый скетч, в котором различаться будут только переменные ADDR, NEXT и iamfirst.

Описание модуля NRF24L01

Нельзя создать по-настоящему интересный проект, не дав возможность создания коммуникаций между различными элементами системы

Поэтому так важно выбрать правильную платформу для организации связи между модулями. NRF24l01 отлично подходит для создания распределенных систем с датчиками и контроллерами, разнесенными на расстояния до 100 метров

NRF24l01 – это высокоинтегрированная микросхема с пониженным потреблением энергии (ULP) 2Мбит/с для диапазона 2,4 ГГц. При помощи модуля можно связать несколько устройств для передачи данных по радиоканалу. Можно объединить до семи приборов в одну общую радиосеть на частоте 2,4 ГГц, один из модулей будет выступать в роли ведущего, остальные – ведомые. Радиомодуль NRF24l01 стоит дешево, поэтому его можно встретить в самых разных проектах – от умного дома до различных самодельных роботов.

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

  • Низкие затраты энергии;
  • Наличие усовершенствованного ускорителя аппаратного протокола ShockBurst;
  • Операционная система ISM;
  • Скорость передачи данных 250 Кбит/с, 1 Мбит/с и 2 Мбит/с;
  • Полная совместимость со всеми стандартными сериями nRF24L Nordic, а также сериями nRF24E и nRF240;
  • Напряжение питания 3,3В;
  • Рабочие температуры от -40С до 85С, температуры хранения от -40С до 125С;
  • Дальность связи до 100 м.

Основой модуля служит nRF24L01+ производства компании Nordic Semiconductor. На микросхеме расположены все необходимые элементы и вилка разъема. По интерфейсу SPI можно произвести настройку протокола, установить выходную мощность и наладить каналы обмена данных.

Сфера применения модуля nrf24l01

Одним из самых главных компонентов проектов IoT являются средства коммуникации. nrf24l01 можно с успехом применять в следующих областях:

  • Мобильная электроника;
  • Компьютеры;
  • Автоматизированные системы;
  • Различные элементы «умного дома» – сигнализация, регулирование температуры и другие функции;
  • Игры;
  • Бытовая электроника.

В плату nRF24L01+ входят синтезатор частот, демодулятор, усилители и другие составляющие. Рабочая частота модуля определяется номером канала, диапазон частот, в котором происходит связь, 2,4 – 2,483 ГГц. Каналы располагаются через 1 МГц, то есть нулевому соответствует частота 2,4ГГц, каналу 83 – 2,483 ГГц.

Модуль имеет 4 рабочих режима – выключение (Power Down), спящий режим (Standby), прием данных(RX mode), передача данных (TX Mode). В режиме приема данных RX потребление тока выше, чем в режиме передачи данных TX.

За стабильную и надежную передачу и прием данных отвечает протокол Enhanced ShockBurst. Принимающее устройство должно давать ответ о приеме данных, подтверждая таким образом обратную связь.

Организация питания nrf24l01

Во время запуска микроконтроллера могут возникнуть проблемы, которые связаны с тем, что не предусмотрена нужная сила тока в модуле питания 3,3 В. Из-за этого могут возникнуть помехи, мешающие стабильной работе. Обычно подобные трудности появляются, когда используются платы Arduino Uno, Nano, Mega, то есть в тех, в которых не хватает мощности. Для приведенных видов плат на пины подается небольшой ток 50 мА.

Существует несколько методов решения этой проблемы:

  • Подключение конденсатора к микросхеме на 3, 3 В(+) и землю GND (-). Емкость лучше выбирать 10 мкФ и более.
  • Дополнительный источник напряжения на 3,3 В.
  • Разработка отдельной платы, установка на нее модуля nRF24L01 и добавление конденсаторов на 1 и 10 мкФ.
  • Применение YourDuinoRobo1, который обладает дополнительным регулятором на 3,3 В.

Troubleshooting

It’s worth noting that power supply noise is one of the most common issues people experience when trying to make successful communication with the NRF24L01 modules. Generally, RF circuits or radio frequency signals are sensitive to power supply noise. Therefore, it’s always a good idea to include a decoupling capacitor across the power supply line. The capacitor can be anything from 10uF to 100uF.

Another common issue is that the 3.3V pin of the Arduino boards, cannot always supply enough power to the NRF24L01 module. So, powering the module with an external power source is also a good idea.

Программирование nRF24L01

Для написания скетчей в среде ARDUINO IDE нужно установить 2 библиотеки – RF24 и SerialFlow. Первая нужна для работы с модулем, вторая – для пакетной передачи данных. Ссылки на скачивание библиотек вы найдете в конце статьи.

Пример программы для передатчика. В первую очередь создается объект класса SerialFlow:

В этой строке 9 и 10 – это свободные пины с Ардуино, к которым подключаются контакты CN и CSN.

Настройка формата передаваемых пакетов производится в функции setup:

Первый аргумент (в данном случае число 2) определяет размер передаваемого числа. Для конкретного случая число находится в диапазоне от 0 до 655535 и занимает 2 байта. Для 0 до 255 будет занят 1 байт. Второй аргумент – количество чисел.

Далее нужно настроить адреса передатчика и приемника:

Первым аргументом записывается адрес передатчика, вторым – адрес приемника.

Цикл loop выполняет отправку пакетов.

Пример программы для приемника. При получении данных приемник должен сигнализировать об этом. Данные будут отправляться в монитор порта Arduino IDE.

В коде так же записывается объект SerialFlow и настраиваются необходимые параметры пакета данных. Изменения происходят в строчке

Теперь первым аргументом должен быть указан адрес приемника, а вторым – передатчика.

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

Помимо библиотек RF24 и SerialFlow существует и другая – библиотека Mirf. Выбор той или иной библиотеки определяется удобством работы.

Операторы для передачи данных между двумя модулями с помощью библиотеки Mirf:

  • payload = PAYLOAD; – задает размеры буфера для приема. На payload установлено ограничение – максимальный размер равен 32 байтам.
  • setRADDR((byte*)’serv1′); – выбор адреса приемника (размер не менее 3 байт и не более 5 байт).
  • setTADDR((byte *)’clie1′); – выбор адреса передатчика (размер не менее 3 байт и не более 5 байт).. Во время передачи пакета данных на первом модуле происходит установка адресата Mirf.setTADDR((byte *)’clie1′), затем пакет отправляется ко второму модулю. После этого на втором модуле устанавливается Mirf.setTADDR((byte *)’serv1′) и возвращается ответ на первый модуль.
  • isSending() – проверка окончания передачи данных.
  • dataReady() – проверка получения входящего пакета.
  • getData((byte *) &data); – чтение полученных пакетов в переменную data.
  • send((byte *) &data); – подача команды на отправку пакета. В библиотеке указывается адрес, в котором находятся переменные. После этого происходит копирование их в память и в итоге пользователь получает доступ к переданным данным через переменные. Способ удобен тем, что можно передавать любой тип данных, в том числе структуры.

Организация питания nrf24l01

Во время запуска микроконтроллера могут возникнуть проблемы, которые связаны с тем, что не предусмотрена нужная сила тока в модуле питания 3,3 В. Из-за этого могут возникнуть помехи, мешающие стабильной работе. Обычно подобные трудности появляются, когда используются платы Arduino Uno, Nano, Mega, то есть в тех, в которых не хватает мощности. Для приведенных видов плат на пины подается небольшой ток 50 мА.

Существует несколько методов решения этой проблемы:

  • Подключение конденсатора к микросхеме на 3, 3 В(+) и землю GND (-). Емкость лучше выбирать 10 мкФ и более.
  • Дополнительный источник напряжения на 3,3 В.
  • Разработка отдельной платы, установка на нее модуля nRF24L01 и добавление конденсаторов на 1 и 10 мкФ.
  • Применение YourDuinoRobo1, который обладает дополнительным регулятором на 3,3 В.

Приемная часть: подключение модуля nRF24L01 к Arduino Uno

Приемная часть: подключение модуля nRF24L01 Arduino Uno. Схема соединенийПриемная часть: подключение модуля nRF24L01 Arduino Uno. Собранный макет

Как было сказано ранее, nRF24L01 взаимодействует с помощью интерфейса SPI. Для связи через SPI на Arduino Nano и UNO используются выводы 11, 12 и 13. Следовательно, мы подключаем выводы MOSI, MISO и SCK от nRF к выводам 11, 12 и 13 соответственно. Выводы CE и CS настраиваются пользователем, здесь я использовал выводы 7 и 8, но вы можете использовать любые выводы, изменив программу. Модуль nRF питается от вывода 3,3V на Arduino, что в большинстве случаев работать будет. Если нет, то можно попробовать отдельный источник питания. Помимо интерфейса nRF, я также подключил серводвигатель к выводу 7 и запитал его через вывод 5V на Arduino. Аналогично схема передатчика показана ниже.

What’s good about the nRF24l01?

When it comes down to cheap yet reliable 2-way RF solutions, there isn’t any module that does a better job than the nRF24L01. Here’s why:

Low cost – The NRF24L01 is one of the cheapest wireless transceiver modules in the market, you can easily grab one online for less than USD2!

Ease of Pairing with Microcontroller/Arduino Board – The nRF24L01 can be easily paired with a variety of microcontroller systems; MCU/ARM/PIC/AVR/STM32 by using the SPI protocol or an RF24 library when pairing with Arduino.

2.4Ghz for wireless communication flexibility – 2.4GHz operating frequency allows for higher bit rate usages rather than other lower operating frequencies. It uses GFSK modulation for data transmission as well, meaning data transfer rate can either be 250kbps, 1Mbps or 2Mbps.

High transmission range – The nRF24L01, when used with the right setup, is able to transmit wavelengths over several kilometres. However, if you need a standalone module with a high transmission range, you can check this nRF24L01+ module that’s designed with a power amplifier and IPX antenna for wireless communication of up to 1000 meters (no barrier)

Endless Applications – Ranging from Wireless PC Peripherals to controllers and toys, the nRF24L01 is applicable to be used for many scenarios.

Here’s a non-exhaustive list of applications:

  • Wireless PC Peripherals
  • Mouse, keyboards, and remotes
  • 3-in-1 desktop bundles
  • Advanced Media centre remote controls
  • VoIP headsets
  • Game controllers
  • Sports watches and sensors
  • RF remote controls for consumer electronics
  • Home and commercial automation
  • Active RFID
  • Asset tracking systems
  • Toys

Example 3 – Sending multiple variables in a single package

Let’s take a look at one more example code using the NRF24L01 modules. Everything remains the same as in the previous examples, expect for the way we structure and send the date.

Transmitter Code

So, we can create a struct which is actually a collection of various types of variables.

We should keep in mind that the maximum size of this struct data can be 32 bytes. Here we can see I included three variables type byte, one integer variable (4 bytes), one float variable (4 bytes) and one String containing four characters (4 bytes). That’s total of 15 bytes.

Receiver Code

At the receiver side, we have to define the same struct data in order to be able to receive the incoming data. For testing whether the wireless communication works properly, I printed each variable on the serial monitor.

Скачать библиотеки nrf24l01

Основная библиотека для работы с модулем – RF24. В библиотеке содержится огромное количество примеров программ

Важно отметить, что во время записи программы в ардуино нужно отключить модуль передатчика. Также перед первой инициализацией нужно сделать паузу в 2 секунды после подачи напряжения

Перед началом работы функцию RF24::flush_tx нужно сделать публичной и очистить буфер передачи перед отправкой новых сообщений.

Другая библиотека nrf24l01 – SerialFlow. Эта библиотека нужна для того, чтобы задавать формат передаваемого пакета, устанавливать функции для упаковки информации в пакет и их распаковки.

Библиотека Mirf. Эта библиотека является альтернативой вышеописанной RF24. Последняя ближе к стандартам, используемым для программирования ардуино, поэтому многим, особенно новичкам, может быть неудобна работа с mirf. Выбор той или иной библиотеки определяется только удобством и простотой ее для пользователя.

Беспроводное управление серводвигателем с помощью nRF24L01

Тестовый макет для проекта

Когда вы будете готовы, загрузите программы передатчика и приемника (приведены ниже) на соответствующие платы Arduino и подайте на них питание через USB порт. Вы также может запустить монитор последовательного порта для обеих плат, чтобы проверить, какое значение передается, и что принимается. Если всё работает должным образом, когда вы поворачиваете ручку потенциометра на стороне передатчика, то сервопривод на другой стороне должен вращаться соответствующим образом.

Работа проекта показана на демонстрационном видео ниже. Вполне нормально, если эти модули не заработают с первой попытки. Если вы столкнулись с какой-либо проблемой, снова проверьте код и разводку и попробуйте приведенные выше рекомендации по устранению неполадок.

Schematics

The schematics for this project is quite simple, connect one NRF24L01 to each of the two Arduino boards that will be used for this project as shown in the schematics below.

Schematics

The NRF24L01 module has 8 pins but only 7 is used in connecting with the arduino. The pin connections is described below to aid the understanding of the schematics.

NRF24L01  Arduino

GND  GND

VCC  3.3v

CE  D7

CS  D8

SCK  D13

MOSI  D11

MISO  D12

A little downside to this module is that we can’t plug the module in the breadboard due to its form factor so we are going to use the male to female wires in order to connect the module to Arduino.

It’s important that the module’s VCC pin is not connected to the Arduino 5v pin as this will damage the NRF24L01 module. It is a 3.3V device.

Double check the schematics to be sure everything is as it should be before proceeding to the code.

Conclusion

By this point, you should have some idea about the usefulness of these small and inexpensive radio boards and be ready to modify the code I’ve provided to make your own project.

Some project suggestions

  1. Use 3 potentiometers on A0, A1, and A2 to control the color of a common cathode RGB LED on the other Arduino. You can use pins 6, 5, and 3 as they are all PWM pins and a single 560 Ohm resistor on the common cathode to connect to GND
  2. Connect a Joystick to one Arduino and use it to set the speed and direction of the motors on an Arduino controlled floor buggy. You could add buttons to control LEDs or a Neopixel strip
  3. Use temperature, humidity, and air pressure sensors to send current readings from your garden shed to another Arduino fitted with an OLED SSD1306 or LCD display
  4. Look at the examples provided with the RF14 library. They include a few more statements not covered in this piece.

Problems

Using 2 Arduinos at the same time in a project more than doubles the number of things that can go wrong. You have two scripts to debug, 2 sets of hardware, and no easy way to check that your radios are working. It is very easy to update the code on the wrong Arduino when you have 2 instances of the IDE on the screen at the same time. I always keep the windows to the left and right of the screen matching the positions of the Arduinos on my desk and regularly check the ports at the bottom right of the IDE windows before uploading.

I was using a ‘proper’ UNO R3 and a Sparkfun RedBoard UNO R3 clone while developing this article. The one-way demos worked perfectly but as soon as I added the extra components I could not get them to ‘talk‘ to each other. I eventually ordered some of the NRF24L01 Wireless RF Transceiver Socket Adapter Boards with 3.3v Regulators.

I installed one on the RedBoard and at once everything started working. It would appear that adding the extra components reduced the power available on the 3V pin below the level needed to operate the radio successfully. Using the power from the 5V pin, through the 3.3V regulator on the adapter board, supplied enough power. These extra boards also have a power indication LED and all the pins have labels making the correct connection easier.

.fusion-body .fusion-button.button-1{border-radius:2px 2px 2px 2px;}Download

Upload the code to each board and keep the Arduino running the recevier code connected to the computer so you can view the data being displayed over the serial monitor. After a while, you should see the data from the transmitter being displayed on the serial monitor as shown in the Image below.

Received Data

That’s it for this tutorial guys, thanks for watching and(or) reading. Did you make any cool and interesting modification to this project or you have any questions, feel free to leave me a comment. Don’t forget to subscribe to our youtube channel by following the link below if you’ve not done so already, its one of the few ways you could show support for what we are doing.

nRF24L01+ module vs nRF24L01+ PA Module

There are a variety of modules available that are based on the nRF24L01+ chip, here are the popular ones that are worth taking a look at:

First Version:

nRF24L01+ Wireless Module

The above wireless module comes with an onboard antenna. Its small and compact size may be suitable for compact spaces but loses out in transmission range, limiting on module applications.

Second Version:

2.4G WIRELESS MODULE NRF24L01+PA

This version comes with an external IPX antenna and is designed with a power amplifier. This allows for a way wider transmission range of up to 1000 meters. Hence, achieving a good balance between wireless transmission performance and cost.

Here at Seeed, we carry the second version of the NRF24L01 module that can be purchased at our online store!

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Семинар по технике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: