Radio openreadingpipe 0 address что это
Обзор радио модуля NRF24L01+PA+LNA
Автор: Сергей · Опубликовано 28.10.2016 · Обновлено 14.04.2021
Радиомодуль 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+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» от передатчика к получателю.
Подключение радиомодуля nRF24L01 + к Arduino UNO
Эта статья является логическим продолжением предыдущей статьи, где мы подробно рассмотрели особенности радиомодуля nRF24L01 +, привели его характеристики, распиновку выводов и описали его работу.
Сегодня продолжим изучение модуля nRF24L01 + и рассмотрим вопрос подключения радиомодуля nRF24L01 + к Arduino UNO.
Подключение приемопередающего модуля nRF24L01 + к Arduino UNO
Теперь, когда у нас есть полное понимание того, как работает радиомодуль nRF24L01 +, мы можем подключить его к нашей Arduino!
Для начала подключите контакт VCC модуля к 3,3 В Arduino, а контакт GND — к земле. Контакты CSN и CE могут быть подключены к любому цифровому контакту на Arduino. В нашем случае это цифровые выводы 8 и 9 соответственно. Теперь только остались выводы, которые используются для связи по шине SPI.
Поскольку модуль nRF24L01 + обеспечивает передачу большого объема данных, то он может обеспечивать наилучшую производительность при подключении к аппаратным выводам SPI Arduino. Аппаратные выводы SPI намного быстрее, чем программные.
Обратите внимание, что каждая плата Arduino имеет разные выводы SPI, которые должны быть подключены соответствующим образом. Для плат Arduino, таких как UNO / Nano V3.0, этими цифровыми контактами являются 13 (SCK), 12 (MISO) и 11 (MOSI).
Если у вас Mega, то контакты будут другие! Вы должны использовать 50 (MISO), 51 (MOSI), 52 (SCK) и 53 (SS). См. Таблицу ниже для быстрого понимания.
MOSI | MISO | SCK | |
Arduino Uno | 11 | 12 | 13 |
Arduino Nfno | 11 | 12 | 13 |
Arduino Mega | 51 | 50 | 52 |
В случае, если вы используете плату Arduino, отличную от упомянутых выше, рекомендуется проверить официальную документацию Arduino, прежде чем продолжить.
Подключение nRF24L01 + к Arduino UNO Подключение nRF24L01 + PA LNA к Arduino UNO
Библиотека Arduino RF24 для модуля nRF24L01
Взаимодействие с модулем приемопередатчика nRF24L01 + — это сложная работа, но, к счастью для нас, существует ряд доступных библиотек. Одна из популярных библиотек — RF24.
Эта библиотека существует уже несколько лет. Библиотека RF24 проста в использовании для начинающих, и предлагает много возможностей для опытных пользователей. В наших экспериментах мы будем использовать одну и ту же библиотеку.
Вы можете скачать последнюю версию библиотеки RF24 на репозитория GitHub
Скетч для передатчика
В нашем эксперименте мы просто отправим традиционное сообщение «Hello World» от передатчика к приемнику.
Вот скетч, который мы будем использовать для нашего передатчика:
Код начинается с подключения библиотек. Библиотека SPI.h управляет связью SPI, а nRF24L01.h и RF24.h модулем:
Далее нам нужно создать объект RF24. Объект принимает два номера контактов в качестве параметров, к которым подключены сигналы CE и CSN:
Затем нам нужно создать байтовый массив, который будет представлять адрес канала, через который будут связываться два модуля nRF24L01 +:
Мы можем изменить значение этого адреса на любую 5-буквенную строку, например «node1». Адрес необходим, если у вас есть несколько модулей в сети. Благодаря адресу вы можете выбрать конкретный модуль, с которым вы хотите общаться, поэтому в нашем случае у нас будет один и тот же адрес как для передатчика, так и для приемника.
Далее в функции setup() нам нужно инициализировать радиообъект, используя radio.begin() и используя radio.openWritingPipe() функцию, мы устанавливаем адрес передатчика:
Наконец, мы будем использовать radio.stopListening() функцию, которая устанавливает модуль в качестве передатчика:
В разделе loop () мы создаем массив символов, которым мы назначаем сообщение «Hello World». Используя radio.write() функцию, мы отправим это сообщение приемнику.
Первый аргумент здесь — это сообщение, которое мы хотим отправить. Второй аргумент — это количество байтов, присутствующих в этом сообщении:
С помощью этого метода вы можете отправлять до 32 байтов за раз. Потому что это максимальный размер одного пакета, который может обработать nRF24L01 +. Если вам нужно подтверждение, что получатель получил данные, функция radio.write() возвращает bool значение. Если он возвращает TRUE, данные достигли получателя. Если он возвращает FALSE, данные были потеряны.
Внимание! Функция radio.write () блокирует программу, пока она не получит подтверждение или не исчерпает все попытки повторной передачи.
Скетч для приемника
Вот код, который мы будем использовать для нашего приемника:
Эта программа выглядит очень похоже на программу передатчика, за исключением некоторых моментов.
В начале функции setup() мы запускаем последовательную связь. Затем, используя функцию radio.setReadingPipe(), мы устанавливаем тот же адрес, что и у передатчика, и таким образом включаем связь между передатчиком и приемником:
Первый аргумент — номер потока. Вы можете создать до 6 потоков, которые отвечают на разные адреса. Мы создали только адрес для потока номер 0. Второй аргумент — это адрес, на который поток будет реагировать для сбора данных.
Следующим шагом является установка модуля в качестве приемника и начало приема данных. Для этого мы используем функцию radio.startListening(). С этого момента модем ожидает отправки данных на указанный адрес:
В функции loop() Arduino проверяет, были ли получены какие-либо данные по адресу, используя функцию radio.available(). Эта функция возвращает значение TRUE, если в буфере доступны какие-либо данные:
В конце мы просто печатаем полученное сообщение на серийном мониторе. Если вы все сделали правильно и в соединениях нет ошибок, вы должны увидеть что-то подобное в вашем Serial Monitor:
Улучшение дальности передачи модуля nRF24L01 +
Ключевым параметром для системы беспроводной связи является дальность связи. Во многих случаях это решающий фактор в пользу выбора радиочастотного решения. Итак, давайте обсудим, что мы можем сделать, чтобы получить хорошую дальность связи для нашего модуля.
Уменьшить шум источника питания
ВЧ цепь, которая генерирует радиочастотный (РЧ) сигнал, очень чувствительна к шуму источника питания. Если не контролировать шум источника питания да большую дальность связи можно не рассчитывать.
Если источник питания не является автономным аккумулятором, существует высокая вероятность того, что при генерации сигнала будет шум. Чтобы этот шум не попал в систему, рекомендуется разместить фильтрующий конденсатор емкостью 10 мкФ на линии электропитания как можно ближе к модулю nRF24L01 +.
Самый простой способ покончить с этим — использовать очень недорогой адаптерный модуль для nRF24L01.
Адаптер для nRF24L01
Этот адаптер имеет 8-контактный разъем, позволяющий подключить модуль nRF24L01. Он может соединяться как с модулем, который мы обсуждали ранее (со встроенной антенной), так и с внешней антенной (PA/LNA). Адаптер также имеет 6-контактный разъем для подключения SPI и прерываний и 2-контактный разъем для ввода питания.
Модуль адаптера имеет собственный регулятор напряжения 3,3 В и набор конденсаторов фильтра, поэтому вы можете подключить его к источнику питания 5 В.
Изменить частоту канала
Другим потенциальным источником шума для радиочастотной цепи является внешняя среда, особенно если у вас есть соседние сети, настроенные на тот же канал, или помехи от другой электроники.
Чтобы эти сигналы не вызывали проблем, мы рекомендуем использовать модуль nRF24L01 + с самыми высокими 25 каналами. Причиной этого является то, что WiFi использует большинство нижних каналов.
Более низкая скорость передачи данных
Если вы общаетесь на этой скорости, вы знаете, что приемник на скорости 250 Кбит/с почти в 10 раз более чувствителен, чем на 2 Мбит/с. Это означает, что приемник может декодировать сигнал, который в 10 раз слабее.
Что означает чувствительность приемника (Rx)?
Таким образом, снижение скорости передачи данных может значительно улучшить дальность связи, которую вы можете достичь. Кроме того, для большинства наших проектов скорость 250 Кбит/с более чем достаточна.
Более высокая выходная мощность
Arduino и NRF24L01 в одной плате. Первое знакомство
Привет хабровчане! Не так давно попалась мне в руки пара плат Arduino Nano со встроенным модулем NRF24L01, которые оказались достойной заменой популярной связки Arduino Nano + NRF24L01. Модуль NRF24L01 часто используется в различных проектах для обеспечения надежной беспроводной передачи данных. Небольшая цена, низкая задержка и энергопотребление, а также возможность выбора до128 каналов связи дает NRF24L01 преимущество перед другими радиочастотными модулями, такими как wifi, bluetooth, Zigbee и т.д.
В данной статье хочу поделиться с вами своим первым опытом работы как с Arduino RF, так и с NRF24L01 в целом.
Изображенную выше плату можно приобрести на Aliexpress. Данная плата является аналогом следующей схемы:
Для тестирования схемы я использую библиотеку RF24. В рамках данного обзора я рассмотрю:
передачу данных между платами Arduino RF;
передачу данных между Arduino RF и Raspberry Pi;
сравнение со связкой Arduino + модуль NRF24L01.
Передача данных между платами Arduino RF
Обе платы Arduino RF подключаются к портам одного ноутбука. Для работы с платами я использую среду Arduino Studio, в которой выполняю следующие настройки:
работа с разными портами в Arduino Studio
Если у вас есть проблема одновременного открытия двух окон SerialMonitor, в которые выводится информация от двух Arduino, подключенных к разным портам, нужно сначала запустить ArduinoStuio в обычном режиме и отобразить информацию с одного порта, а потом запустить среду ArduinoStuio в режиме «от администратора» и отобразить информацию с другого порта.
Для проверки плат использовался пример, поставляемый с библиотекой RF24, который нужно загрузить на обе платы Arduino.
код программы GettingStarted.ino
В рамках данного примера, одна плата настраивается как передатчик, а другая как получатель. В моем случае пины CE и CSN указываемые в конструкторе RF24 radio(CEpin, CSNpin) были 7 и 8 соответственно. После загрузки скетча на плату, в Serial monitor выводится строка:
Which radio is this? Enter ‘0’ or ‘1’. Defaults to ‘0’
Ввожу «1» в окошке отправителя и «0» в окошке получателя. После вывода следующей строки
*** PRESS ‘T’ to begin transmitting to the other node
выбираю «T» для настройки одной из Arduino как отправителя и «R» как получателя.
После выполнения вышеописанных настроек, получился следующий результат (время передачи пакета и пакет с числом 0.0, увеличивающимся с шагом 0.01):
Время передачи в среднем заняло всего 552 микросекунды
Передача данных между Arduino RF и Raspberry Pi
Для настройки Raspberry в качестве приемника, я выполнила следующие шаги:
С помощью Putty, подключаюсь к Raspberry по ssh, указывая Ip адрес Raspberry и порт 22 (по умолчанию логин «pi», пароль «raspberry» ).
P.S. Для удобства работы через графический интерфейс, можно скачать программу VNCviewer, после чего ввести в консоль Raspberry команду vncserver.
В консоли Raspbrry для настройки SPI выполняю следующую команду
Перезагружаюсь и обновляюсь
Далее устанавливаю библиотеку RF24 (например по инструкции на github или medium)
установка библиотиеки RF24 на Raspberry
Install prerequisites if there are any (MRAA, LittleWire libraries, setup SPI device etc)
Make it executable
Run it and choose your options
Run an example from one of the libraries
Edit the gettingstarted example, to set your pin configuration
В качестве примера также использую файл gettingstarted.py, после выполнения которого выбираю номер модуля «1» и режим «R».
код программы gettingstarted.py
Получился аналогичный предыдущему пункту результат (на изображении показан вывод в IDE ArduinoStudio и Thonny):
В данном случае время передачи одного из пакетов значительно выше. Такая ситуация повторилась несколько раз.
Сравнение со связкой Arduino Leonardo + модуль NRF24L01
Данный краткий обзор был бы совсем кратким, не выполни я пример gettingstarted на стандартной связке Arduino + NRFL01 и Raspberry + NRFL01
Схема подключения NRFL01 к Arduino Nano изображена в посте выше. У меня не было под рукой Arduino Nano, но была Arduino Leonardo, у которой SPI пины вынесены сбоку платы.
В конце поста, также покажу результат передачи информации о расстоянии до объекта, полученной с помощью имеющегося в наличии ультразвукового датчика, подключенного по схеме ( как подключается NRF24L01 модуль показано выше):
код Arduino US.ino
Результат выполнения показан ниже. Время передачи значительно выше. С ходу не хватает знаний понять, почему так вышло и как улучшить результат.
Заключение
К сожалению мне сходу не удалось найти в интернете подробных гайдов по работе с Arduino RF, поэтому пришлось пару недель повозиться. Знакомство с библиотекой Mirf как-то сразу не задалось. После многих попыток разобраться в теме, получился вот такой вот гайд. Оказалось, что работать с Arduino RF интересно и не так уж и трудно. Надеюсь что мой опыт пригодится новичкам и желающим построить какой-либо проект на базе Arduino RF. Также хочу выразить благодарность авторам постов про NRF24L01, которых набралось уже не мало 🙂
arduinoLab
Радиомодули nRF24L01+ и Arduino
Невероятно популярные беспроводные модули, идеальное, недорогое решение для объединение микроконтроллеров в беспроводную сеть, ниже код и дополнение к серии видео
Модули построены на микросхеме nRF24L01+, основное предназначение микросхемы беспроводная связь различных периферийных устройств, вроде беспроводных мышек и клавиатур.
Китайская промышленность выпускает несколько модификаций модулей на этих чипах, различающиеся способом монтажа, наличием усилителя мощности и коннектора для внешней антенны.
Слева типичный китайский модуль, средняя стоимость за такой один доллар. Справа модуль с усилителем мощности и коннектором для внешней антенны, за такой придется отдать около трех.
Основные характеристики модулей.
Рабочая частота: 2.4ггц
Выходная мощность передатчика: 0dBm (1mW), в версии с усилителем 20dBm (100mW)
Радиус действия в прямой видимости: до 30м, в версии с усилителем до 1000м
Скорость беспроводного соединения: 250kbps, 1Mbps или 2Mbps.
Количество каналов: 126
Распиновка модуля.
Модуль работает с микроконтроллером по средствам интерфейса SPI, соответственно модуль должен подключатся к интерфейсу SPI ардуины, который находится на определенных контактах микроконтроллера, на фото указаны номера выходов для Arduino UNO или других, базирующихся на микроконтроллере ATMega328. Не забываем что у Arduino leonardo, Mega, и тд, интерфейс SPI находится на других контактах.
Питание модуля 3,3 вольта, вообще к питанию модуль очень привередлив, крайне желательно использовать отдельный от Arduino стабилизатор, например на микросхеме AMS1117-3.3, также желательно припаять дополнительный керамический конденсатор фильтра на контакты питания.
Для работы с модулем в среде Arduino написано несколько библиотек, мне понравилась библиотека RF24, скачать можно тут или тут, краткое описание функций библиотеки на английском языке тут.
Также существует более оптимизированное и полностью совместимое ответвление от основной версии RF24, находится тут.
Ниже исходные коды, которые были показаны в роликах на ютубе.
Радиомодули nRF24L01+ и Arduino, часть 1
Radio openreadingpipe 0 address что это
Driver class for nRF24L01(+) 2.4GHz Wireless Transceiver. More.
Public Member Functions
These are the main methods you need to operate the chip
Methods provided for backwards compabibility.
Protected Member Functions | |
void | beginTransaction () |
void | endTransaction () |
void | read_register (uint8_t reg, uint8_t *buf, uint8_t len) |
uint8_t | read_register (uint8_t reg) |
Protected AttributesAdvanced OperationMethods you can use to drive the chip in more advanced ways | |
bool | failureDetected |
void | printDetails (void) |
void | printPrettyDetails (void) |
bool | available (uint8_t *pipe_num) |
bool | rxFifoFull () |
void | powerDown (void) |
void | powerUp (void) |
bool | write (const void *buf, uint8_t len, const bool multicast) |
bool | writeFast (const void *buf, uint8_t len) |
bool | writeFast (const void *buf, uint8_t len, const bool multicast) |
bool | writeBlocking (const void *buf, uint8_t len, uint32_t timeout) |
bool | txStandBy () |
bool | txStandBy (uint32_t timeout, bool startTx=0) |
bool | writeAckPayload (uint8_t pipe, const void *buf, uint8_t len) |
void | whatHappened (bool &tx_ok, bool &tx_fail, bool &rx_ready) |
void | startFastWrite (const void *buf, uint8_t len, const bool multicast, bool startTx=1) |
bool | startWrite (const void *buf, uint8_t len, const bool multicast) |
void | reUseTX () |
uint8_t | flush_tx (void) |
uint8_t | flush_rx (void) |
bool | testCarrier (void) |
bool | testRPD (void) |
bool | isValid () |
void | closeReadingPipe (uint8_t pipe) |
uint32_t | txDelay |
uint32_t | csDelay |
void | setAddressWidth (uint8_t a_width) |
void | setRetries (uint8_t delay, uint8_t count) |
void | setChannel (uint8_t channel) |
uint8_t | getChannel (void) |
void | setPayloadSize (uint8_t size) |
uint8_t | getPayloadSize (void) |
uint8_t | getDynamicPayloadSize (void) |
void | enableAckPayload (void) |
void | disableAckPayload (void) |
void | enableDynamicPayloads (void) |
void | disableDynamicPayloads (void) |
void | enableDynamicAck () |
bool | isPVariant (void) |
void | setAutoAck (bool enable) |
void | setAutoAck (uint8_t pipe, bool enable) |
void | setPALevel (uint8_t level, bool lnaEnable=1) |
uint8_t | getPALevel (void) |
uint8_t | getARC (void) |
bool | setDataRate (rf24_datarate_e speed) |
rf24_datarate_e | getDataRate (void) |
void | setCRCLength (rf24_crclength_e length) |
rf24_crclength_e | getCRCLength (void) |
void | disableCRC (void) |
void | maskIRQ (bool tx_ok, bool tx_fail, bool rx_ready) |
void | startConstCarrier (rf24_pa_dbm_e level, uint8_t channel) |
void | stopConstCarrier (void) |
void | toggleAllPipes (bool isEnabled) |
Open or close all data pipes. More. | |
void | setRadiation (uint8_t level, rf24_datarate_e speed, bool lnaEnable=true) |
configure the RF_SETUP register in 1 transaction More. |
Detailed Description
Driver class for nRF24L01(+) 2.4GHz Wireless Transceiver.
Definition at line 114 of file RF24.h.
Constructor & Destructor Documentation
◆ RF24() [1/2]
Creates a new instance of this driver. Before using, you create an instance and send in the unique pins that this chip is connected to.
See Related Pages for device specific information
Parameters
_cepin | The pin attached to Chip Enable on the RF module | |||||||||||||||||||||||||||||||||||||||||
_cspin | The pin attached to Chip Select (often labeled CSN) on the radio module. For the Arduino Due board, the Arduino Due extended SPI feature is not supported. This means that the Due’s pins 4, 10, or 52 are not mandated options (can use any digital output pin) for the radio’s CSN pin. | |||||||||||||||||||||||||||||||||||||||||
_spi_speed | The SPI speed in Hz ie: 1000000 == 1Mhz Definition at line 527 of file RF24.cpp. ◆ RF24() [2/2]A constructor for initializing the radio’s hardware dynamically Warning You MUST use begin(uint16_t, uint16_t) or begin(_SPI*, uint16_t, uint16_t) to pass both the digital output pin numbers connected to the radio’s CE and CSN pins. Parameters
|