Обзор радио модуля NRF24L01+PA+LNA
Радиомодуль NRF24L01+PA+LNA отличается от NRF24L01+, повышенной чувствительностью приемника и увеличенной мощностью передатчика, что позволило передавать данные со скоростью передачи до 250Kb на расстояние до 1000 метров.
Технические параметры
► Напряжение питания: 3В … 3.6В
► Потребляемый ток при мощности 0dBm: 45 мА
► Потребляемый ток при передачи 2 Мбит: 115 мА
► Максимальная выходная мощность: +20dBm
► Частота: 2.4 ГГц
► Коэффициент усиления антенны (макс.): 2dBi
► Скорость передачи: 2MB (открытое пространство): 520 м.
► Скорость передачи: 1 MB (открытое пространство): 750 м.
► Скорость передачи: 250 Kb (открытое пространство): 1000 м.
► Размеры: 46мм x 17мм x 12мм (длина антенны 115 мм)
► Интерфейс: SPI
Общие сведения
В версии NRF24L01+ используется встроенная антенна, это позволило уменьшить габариты модуля. Однако из-за маленькой антенны диапазон передачи тоже не значительный и составляет всего 100 метров, при прямой видимости, а в помещении, особенно через стены, будет еще меньше.
NRF24L01+PA+LNA установлен разъем SMA с внешней антенной. Реальное различие заключается в том, что он оснащен специальным чипом RFaxis RFX2401C (в корпусе QFN), который объединяет схемы коммутации PA и LNA (передачи и приема). Этот микросхема со вместо а антенной расширяет диапазон модуля и позволяет достичь значительно большего диапазона передачи около 1000 м.
«PA» означает усилитель мощности (Power Amplifier), он просто увеличивает мощность сигнала, передаваемого от чипа nRF24L01+. В то время как «LNA» означает усилитель с низким уровнем шума (Low-Noise Amplifier). Работа LNA состоит в том, чтобы принять чрезвычайно слабый и неопределенный сигнал от антенны (обычно порядка микровольт или ниже -100 дБм) и усилить его до более полезного уровня (обычно от 0,5 до 1 В).
Усилитель (LNA) и усилитель мощности (PA) соединяются с антенной посредством дуплексера, который отделяет два сигнала и предотвращает перегрузку чувствительного входа LNA относительно мощного PA. Принципиальная схема NRF24L01+PA+LNA, показана на рисунке ниже.
Подключение NRF24L01+PA+LNA
Необходимые детали:
► Arduino UNO R3 x 2 шт.
► Провод DuPont, 2,54 мм, 20 см x 2 шт.
► Кабель USB 2.0 A-B x 2 шт.
► Радиомодуль nRF24L01+PA+LNA+ x 2 шт.
► Адаптер для nRF24L01+ x 2 шт.
Подключение:
Для начала подключаем вывод VCC и GND к выводам Arduino +3.3V и GND. Выводы CSN и CE могут быть подключены к любому цифровому выводу на Arduino, в нашем случае подключены к цифровым выводам 9 и 10. Теперь остались контакты, которые используются для связи SPI, для Arduino UNO, это контакты 13 (SCK), 12 (MISO) и 11 (MOSI), схема подключения приведена на рисунке ниже:
Таблица подключений, для различных плат Arduino
Установка библиотеки:
В данном примере используется популярная библиотека RF24, она проста в использовании. Загрузить последнюю версию библиотеки можно с RF24 GitHub или с моего сайта.
Для установи, откройте Arduino IDE, перейдите в Скетч —> Подключить Библиотеку —> Добавить. ZIP Библиотеку…, а затем выберите файл RF24.zip, который вы только что загрузили.
Программа для передатчика:
В примере, мы просто отправим традиционное сообщение «Hello World» от передатчика к получателю.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/* Тестирование производилось на Arduino IDE 1.6.11 Дата тестирования 28.10.2016г. */ #include <SPI.h> // Подключаем библиотеку SPI #include <nRF24L01.h> // Подключаем библиотеку nRF24L01 #include <RF24.h> // Подключаем библиотеку RF24 RF24 radio(9,10); // Указываем номера выводов nRF24L01+ (CE, CSN) const byte address[6] = "00001"; void setup() { radio.begin(); // Инициируем работу nRF24L01+ radio.openWritingPipe(address); radio.stopListening(); } void loop() { const char text[] = "Hello World"; radio.write(&text, sizeof(text)); delay(1000); } |
Скетч как обычно начинается с подключения библиотек.
1 2 3 |
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> |
Затем необходимо указать вывода к которым подключены сигналы CE и CSN.
1 |
RF24 radio(9, 8); |
Далее создаем массив байтов, который будет представлять адрес канала.
1 |
const byte address[6] = "00001"; |
Затем инициализируем модуль и устанавливаем адрес передатчика.
1 2 |
radio.begin (), radio.openWritingPipe(address); |
Теперь, следующей функцией устанавливаем модуль как передатчик
1 |
radio.stopListening(); |
Далее в void loop(), мы создаем массив символов, которым мы присваиваем сообщение «Hello World» и отправляем это сообщение получателю. Первый аргумент — это само сообщение, а второй аргумент — количество байтов в сообщении.
1 2 |
const char text[] = "Hello World"; radio.write(&text, sizeof(text)); |
С помощью этого метода вы можете отправлять до 32 байтов за раз, это максимальный размер одного пакета, который может обрабатывать nRF24L01 +.
Программа для приемника:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* Тестирование производилось на Arduino IDE 1.6.11 Дата тестирования 28.10.2016г. */ #include <SPI.h> // Подключаем библиотеку SPI #include <nRF24L01.h> // Подключаем библиотеку nRF24L01 #include <RF24.h> // Подключаем библиотеку RF24 radio(9,10); // Указываем номера выводов nRF24L01+ (CE, CSN) const byte address[6] = "00001"; void setup() { while (!Serial); Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.startListening (); } void loop() { //Read the data if available in buffer if (radio.available()) { char text[32] = {0}; radio.read(&text, sizeof(text)); Serial.println(text); } } |
Скетч slave похож на скетч master, за исключением некоторых изменений. В начале функции настройки мы запускаем последовательную связь.
1 |
Serial.begin(9600); |
Затем, используя функцию, мы устанавливаем тот же адрес, что и передатчик, и таким образом мы включаем связь между передатчиком и приемником.
1 2 |
radio.setReadingPipe () radio.openReadingPipe(0, address); |
Первый аргумент — это номер потока, в примере создали адрес под номером 0 (можно создать до 6 потоков, которые отвечают на разные адреса). Второй аргумент — это адрес, на который поток будет реагировать на сбор данных.
Следующим шагом будет установка модуля в качестве приемника и начало приема данных. Для этого мы используем следующую функцию и ждем получения данных.
1 |
radio.startListening () |
Далее проверяем, были ли получены какие то данные.
1 2 3 4 5 6 |
if (radio.available()) { char text[32] = {0}; radio.read(&text, sizeof(text)); Serial.println(text); } |
Если данные получены, то создается массив из 32 символа, заполненных нулями (позже программа будет заполнять его полученными данными). Для чтения данных используется метод.
1 |
radio.read (& text, sizeof (text)) |
Затем, просто печатаем полученное сообщение на последовательном мониторе.
Ссылки
Библиотека RF24
Документация к NRF24L01+
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Датчик радио модуля NRF24L01+
Датчик радио модуля NRF24L01+PA+LNA
Адаптер для NRF24L01+
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Радио модуля NRF24L01+
Радио модуля NRF24L01+PA+LNA
Адаптер для NRF24L01+