Подключение радио
Подключение радио
Приемопередатчик NRF24L01 + и RFM69 взаимодействует с платой Arduino через интерфейс SPI.
Важно всегда подавать на радио стабильный и не шумный источник питания 3,3 В, обеспечивающий достаточный ток для вашего устройства, иначе могут возникать неустойчивая связь, плохой диапазон и чувствительность.
См. Примечания об использовании регулятора напряжения или развязывающего конденсатора.
NRF24L01+ & Arduino
ПРИМЕЧАНИЕ: Входные контакты на NRF24L01 + имеют толерантность 5 В. Однако, вы не можете питать модуль более чем 3.3V на VCC. Если вы используете 5V Arduino, вам нужно использовать понижающий регулятор!
Pro Mini / Nano | Mega | NRF24L01+ | Color |
GND | GND | GND | Чёрный |
5VReg -> 3.3V | 3.3V | VCC | Красный |
9 | 49 | CE | Оранжевый |
10 | 53 | CSN/CS | Жёлтый |
13 | 52 | SCK | Зелёный |
11 | 51 | MOSI | Синий |
12 | 50 | MISO | Фиолетовый |
2 | 2 | IRQ | Серый |
Вывод IRQ нужен для подключения только, если в эскизе определен MY_RX_MESSAGE_BUFFER_FEATURE. Использование этой функции требуется только для узлов или шлюзов с высоким трафиком. Включение его приведет к повышению пропускной способности, но для обработки сообщения потребуется дополнительная память.
Если вы используете Arduino Mega, к вашему эскизу необходимо добавить следующее, перед подключением MySensors.h:
NRF24L01+ & ESP8266
Это также работает с платами на базе ESP8266, такими как NodeMCU и Wemos D1 Mini.
NodeMCU | Radio | Comment |
GND | GND | Чёрный |
3V3 | VCC | Красный |
D2 | CE | Оранжевый |
D8 | CSN/CS | Жёлтый |
D5 | SCK | Зелёный |
D7 | MOSI | Синий |
D6 | MISO | Фиолетовый |
Примечание: IRQ в настоящее время не используется библиотекой MySensors, поэтому его можно оставить не подключенным.
RFM69 & Arduino
ПРИМЕЧАНИЕ: NSS, MOSI и SCK не являются толерантным к 5V на RFM69. Вам нужно будет использовать конвертер уровня, если вы используете 5V Arduino.
Arduino | RFM69 | Color |
GND | GND | Чёрный |
3.3V | VCC | Красный |
10 | NSS | Жёлтый |
13 | SCK | Зелёный |
11 | MOSI | Синий |
12 | MISO | Фиолетовый |
2 | DI00 | Серый |
ANA | Антенна |
RFM69 & ESP8266
Это также работает с другими платами на базе ESP8266, такими как NodeMCU и Wemos D1 Mini.
ESP8266 | RFM69 | Color |
GND | GND | Чёрный |
3.3V | VCC | Красный |
D1 | DIO0 | Серый |
D5 | SCK | Зелёный |
D6 | MISO | Фиолетовый |
D7 | MOSI | Синий |
D8 | NSS | Жёлтый |
ANA | Антенна |
Для вышеуказанного подключения необходимо использовать следующие строки:
Шлюз и узлы могут использовать одно и тоже подключение, но имейте в виду, что RFM радио использует все контакты, с которыми легко работать, кроме D2, поэтому подключение чего-либо дополнительного может быть сложным. Вместо этого используйте Arduino, если хотите подключить что-то ещё.
Настройка MySensors для RFM69
MySensors настроен на использование радио NRF24 по умолчанию. Чтобы использовать RFM69, необходимо добавить следующее строки: перед подключением MySensors.h
Основные определения для радио не High Power 868Mhz, и Atmel 328p (mini pro, nano, uno и т. д.):
И если вам нужна расширенная конфигурация, вам нужно добавить следующие определения:
Примечание. Драйвер Mysensors RFM69 управляется прерываниями.
Антенна RFM69
ВАЖНО: Вы ДОЛЖНЫ установить антенну на плату. Антенна должна быть одножильной, а не многожильной (не подходит для антенны). Если включить без антенны, передатчик может сгореть.
Взяв провод нужной длины, вы можете создать простую антенну для RFM69 радио. В зависимости от частоты радио, антенна должна быть разной длины. Сделайте вашу антенну немного длиннее, чтобы можно было припаять ее к вашей плате. Вы всегда можете обрезать её после пайки.
Частота | Длина (дюймы) | Длина (мм) |
434 MHz | 6.47″ | 164.7 мм |
868 MHz | 3.22″ | 82.2 мм |
915 MHz | 3.06″ | 77.9 мм |
Вышеуказанная длина антенны составляет 1/4 волны. Есть также в продаже готовые антенны нужной длины.
- Прямой провод будет работать лучше для всего диапазона и чувствительности.
- Для устройства с ограниченным пространством, вы можете намотать антенну. Конечно, это ухудшит ваш диапазон, но он по-прежнему будет приличный и конкурентоспособный. Уже было проверено, что подойдёт для вашего случая. Катушка будет работать лучше, если следовать некоторым правилам https://github.com/OpenHR20/OpenHR20/wiki/2.1)—433-MHz-and-868-MHz—Antenna-Design-Examples
Подключение развязывающего конденсатора
Если у вас плохой прием или переданные данные не доходят до адресата, попробуйте добавить развязывающий конденсатор в 4.7 — 47μF (точный размер обычно не имеет значения) между 3.3В и GND как можно ближе к передатчику.
Конденсатор | Радио | Коментарии |
— пин | GND | Чёрный провод радио |
+ пин | 3.3V | Красный провод радио |
Сторона с отметкой « 3,3 В между Arduino и Radio.
Подключение ESP32 к nRF24L01 и обмен данными с Arduino
Чип nRF24L01 2,4 ГГц от компании Nordic Semiconductor поддерживает интерфейс SPI, имеет аппаратный канальный уровень и многоканальность. При этих достоинствах микросхема очень дешёвая.
По сравнению с модулями Wi-Fi, такими как ESP8266 / ESP32, nRF24L01 имеет меньшее энергопотребление, существенно дешевле (но необходимо микропроцессорное устройство управления), из недостатков — меньшая пропускная способность.
Если у вас есть хорошая сеть Wi-Fi, то вы можете подумать над тем, чтобы использовать модули Wi-Fi для своих систем и устройств.
Также модули Wi-Fi подходят, если нет жёстких ограничений по энергопотреблению. Если мы используем микросхему nRF24L01 для отправки данных в облако через Интернет, то можно применить микроконтроллер ESP или плату Raspberry в качестве шлюза.
Аппаратная часть интерфейса NRF24L01 имеет 8 выводов — Vcc, GND, IRQ, CE, выводы SPI (CSN (инвертированный сигнал выбора микросхемы), SCK, MISO и MOSI). Допускается подача на порты ввода-вывода напряжения до 5 В, в то время, как рабочий диапазон напряжения питания микросхемы 1,9–3,6 В.
Назначение выводов:
- CSN – выбор режима приёма-передачи
- SCK – синхронизация
- MISO – выход данных
- MOSI – входящие данные
Вывод CSN с активным низким уровнем, обычно находится в высоком уровне. Когда сигнал на этом выводе переключается на низкий уровень, микросхема 24L01 начинает слушать порт SPI.
Порт CE используется для управления отправкой и получением данных в режимах передачи и приёма.
Вывод прерывания IRQ с активным низким уровнем. Предусмотрено три внутренних прерывания, которые могут установить этот сигнал в низкий уровень при активации. Бит каждого из трёх прерываний можно замаскировать, чтобы, состояние вывода IRQ не менялось, когда бит активируется.
Реализация обмена данными с чипом nRF24L01 через SPI
Интерфейс SPI позволяет читать и записывать регистры, передавать и получать данные к и от nRF24L01. На первоначальном этапе мы используем SPI со скоростью 2 Мбит/с. Высокие скорости SPI используются, если необходимо передавать по радиоканалу большие объёмы данных.
Краткая инструкция по работе с SPI
Чтобы отправить данные на микросхему nRF24L01 или получить данные от неё по интерфейсу SPI нужно соблюсти определенные условия передачи:
Вначале сигнал на выводе CSN микросхемы nRF24L01 должен быть высоким, затем переведите его в низкий уровень, чтобы получить данные по SPI. Примечание: этот сигнал останется в низком уровне в течение всего сеанса передачи данных.
Вы отправляете байт с нужной командой. При получении байтов данных по этой команде, отправив команду, вы затем посылаете по одному байту nRF24L01, получая от неё в ответ по одному байту данных. При отправке nRF24L01 данных вам необходимо просто посылать их и не обращать внимания на то, что приходит в ответ.
После того, как вы отправили/прочитали все необходимые байты, переведите сигнал CSN обратно на низкий уровень.
После отправки байта любой команды nRF24L01 всегда возвращает значение регистра состояния STATUS.
Описание буферов FIFO
Предусмотрено по одному буферу FIFO для режима передачи и для режима приёма. Оба буфера содержат по три пакета, которые в них поместили последними. Если вы получите в режиме приёма три пакета и не прочтёте их, первый (самый старый) будет вытолкнут из буфера новым полученным пакетом.
То же самое происходит в режиме передачи: если вы загрузите три пакета и не передадите их (переключив вышеупомянутый сигнал CE), то четвёртый пакет вытолкнет из буфера первый загруженный вами пакет.
Формат пакета данных
В протоколе приёмопередатчика предусмотрено два режима: Shockburst и Enhanced Shockburst. Форматы сообщений для этих режимов различны.
В обоих режимах в первую очередь посылается преамбула (1 байт), необходимая для приёмника, чтобы распознать начало пакета среди фоновых шумов.
Далее посылаются байты адреса. Они устанавливаются пользователем, длина поля — от трёх до пяти байт.
Отправляемые далее байты отличают один режим от другого. В режиме Enhanced Shockburst отправляется слово с флагами из девяти бит, показывающее статус сообщения касательно повторной отправки. В настоящее время используются только два бита (количество повторно отправленных пакетов), а остальные семь зарезервированы на будущее.
Вторая половина пакета одинакова для обоих режимов. Вначале отправляется поле с полезной нагрузкой (с данными). Длина поля данных также устанавливается пользователем (от 1 до 32 байт). Финальная часть пакета — это контрольная сумма, устанавливаемая пользователем (0, 1 или 2 байт).
Давайте создадим два демонстрационных примера:
Демонстрационный пример 1: микроконтроллер ESP32 будет отправлять сообщение «hello» (привет) плате Arduino Nano.
Демонстрационный пример 2: плата Arduino Nano будет отправлять сообщение «hello» микроконтроллеру ESP32.
Если у вас есть два микроконтроллера ESP32, то можно заменить плату Arduino Nano на второй ESP32.
Необходимое аппаратное обеспечение
Для демонстрации понадобятся две платы Arduino/ESP8266/ESP32/Raspberry: Одна плата отправляет сообщение, а другая его принимает.
Для примера мы используем плату Arduino Nano. Соедините выводы по схеме, как показано ниже:
Arduino_D8 | NRF24_CSN |
Arduino_D7 | NRF24_CE |
Arduino_D13 | NRF24_SCK |
Arduino_D11 | NRF24_MOSI |
Arduino_D12 | NRF24_MISO |
Arduino_3.3 | NRF24_Vcc |
Arduino_GND | NRF24_GND |
Для микроконтроллера ESP32 библиотека RF24 немного изменена, так, чтобы программа могла использовать программный SPI вместо аппаратного. Соедините выводы по схеме, как показано ниже:
NRF24_CE | ESP32_IO12 |
NRF24_CSN | ESP32_IO14 |
NRF24_SCK | ESP32_IO26 |
NRF24_MISO | ESP32_IO25 |
NRF24_MOSI | ESP32_IO27 |
NRF24_Vcc | ESP32_3.3V |
NRF24_GND | ESP32_GND |
Необходимое программное обеспечение
Для работы используются библиотеки SPI.h, nRF24L01.h и RF24.
Для микроконтроллера ESP32 изменить библиотеку RF24 так, чтобы программа могла использовать программный SPI вместо аппаратного.
Интерфейс прикладного программирования изменённой библиотеки выглядит следующим образом:
RF24(uint16_t _cepin, uint16_t _cspin, uint16_t sck, uint16_t miso, uint16_t mosi), а чтобы создать экземпляр библиотеки вызовите RF24 radio(12, 14, 26, 25, 27).
Для платы Arduino мы используем аппаратный SPI, поэтому интерфейс прикладного программирования библиотеки будет следующим:
RF24(uint16_t _cepin, uint16_t _cspin), а чтобы создать экземпляр, вызовите RF24 radio(7,8).
Демонстрационный пример 1: микроконтроллер ESP32 будет отправлять сообщение «hello» (привет) плате Arduino Nano.