Рубрики
Схемы на Arduino

Передача данных на смартфон с помощью Arduino, модуля NRF24L01 и Bluetooth (BLE)

Bluetooth Low Energy (BLE) – это версия технологии Bluetooth, причем значительно более оптимизированная чем классический Bluetooth. Ее часто называют «умной» Bluetooth (Smart Bluetooth). Первоначально технология BLE разрабатывалась для обеспечения минимально возможного энергопотребления при низкой стоимости, маленькой ширины полосы частот и низкой сложности оборудования. Некоторые современные микроконтроллеры, например, ESP32, имеют встроенную технологию BLE, а в других микроконтроллерах, в том числе и в Arduino, для использования технологии BLE можно применить модуль nRF24L01. Этот радиочастотный модуль можно также использовать для передачи данных другим устройствам, поддерживающим технологию Bluetooth, например, смартфонам, ноутбукам и т.д.

В данной статье мы рассмотрим процесс передачи данных по технологии BLE с помощью радиочастотных модулей nRF24L01. Мы будем считывать значения температуры с датчика DHT11 и передавать их на смартфон с помощью платы Arduino и модуля nRF24L01, используя технологию BLE.

Почему технология Bluetooth Low Energy (BLE) стала популярной?

Возрастающая с каждым годом популярность технологии BLE обусловлена, в первую очередь, ее крайне низким энергопотреблением, что позволяет устройствам на ее основе работать длительное время от обычной батарейки. Также ее феноменальный успех в последние годы объясняется легкостью ее интегрирования (встраивания) в смартфоны, планшеты в другие мобильные устройства.

Возможности BLE в модуле NRF24L01

Технология BLE работает в диапазоне ISM (2,4 ГГц), который во многих странах разрешен для безлицензионного использования (то есть не нужно получать никаких разрешений в радиочастотных органах) в промышленности, науке и медицине. ISM диапазон занимает полосу частот от 2400 МГц до 2483.5 МГц и разделен на 40 каналов. Три из этих 40 каналов имеют статус «информационных», они используются устройствами для передачи специальных приветственных пакетов с информацией о своем состоянии – это позволяет другим устройствам BLE устанавливать с ними связь.

В этой статье мы рассмотрим как использовать модуль NRF24L01 в качестве BLE трансивера (приёмопередатчика). BLE функциональность данного модуля будет продемонстрирована на примере передачи данных температуры в смартфон. Данные температуры будут считываться с датчика DHT11, а управлять всем процессом передачи данных будет плата Arduino. На смартфоне для приема этих данных можно использовать, например, приложение для android под названием Nordic BLE.

Необходимые компоненты

Аппаратное обеспечение

  1. Плата Arduino Uno (купить на AliExpress).
  2. nRF24L01 BLE Module (BLE модуль nRF24L01)(купить на AliExpress).
  3. Датчик температуры и влажности DHT11 (купить на AliExpress).
  4. Соединительные провода.

Программное обеспечение

  1. Arduino IDE .
  2. Nordic BLE Android Application (nRF Temp 2.0 for BLE или nRF Connect for Mobile).

Принципы работы модуля nRF24L01

Модули nRF24L01 являются приемопередающими модулями, то есть каждый модуль может как передавать, так и принимать информацию. Но они могут работать только в режиме полудуплекса – то есть в конкретный момент времени модуль может либо передавать, либо принимать информацию. Основой модуля является универсальная микросхема nRF24L01 от компании Nordic semi-conductors, которая осуществляет прием и передачу данных в модуле. Эта микросхема взаимодействует с другими устройствами по интерфейсу SPI, поэтому ее легко подключить к большинству современных микроконтроллеров, в том числе и к плате Arduino, для которой разработаны специальные библиотеки для работы с подобными модулями. Ранее мы использовали модули nRF24L01 для создания приватной комнаты чата на основе плат Arduino.

Назначение контактов (распиновка) модуля nRF24L01 приведена на следующем рисунке.

Модуль может работать с напряжениями от 1.9V до 3.6V (обычно используется 3.3V) и потребляет во время своей работы сравнительно небольшой ток – всего 12mA, что позволяет его использовать в устройствах с низким потреблением энергии, работающих от маленьких батареек типа «таблетка» (coin cells). Несмотря на то, что стандартное рабочее напряжение модуля составляет 3.3V, большинство его контактов устойчивы и к напряжению 5V, что позволяет непосредственно его подключать к контактам платы Arduino.

Другим достоинством модуля nRF24L01 является наличие у него возможности работать по 6 каналам связи. Это значит, что он может взаимодействовать с другими 6 подобными модулями и передавать им или принимать от них информацию. Данная особенность модуля позволяет строить на его основе сети связи с топологией типа «звезда» или Mesh сети (самоорганизующиеся сети связи, в которых каждое устройство может выполнять роль ретранслятора/маршрутизатора), поэтому данные модули очень удобны для реализации различных проектов в сфере интернета вещей (IoT – Internet of Things). Также модули nRF24L01 поддерживают до 125 уникальных идентификаторов (ID), то есть в ограниченной области мы можем использовать до 125 таких модулей чтобы они не мешали при работе друг другу.

Схема проекта

Схема подключения модуля nRF24L01 к плате Arduino для передачи данных с помощью технологии BLE представлена на следующем рисунке.

Внешний вид конструкции проекта в сборе показан на следующем рисунке.

Объяснение программы Arduino для использования технологии BLE

Полный код программы и видео с демонстрацией работы проекта приведены в конце статьи, здесь же мы кратко рассмотрим основные фрагменты кода. В видео также объяснено и использование Android приложения (App of Nordic ) для работы по BLE.

Первым делом в программе подключим используемые библиотеки: RF24 – для использования команд модуля nRF24L01, DHT11 – для работы с датчиком DHT11, BTLE library – для использования функций технологии BLE.

Далее в программе определим и инициализируем используемые контакты и объекты. DHT – объект для работы с датчиком DHT11, подключенным к контакту 4 платы Arduino. Контакты радиочастотного модуля CE и CSN подключены к контактам 9 и 10 платы Arduino.

Затем инициализируем последовательную связь со скоростью 9600 бод и связь с датчиком DHT11. Также инициализируем связь по технологии BLE (btle.begin), локальное имя Bluetooth соединения при этом может содержать максимум 8 символов.

Затем мы будем считывать показания температуры с датчика DHT11 и сохранять их в переменной temp. Также мы добавили команду для выдачи сообщения об ошибке если с модуля DHT11 не удалось считать данные температуры.

Затем мы сохраняем значение температуры в буфер и передаем его в BLE модуль, который передает эти данные в радиоэфир. Затем мы эти данные принимаем в приложении на android.

Когда это будет сделано, переключаемся (hop) на следующий канал.

Поскольку в документации на датчик DHT11 указано, что после считывания значений необходимо сделать задержку на 2 секунды, сделаем эту задержку в программе:

После сборки аппаратной части схемы и загрузки программы в плату Arduino можно законнектить смартфон с нашим радиочастотным модулем, запустить приложение nRF Temp 2.0 for BLE, после чего вы на экране смартфона сможете наблюдать примерно следующую картину.

Более подробно все эти процессы вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

12 ответов к “Передача данных на смартфон с помощью Arduino, модуля NRF24L01 и Bluetooth (BLE)”

И для чего меняется канал после каждой передачи? Приёмник по всем каналам слушает, или передатчик так «ищетч приёмник?

Для чего он меняется здесь я точно не знаю, но во многих протоколах и системах связи используется периодическая смена рабочей частоты по заданному закону — это улучшает определенные характеристики системы связи (например, системы связи с ППРЧ). Приемник при каждом скачке частоты знает на какой канал (частоту) перескочит передатчик, поэтому он его не ищет по всему диапазону

Ble имеет три широковещательных канала, называются они — Advertising,
а приемник их слушает

Поэтому он переключается каждый раз на новый канал

Да, спасибо за пояснение. Видимо, вы достаточно плотно работали с технологией Ble

Интересно, а то сейчас приходится с уличных датчиков на nrf24 передавать на гейт, который принимает и передаёт mqtt в home assistant. Тогда как xiaomi mijia термометры напрямую транслируют ble и прекрасно видятся в home asdistant. Вот бы Вашу реализацию приспособить. Правда пока не понятно, что там в HA будет, и как рамшифровывать.

Ну, к сожалению, в такие тонкости я не вникал. Не могу подсказать что то конкретного в данном случае

Очень странно, на rf-nano работает, а на связке ардуино и nrf24 не работает. Хотя nrf24 работает по своему прямому назначению, управлению через библиотеку RF24. Ума не приложу, в чем дело. Кондер электролит 10mf припаян, два модуля nfr24 друг друга видят, управляются релюшки, но имитацией BLE как у вас они не хотят быть

Ну у вас в монитор последовательного порта какие-нибудь сообщения выдаются? По ним же косвенно можно отследить на каком этапе работы программы что то начинает работать неправильно

Возможно разные чипы nrf24l01, есть с подсмотреть а есть без, мне попадались и те и другие

Одна из них не умеет работать на скорости 250 кбит/с

А ble вроде использует эту скорость

Да, среди чипов nrf24l01 есть отличающиеся, тут нужно смотреть повнимательнее

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

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