63 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как подключить радиомодуль nrf24 к микроконтроллеру

Подключение Arduino nrf24L01

В этой статье мы поговорим о nrf24l01 – одном из самым популярных и недорогих радиомодулей для проектов Arduino и интернета вещей IoT. Модули nrf24l01 для Arduino легко найти в любом интернет-магазине, они относительно недороги. При этом с их помощью можно организовать достаточно надежную многоканальную связь с подтверждением доставки пакетов между контроллерами ардуино и другими устройствами. В этой статье мы рассмотрим описание, распиновку nrf24l01, а также узнаем, какие библиотеки можно использовать с этим радиомодулем.

В примерах для Atmega8 использована библиотека, написанная Davide Gironi. Оригинальные файлы и примеры также находятся в архиве.

Сначала рассмотрим пример для микроконтроллеров, когда один модуль отправляет данные, а другой — принимает. В этом примере приемник получает данные по 6 адресам (Pipe). Передатчик последовательно отправляет пакеты по всем адресам (Pipe). Для мониторинга работы я подключал UART-USB переходник к приемнику или передатчика. И терминальной программой через компьютер наблюдал за происходящим.

Скетч для передатчика

В нашем эксперименте мы просто отправим традиционное сообщение «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 () блокирует программу, пока она не получит подтверждение или не исчерпает все попытки повторной передачи.

Технические параметры

На модуле расположена основная микросхема nRF24L01+, рядом установлен кварцевый резонатор, антенна и электрическая обвязка, программное обеспечение микросхемы nRF зашивают на производстве. Связь осуществляется в двунаправленном режиме по интерфейсе SPI (Serial Peripheral Interface), для этого предусмотрен 8 контактный разъем (шаг 2.54 мм).

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

NRF24L01 — Arduino

Радиомодули nRF24L01+ позволяют передавать данные на частоте 2,4ГГц.

Общие характеристики для всех модулей:

Напряжение питания — от 1,9 до 3,6v, рекомендуемое 3,3v .
Входы толерантны к напряжению до 5v, то есть можно подключать к микроконтроллеру, работающему от 5v.
Взаимодействует с микроконтроллером по шине SPI.
Возможные скорости обмена данными — 250kbps, 1Mbps и 2Mbps.
Количество каналов — 126, с шагом 1мгц. Если установлена скорость передачи 2MBPS, то используется ширина двух каналов.
Энергопотребление около 0,9мкА в режиме power-down, до 11,3мА при передаче, и до 13,5мА при приёме.

Читать еще:  Как сделать откосы возле окна

Стоимость колеблется от 50 до 200р.

Версии модулей

Дальность до 100м на открытом пространстве и до 30м в помещении (дальность указана для минимальной скорости передачи данных — 250kbps).
Размер 29мм на 15мм.

Версия мини. Наследует характеристики предыдущего модуля.
Размер 18мм на 12мм.

С внешней антенной.
Дальность до 200м на открытом пространстве и до 50м в помещении.

С внешней антенной и усилителем.
Дальность до 1000м на открытом пространстве.
Размер 45мм на 16мм.

Для модулей кроме мини, существует «переходник» со стабилизатором на 3.3v.

Так же стоит отметить существование модуля nRF24LE1, способного работать автономно (без ардуины). Однако для работы с этим модулем необходим программатор и соответствующие навыки.

Подключение к ардуине

Arduino Nano, UNO

SCKD13
MOSID11
MISOD12
CSND10
CE/SSD9

SCKD52
MOSID51
MISOD50
CSND53
CE/SSD49

Для СЕ и CSN можно использовать любые пины (меняется в скетче RF24 radio(9,10);).

Для улучшения качества связи, рекомендуется припаять конденсатор

100мкф между плюсом и минусом модуля.

Программирование

Итак, нам понадобится библиотека RF24, две ардуины, два модуля и один светодиод.

Первая ардуина будет по очереди отправлять два числа — 255 и 155:

Вторая ардуина будет принимать числа (255 и 155) и включать/выключать светодиод подключенный к D6:

Первая ардуина будет посылать значения температуры и влажности второй ардуине. Потребуется библиотека stDHT.

Здесь показаны простые примеры, «чтоб заработало», а вот для вдумчивого изучения рекомендую обратится к примерам из библиотеки.

Вступайте в Telegram-группу Arduino

Описание радиомодуля nRF24L01+

Радиомодуль nRF24L01+, как я уже писал, стоит достаточно дешево – всего 50 руб, то есть за 100 руб можно купить два передатчика, между которыми и будет осуществляться беспроводная передача данных. Модуль может работать как передатчик и как приемник, отличия будут только в прошивке. Дальность действия составляет 100 метров на открытой местности и 30 метров в помещении.
Из минусов стоит отметить, что nRF24L01+ работает на частоте 2,4 ГГц, которую используют Wi-Fi и Bluetooth, они могут заглушать сигнал передатчика. Еще одним небольшим минусом является то, что nRF24L01+ питается от напряжения 3.3в, поэтому подключать его нужно аккуратно – 5в могут испортить модуль. Большинство плат arduino имеет пины с напряжением 3.3в, поэтому иногда проблема решается просто. Но бывают и другие случаи, например, arduino pro mini не всегда оснащена пином с нужным питанием, в таком случае придется использовать преобразователь напряжения.
Также к сложностям можно отнести то, что при запуске, nRF24L01+ требуется довольно большой ток и многие китайские копии arduino не могут его выдавать. Чтобы решить такую проблему достаточно припаять к радиомодулю(к пинам питания) конденсатор емкостью от 10 мфд. Поскольку я пользуюсь arduino, которые бережно собирают в Китае, то столкнувшись с проблемой, немного модернизировал nRF24L01+, получилось вот так:

Беспроводное управление серводвигателем с помощью nRF24L01

Когда вы будете готовы, загрузите программы передатчика и приемника (приведены ниже) на соответствующие платы Arduino и подайте на них питание через USB порт. Вы также может запустить монитор последовательного порта для обеих плат, чтобы проверить, какое значение передается, и что принимается. Если всё работает должным образом, когда вы поворачиваете ручку потенциометра на стороне передатчика, то сервопривод на другой стороне должен вращаться соответствующим образом.

Работа проекта показана на демонстрационном видео ниже. Вполне нормально, если эти модули не заработают с первой попытки. Если вы столкнулись с какой-либо проблемой, снова проверьте код и разводку и попробуйте приведенные выше рекомендации по устранению неполадок.

Код передающей части

Код приемной части

0 0 голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты