Привет хабровчане! Не так давно попалась мне в руки пара плат 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 Studio, в которой  выполняю следующие настройки:  Tools -> Boards-> Arduino AVR Boards->Arduino Nano  Tools -> Processor-> ATmega328P (Old Bootloader)  Tools -> Managie Libraries-> "RF24"  -> установка последней версии библиотеки RF24  by TMRh20 ( у меня версия 1.4.1). Также понадобятся библиотеки SPI.h и printf.h Если у вас есть проблема одновременного открытия двух окон SerialMonitor, в которые выводится информация от двух Arduino, подключенных к разным портам, нужно сначала запустить ArduinoStuio в обычном режиме и отобразить информацию с одного порта, а потом запустить среду ArduinoStuio в режиме "от администратора"  и отобразить информацию с другого порта. Для проверки плат использовался пример, поставляемый с библиотекой RF24, который нужно загрузить на обе платы Arduino.  Files-> Examples-> GettingStarted В рамках данного примера, одна плата настраивается как передатчик, а другая как получатель. В моем случае пины 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 Nano RF, а в качестве приемника - Raspberry Pi 4 с модулем NRF24L01, подключённым по следующей схеме: Для настройки Raspberry в качестве приемника, я выполнила  следующие шаги: Для удаленного подключения к Raspberry, определяю IP адрес Raspberry с помощью программы Aadvanced Ip scanner (альтернативный способ - через список подключенных устройств на странице роутера).  С помощью Putty, подключаюсь к Raspberry по ssh, указывая Ip адрес Raspberry и порт 22 (по умолчанию логин "pi", пароль "raspberry" ).  P.S. Для удобства работы через графический интерфейс, можно скачать программу  VNCviewer, после чего ввести в консоль Raspberry команду vncserver. В консоли Raspbrry для настройки SPI выполняю следующую команду В появившемся окне выбираю 5. Interfacting options -> SPI -> Enabledtparam=spi=on Изначально, моя Raspberry Pi поставлялась в комплекте с дисплеем, подключаемым к тем же портам, что и NRFL01 модуль. После того, как дисплей убран, нужно отредактировать файл boot/config.txt , закоментировав строки, относящиеся к дисплею. В моем случае незакоментированной осталась только строка Перезагружаюсь и обновляюсь Далее устанавливаю библиотеку RF24 (например по инструкции на github или medium) Install prerequisites if there are any (MRAA, LittleWire libraries, setup SPI device etc) Download the install.sh file from http://tmrh20.github.io/RF24Installer/RPi/install.sh 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". Получился аналогичный предыдущему пункту результат (на изображении показан вывод в IDE ArduinoStudio и Thonny): В данном случае время передачи одного из пакетов значительно выше. Такая ситуация повторилась несколько раз. Данный краткий обзор был бы совсем кратким, не выполни я пример gettingstarted на стандартной связке Arduino + NRFL01 и Raspberry + NRFL01  Схема подключения NRFL01 к Arduino Nano изображена в посте выше. У меня не было под рукой Arduino Nano, но была Arduino Leonardo, у которой SPI пины вынесены сбоку платы. Результат: В конце поста, также покажу результат передачи информации о расстоянии до объекта, полученной с помощью имеющегося в наличии ультразвукового датчика, подключенного по схеме ( как подключается NRF24L01 модуль показано выше):  Результат выполнения показан ниже. Время передачи значительно выше. С ходу не хватает знаний понять, почему так вышло и как улучшить результат. К сожалению мне  сходу не удалось найти в интернете подробных гайдов по работе с Arduino RF, поэтому пришлось пару недель повозиться. Знакомство с библиотекой Mirf как-то сразу не задалось. После многих попыток разобраться в теме, получился вот такой вот гайд. Оказалось, что работать с Arduino RF интересно и не так уж и трудно. Надеюсь что мой опыт пригодится новичкам и желающим построить какой-либо проект на базе Arduino RF. Также хочу выразить благодарность авторам постов про NRF24L01, которых набралось уже не мало :) биомеханик