Подключение модуля nRF24L01+ к Raspberry Pi, Orange Pi, Banana Pi …

nRF24L01 один из самых популярных беспроводных модулей для интернета вещей (IoT). Подключив модуль nRF24L01+ к Raspberry Pi, Orange Pi, Banana Pi и т.п можно организовать многоканальную защищенную связь между мини-компьютерами и/или, например, Arduino. Таким образом можно подключить на каждую плату Arduino по датчику и передать полученые данные на, к примеру, Raspberry Pi, а там обрабатывать эти данные и/или загрузить в БД.

Рассмотрим, как установить библиотеку RF24 и как наладить связь между Orange Pi PC (плату можно менять на любую другую типа Raspberry Pi, Orange Pi, Banana Pi и т.п. — будет также работать) и несколько плат Ардуино по радиоканалу.

Установка библиотеки RF24

Библиотека RF24 универсальная, её можно установить и использовать как на Arduino, так и на устройства под ОС Linux (Raspberry Pi, Orange Pi, Banana Pi и т.п) поддерживающие SPIDEV, MRAA, RPi BCM2835 или LittleWire. Опция SPIDEV должна работать с большинством систем Linux, поддерживающих SPI.

Описание методов класса RF24 можете найти на странице Подключение модуля nRF24L01+ к Arduino.

Установка библиотеки RF24 на Raspberry Pi

  1. Установите необходимые компоненты, если они есть (библиотеки MRAA, LittleWire, SPI и т. д.). На Raspberry Pi используется нативная библиотека BCM2835, по этому нужно её установить. Также не забудьте включить SPI на Raspberry Pi, это можно сделать с помощью утилиты raspi-config;
  2. Загрузите файл install.sh с http://tmrh20.github.io/RF24Installer/RPi/install.sh;
  3. Сделайте это файл исполняемым
  4. Запустите его и выберите параметры
  5. Запустите пример из одной из библиотек
  6. Для проверки можете отредактировать пример gettingstarted, чтобы настроить конфигурацию выводов, и запустить его

Установка библиотеки RF24 на Orange Pi, Banana Pi и др.

Этот метод подойдёт и для установки на Raspberry Pi, и на любой ОС Linux, что поддерживает SPI.

  1. Установите необходимые компоненты, если они есть (библиотеки MRAA, LittleWire, SPI и т. д.). Не забудьте включить SPI, это можно сделать с помощью утилиты armbian-config, более подробно о том, как настроить SPI на Orange Pi, можете найти на странице Включение и настройка SPI (SPI0 и SPI1) на Orange Pi на ядрах 3.4 (Ubuntu 16.04) и 4.14 (Ubuntu 18.04).
  2. Клонируете репозиторий RF24.
  3. Перейдите в новый каталог RF24.
  4. Настройте среду сборки, используя скрипт

    Скрипт автоматически определяет устройство и среду сборки. Если хотите вручную настроить, смотрите на список возможностей скрипта:
  5. Соберите и установите библиотеку
  6. Для проверки можете отредактировать пример gettingstarted, чтобы настроить конфигурацию выводов, и запустить его

Схема подключения nRF24L01+ к Raspberry Pi

Подключается nRF24L01+ к Raspberry Pi по шине SPI (можно использовать как аппаратную так и программную шину). Выводы модуля Vcc и GND подключаются к шине питания 3.3 В постоянного тока. Выводы модуля MISO, MOSI, SCK и подключаются к одноименным выводам шины SPI на плате Raspberry Pi.

Вывод CSN (Chip Select nRF24L01+) подключается к выводу CE (Raspberry Pi) шины SPI, CE (Chip Enable) назначается при объявлении объекта библиотеки RF24 и подключаются к любым назначенным выводам Raspberry Pi. Вывод IRQ на NRF24L01+ в данном случае не используется.

Конкретные имена портов интерфейса SPI могут различаться в зависимости от производителя аппаратных средств, при этом возможны следующие варианты:

  • MOSI: SIMO, SDI (на устройстве), DO, DON, SI, MRSR;
  • MISO: SOMI, SDO (на устройстве), DI, DIN, SO, MTST;
  • SCLK: SCK, CLK;
  • SS: nCS, CS, CSB, CSN, nSS, STE, SYNC.

Полное представление о выводах Raspberry Pi см. http://pinout.xyz/. Если установлена библиотека WiringPi, можете воспользоваться командой

для определения назначения всех выводов на плате.
Схема подключения nRF24L01+ к Raspberry Pi - Raspberry Pi gpio readall

Схема подключения nRF24L01+ к Raspberry Pi

Подключение nRF24L01+ к Raspberry Pi напрямую

nRF24L01+ Raspberry Pi
GND 6 / GND
VCC 1 / 3.3V
CE 22 / GPIO25
CSN 24 / GPIO8 / SPI_CE0_N
SCK 23 / GPIO11 / SPI0_CLK
MOSI 19 / GPIO10 / SPI0_MOSI
MISO 21 / GPIO9 / SPI0_MISO
IRQ

Подключение nRF24L01+ к Raspberry Pi через адаптер

nRF24L01+ Raspberry Pi
GND 6 / GND
VCC 2 / 5.0V
CE 22 / GPIO25
CSN 24 / GPIO8 / SPI_CE0_N
SCK 23 / GPIO11 / SPI0_CLK
MO / MOSI 19 / GPIO10 / SPI0_MOSI
MI / MISO 21 / GPIO9 / SPI0_MISO
IRQ

Схема подключения nRF24L01+ к Orange Pi, Banana Pi и др.

Как и в случае с Raspberry Pi, подключается nRF24L01+ к Orange Pi по шине SPI. Выводы модуля Vcc и GND подключаются к 3.3 В и GND соответственно. Тоже самое и с выводами MISO, MOSI, SCK и CSN. Единственное отличие в подключении вывода CE (Chip Enable) номер вывода отличается от Raspberry Pi, так как контроллер другой. Если установлена библиотека WiringOP или BPI-WiringPI (для Banana Pi), можете воспользоваться командой

для определения назначения всех выводов на плате Orange Pi или Banana Pi.
Схема подключения nRF24L01+ к Orange Pi - Orange Pi gpio readall

При объявлении объекта библиотеки RF24 нужно указывать номер пина из колонки BCM.

Схема подключения nRF24L01+ к Orange Pi, Banana Pi и др.

Подключение nRF24L01+ к Orange Pi напрямую

nRF24L01+ Orange Pi
GND 6 / GND
VCC 1 / 3.3V
CE 29 / GPIO7
CSN 24 / GPIO67 / SPI_CE0_N
SCK 23 / GPIO66 / SPI0_CLK
MOSI 19 / GPIO64 / SPI0_MOSI
MISO 21 / GPIO65 / SPI0_MISO
IRQ

Подключение nRF24L01+ к Orange Pi через адаптер

nRF24L01+ Orange Pi
GND 6 / GND
VCC 2 / 5.0V
CE 29 / GPIO7
CSN 24 / GPIO67 / SPI_CE0_N
SCK 23 / GPIO66 / SPI0_CLK
MO / MOSI 19 / GPIO64 / SPI0_MOSI
MI / MISO 21 / GPIO65 / SPI0_MISO
IRQ

Примеры

Пример 1: Сканер диапазона 2.4 ГГц на NRF24L01+

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

Ниже приведённый пример представляет собой сканер, с помощью которого можно определить свободные каналы в ISM (Industrial, Scientific, Medical) диапазоне частот от 2400 МГц до 2527 МГц. Данный сканер сможет определять такие устройства как: WiFi, Bluetooth, некоторые радио телефоны, другие модули nRF24L01.

Компиляция и сборка

Результат

Сканер диапазона 2.4 ГГц на NRF24L01 - Результат (RF24_scanner)
По полученным результатам мы можем сказать, что довольно много каналов заняты.

Пример 2: Получение данных от одного или нескольких передатчиков

В основном на Raspberry Pi, Orange Pi, Banana Pi и т.п. можно запустить любой рабочий пример для Arduino со страницы Подключение модуля nRF24L01+ к Arduino. Единственое, нужно будет поменять функции для вывода на консоль: Serial.print(); на аналогичные в C/C++: printf(); или cout;.

Приёмнику можно задать до 6 труб функцией openReadingPipe(номер, адрес):

с номерами труб от 0 до 5 и адресами труб совпадающими с адресами труб передатчиков.

Методом available() осуществляется проверка получения данных. Метод возвращает true если в буфере есть принятые данные доступные для чтения. В качестве необязательного аргумента можно указать адрес переменной в которую будет помещён номер трубы по которой были приняты данные (в примере используется адрес переменной &pipeNumber), зная номер трубы мы знаем от какого передатчика пришли данные.

Чтобы была возможность получить/передать данные разной длины, нужно разрешить динамически изменяемый размер блока данных для всех труб на приёмнике и на передатчике.

Получить размер блока данных в последнем принятом пакете можно с помощью метода getDynamicPayloadSize().

Читаем данные в массив receivedData и указываем сколько байт читать payloadSize.

Полный код приёмника:

Компиляция и сборка

Результат

Подключение модуля nRF24L01+ к Raspberry Pi, Orange Pi, Banana Pi - Получение данных от одного или нескольких передатчиков, Результат

Пример 3: Передача данных — Arduino скетч

Ниже приведённый код нужно залить на Arduino, можно залить на 6 плат, но не забудьте менять адрес трубы radio.openWritingPipe(pipesAddress[0]); — от 0 до 5.

Материалы

Serial Peripheral Interface
Optimized High Speed NRF24L01+ Driver Class Documenation

Похожие записи

Комментарии 4

  • А можно подобным образом создать подобие Walkie-Talkie для подключения к ip-камерам, построенным на базе MotionEYEOs?
    Возможно, вопрос сформулирован коряво (заранее извиняюсь).

    • Если я правильно понимаю, вам нужна простая рация. По мне так легче сделать её на Arduino, на ней есть встроенный АЦП.
      Можно использовать и встроенный или USB микрофон на Orange Pi/Raspberry Pi, но тут будет по сложнее, нужно будет написать драйвер, чтобы передать/получить звук по SPI < -> nRF24L01+

  • Нестыкуется
    Указано в таблице CE пин 22 оранжа, а на картинке с выводом пинов указан пин 29.
    Что куда?

    • Спасибо, что заметили.
      Пин 29 так, как указанно на картинке. Можно использовать любой вывод общего назначения (GPIO), нужно только менять значение константы

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *