- Digitrode
- цифровая электроника вычислительная техника встраиваемые системы
- Отправка данных с датчика на телефон Android с использованием Arduino и NRF24L01 через Bluetooth (BLE)
- Передача данных на смартфон с помощью Arduino, модуля NRF24L01 и Bluetooth (BLE)
- Почему технология Bluetooth Low Energy (BLE) стала популярной?
- Возможности BLE в модуле NRF24L01
- Необходимые компоненты
- Аппаратное обеспечение
- Программное обеспечение
- Принципы работы модуля nRF24L01
- Схема проекта
- Объяснение программы Arduino для использования технологии BLE
- Поддельное BLE-устройство на nRF24l01
- Описание
- Как использовать
- Применения
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Отправка данных с датчика на телефон Android с использованием Arduino и NRF24L01 через Bluetooth (BLE)
Bluetooth Low Energy (BLE) – это версия Bluetooth, представленная в виде уменьшенной высокооптимизированной версии классического Bluetooth. Он также известен как Smart Bluetooth. BLE был разработан с учетом минимально возможного энергопотребления, особенно для оборудования низкой стоимости, низкой пропускной способности, низкой мощности и низкой сложности. ESP32 имеет встроенные возможности BLE, но для других микроконтроллеров, таких как Arduino, можно использовать nRF24L01. Этот дешевый радиочастотный модуль также можно использовать в качестве модуля BLE для отправки данных на другое устройство Bluetooth, такое как смартфоны, компьютер и т. д.
Сегодня в этом примере мы покажем, как отправлять любые данные через BLE, используя nRF24L01. Мы будем отправлять показания температуры от датчика DHT11 на смартфон с помощью модуля Arduino и nRF через BLE.
BLE был принят из-за его особенностей энергопотребления, поскольку он мог работать в течение длительного периода времени, используя только одну батарейку-таблетку. По сравнению с другими беспроводными стандартами быстрый рост популярности BLE был еще быстрее благодаря феноменальным приложениям для смартфонов, планшетов и мобильных компьютеров.
BLE использует ту же полосу ISM 2,4 ГГц со скоростью передачи от 250 Кбит/с до 2 Мбит/с, которая разрешена во многих странах и может применяться в промышленных и медицинских приложениях. Полоса частот начинается с 2400 МГц до 2483,5 МГц и разделена на 40 каналов. Три из этих каналов известны как «Advertising» и используются устройствами для отправки вещательных пакетов с информацией о них, чтобы другие устройства BLE могли подключаться. Эти каналы были первоначально выбраны в нижней верхней части полосы и в середине полосы, чтобы избежать помех, которые могут создавать наводки для ряда каналов.
В этом руководстве объясняется, как использовать модуль NRF24L01 в качестве приемопередатчика BLE. Сегодня функциональность BLE этого модуля будет объяснена отправкой данных датчика на смартфон. Здесь этот модуль nRF24L01 будет сопрягаться с микроконтроллером Arduino, а данные о температуре датчика DHT11 будут отправляться официальному приложению Nordic BLE для Android.
Модули nRF24L01 являются приемопередающими модулями, то есть каждый модуль может отправлять и получать данные, но, поскольку они полудуплексные, они могут отправлять или получать данные одновременно. Модуль имеет общую микросхему nRF24L01, которая отвечает за передачу и прием данных. Микросхема обменивается данными с использованием протокола SPI и, следовательно, может легко взаимодействовать с любыми микроконтроллерами. С Arduino становится намного проще, так как библиотеки легко доступны. Распиновка стандартного модуля nRF24L01 показана далее.
Модуль имеет рабочее напряжение от 1,9 В до 3,6 В (обычно 3,3 В) и потребляет очень мало тока (всего 12 мА) при нормальной работе, что делает его эффективным для питания от батареи и, следовательно, может работать даже на элементах типа «таблетка». Несмотря на то, что рабочее напряжение составляет 3,3 В, большинство выводов допускают 5 В и, следовательно, могут напрямую подключаться к 5 В микроконтроллерам, таким как Arduino. Еще одним преимуществом использования этих модулей является то, что каждый модуль имеет 6 конвейеров. Это означает, что каждый модуль может связываться с 6 другими модулями для передачи или получения данных. Это делает модуль пригодным для создания звездных или ячеистых сетей в приложениях Интернета вещей (IoT). Кроме того, они имеют широкий диапазон адресов 125 уникальных идентификаторов, поэтому в закрытом пространстве мы можем использовать 125 из этих модулей, которые не будут мешать друг другу.
Схема подключения Arduino к модулю nRF24L01 и датчику DHT11 следующая:
Так может внешне выглядеть подключение:
NRF24L01 работает по SPI, поэтому в качестве интерфейса будем использовать протокол SPI. Здесь модуль nRF24L01 используется для связи с приложением для смартфонов Nordic. Полный код с комментариями приведен далее.
После загрузки кода и сопряжения смартфона с модулем nRF вы начнете получать значения в приложении nRF Temp 2.0 для BLE для Android.
Источник
Передача данных на смартфон с помощью 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.
Необходимые компоненты
Аппаратное обеспечение
- Плата Arduino Uno (купить на AliExpress).
- nRF24L01 BLE Module (BLE модуль nRF24L01)(купить на AliExpress).
- Датчик температуры и влажности DHT11 (купить на AliExpress).
- Соединительные провода.
Программное обеспечение
- Arduino IDE .
- 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.
Источник
Поддельное BLE-устройство на nRF24l01
Описание
Как выглядит устройство и какая у него схема описывать не буду. В интернете, включая русскоязычный, полно информации по описываемым радиомодулям. Скажу только, что в моем случае для управления был использован микроконтроллер NXP LPC1343 (для него и представлена прошивка внизу).
Как обычно, чудес не бывает: пример не захотел работать в виде «как есть». Во-первых на странице присутствует явное повреждение форматирования, во-вторых сразу видно что есть проблема с байтом длины. Какие еще опечатки и неточности присутствуют в описании, мне оставалось только гадать. Однако, после непродолжительных правок все заработало.
BLE-устройство сильно отличается от всех прочих «синих зубчиков», достаточно упомянуть, что стандартный поиск устройства в Android не ищет BLE: для их обзора требуются отдельные приложения. BLE устройства — отдельное ответвление в Bluetooth-технологии, фактически это еще один стандарт. Видимо, он разрабатывался с оглядкой на возможности малопотребляющих трансиверов на 2.4ГГц. Отсюда и итоговое сходство.
А сходства следующие:
- Одинаковые рабочие частоты 2.4GHz с поддержкой скорости 1Mbps и пересекающаяся сетка каналов.
- Одинаковые байты стартовые байты 10101010 или 01010101 (преамбула).
- Одинаковая модуляция сигнала: GFSK.
- Возможность задать в nRF24l01 адресацию 4 байтами.
Но вот и отличия:
- Разные алгоритмы CRC. Благо в nRF24l01 его можно отключить и заниматься расчетом программно в микроконтроллере.
- nRF24l01 после каждой передачи отключает PLL. Это подкладывает свинью в реализации протокола, т.к. повторный запуск PLL требует приличное время.
- BLE поддерживает пакеты данных с длиной до 39 байт. У nRF24l01 это значение ограничено 32 байтами.
Именно из-за последнего пункта полноценного протокола BLE поднять не получится. Однако, мы можем составить корректный Broadcast-пакет, который участвует в процессе поиска устройства.
Код составления пакета:
Программа делает только одно: инициализирует радиомодуль специальным образом, составляет пакет и отправляет его. Этого достаточно, чтобы телефон показал устройство в поиске.
Как использовать
После того, как мой телефон увидел приложение, сразу встал вопрос: а можно ли каким-то образом использовать эту «подделку»?
Ограничения в чипе nRF24l01 не дают возможности поднять полноценный BLE-протокол и заканчиваются на том, что телефон «видит» нечто, но никаким образом с ним работать не может. Соответственно, передача данных в устройство отметается сразу, а вот что с передачей данных в телефон? Имя и мак-адрес телефон определяет, а это уже какая-никакая информация, а что еще?
А еще можно передавать и наши данные. Для этого необходимо в буфер добавить дополнительные поля. Лучше всего для этого подходит тег MANUFACTURER_DATA=0xFF. Данных за раз можно передавать не более 32 байт (ограничение модуля nRF24l01), при этом часть их тратится на передачу служебных структур BLE. В чистом остатке остается около 32-6-3-3 = 20 байт. Из них 2 байта уйдут на заголовок, таким образом «наших» данных может быть 18 байт. Но стоит учесть, что данный расчет я привел для безымянного устройства.
Применения
Теоретически данный хак можно использовать и в реальных устройствах. Стоимость nRF24l01 кардинально ниже true-BLE-модулей. В смартфон можно передавать данные с каких-либо датчиков, причем как и в случае с BLE, датчики могут иметь батарейное питание.
Если взять связку из примитивнейшего ATtiny13 и nRF24l01, получится устройство копеечной стоимости. Разместив десяток или сотню таких в большом помещении (к примеру, ТЦ) можно развернуть локальную систему позиционирования, которая в приложении точно покажет где же находится владелец телефона.
К сожалению, для меня открыт вопрос: каким будет потребление самого смартфона. Все-таки связь с устройством не устанавливается, приходится постоянно проводить сканирование. Может кто знаком с темой и сможет прокомментировать.
В довесок, исследовал возможность реализации взаимодействия nRF24l01 с ANT+ устройствами. Здесь, к сожалению, все потеряно. Если байт синхронизации в BLE и nRF24l01 совпадает, то в случае с ANT-протоколом работать ничего не будет: последний имеет отличный от них вектор.
Источник