Arduino dht11 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 Wireless Weather Station Using NRF24L01, DHT11-DHT22 © GPL3+

Build a wireless weather station using two NRF24L01 modules that will Display both Indoor and Outdoor Temperature & Humidity.

Step 1: What You Will Need

  • 2X Arduino UNO (or any other Arduino)
  • LCD I2C Display 20X4
  • 2x nrf24l01 module
  • 2X DHT11 or DHT22 sensor
  • Jumper wires
  • Visuino program: Download Visuino

Step 2: The Circuit

For this project we are using a NRF24L01 module together with a voltage adapter.

Wiring the Sender Arduino:

  • Connect NRF24L01 Adapter pin [VCC] to Arduino pin [5V]
  • Connect NRF24L01 Adapter pin [GND] to Arduino pin [GND]
  • Connect NRF24L01 Adapter pin «Chip Enable» [CE] to Arduino Digital pin [9]
  • Connect NRF24L01 Adapter pin «Chip Select» [CSN] to Arduino Digital pin [10]
  • Connect NRF24L01 Adapter pin [SCK] to Arduino Digital pin [13]
  • Connect NRF24L01 Adapter pin [MO] to Arduino Digital pin [11]
  • Connect NRF24L01 Adapter pin [MI] to Arduino Digital pin [12]
  • Connect DHT11 sensor pin [VCC] to Arduino pin [5V]
  • Connect DHT11 sensor pin [GND] to Arduino pin [GND]
  • Connect DHT11 sensor pin [OUT] to Arduino Digital pin [2]

Wiring the Receiver Arduino:

  • Connect NRF24L01 Adapter pin [VCC] to Arduino pin [5V]
  • Connect NRF24L01 Adapter pin [GND] to Arduino pin [GND]
  • Connect NRF24L01 Adapter pin «Chip Enable» [CE] to Arduino Digital pin [9]
  • Connect NRF24L01 Adapter pin «Chip Select» [CSN] to Arduino Digital pin [10]
  • Connect NRF24L01 Adapter pin [SCK] to Arduino Digital pin [13]
  • Connect NRF24L01 Adapter pin [MO] to Arduino Digital pin [11]
  • Connect NRF24L01 Adapter pin [MI] to Arduino Digital pin [12]
  • Connect LCD Display pin [SCL] to Arduino pin [SCL]
  • Connect LCD Display pin [SDA] to Arduino pin [SDA]
  • Connect LCD Display pin [VCC] to Arduino pin [5v]
  • Connect LCD Display pin [GND] to Arduino pin [GND]
  • Connect DHT12 sensor pin [VCC] to Arduino pin [5V
  • Connect DHT12 sensor pin [GND] to Arduino pin [GND]
  • Connect DHT12 sensor pin [OUT] to Arduino Digital pin [2]

Step 3: Start Visuino, and Select the Arduino UNO Board Type

Источник

Метеостанция на Arduino от А до Я. Часть 2

Выбор железа и софта тесно взаимосвязан как «курица и яйцо». С чего начать, с железа, с софта? Если у вас хорошее железо, но к нему нет драйверов, библиотек и софта (IDE, утилиты для прошивки и т.п.), то оно бесполезно, и наоборот.

Поэтому рассказываю еще раз про выбор между nRF24L01+ и ESP8266 для связи удаленных датчиков с центральным блоком.

Дело в том, что ESP8266 это не просто тупой WiFi адаптер, он имеет на борту микроконтроллер по мощности и объему памяти превосходящий Ардуино. По умолчанию ESP8266 имеет прошивку в виде набора AT команд, в этом случае ESP используется как простой модем. Но есть и более продвинутые прошивки, здесь ESP8266 даже может выступать в роли веб-сервера, ну и конечно же управлять датчиками как и Arduino.

Однако все эти продвинутые прошивки имеют недостатки, которые не позволили (в сумме с железячными вопросами о которых я уже писал) применить ESP8266 в данном проекте:

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

В итоге готовой подходящей продвинутой прошивки я не нашёл, и пока не готов создать свою. ESP8266 чип — обширная и интересная тема.

В свою очередь стандартные AT-прошивки так же имеют минусы:

  • они всё ещё сыроваты (по состоянию на 2016)
  • мне не удалось найти нормальную библиотеку для Arduino для управления модулем ESP8266 с помощью AT команд, пришлось «колхозить» самому.

С другой стороны радиомодуль nRF24L01+ прост и понятен, для работы с ним есть супер либа RadioHead и никаких проблем с программированием. Библиотека хорошо документирована, что немаловажно.

RadioHead позволяет передавать структуры данных (а не только отдельные числа), что и реализовано в данном проекте. Забегая вперед скажу, RadioHead может надёжно передавать данные, с повторами если не дошло с первого раза. Все эти вещи библиотека берет на себя.

Для энергосбережения использую библиотеку Low Power Library, она проста и содержит только то, что нужно.

В случае же применения ESP8266 в заоконном датчике, я был бы вынужден создавать WiFi точку доступа и каким-то образом передавать данные (где прошивки, где софт?). Либо позволить датчику напрямую слать данные на веб-сервер, а центральный блок (который в этом случае перестаёт играть роль «центрального») учить читать данные оттуда, чтобы их отобразить на табло.

Другими словами я пошёл путем большей автономии от WiFi интернета и PHP + MySQL сервера. Вы можете начать «клепать» метеостанцию уже сейчас не имея доступа в интернет и/или хостинга для сервера, в этом случае ESP8266 вам не нужен, просто добавите его потом.

Для считывания данных с датчиков типа DHT есть библиотека Adafruit DHT Sensor Library. Работа с ней проста и понятна.

Для датчика давления подходит библиотека Adafruit BMP085 Unified, которая требует наличия библиотеки абстрактного уровня Adafruit Sensor.

В составе всех библиотек есть примеры скетчей.

Вот и всё пожалуй с теоретической частью. «Наши цели ясны, задачи определены. За работу, товарищи!»

Центральный блок. Железо

Ну наконец-то, после всех заумствований приступаем к сборке!

Примечание. Если вы до этого ни разу не собирали метеостанцию (да ладно!), то вы можете начать и не имея всех деталей под рукой. Например, можно начать не имея радиомодуля и/или ESP8266. Датчик барометрического давления BMP180 также может отсутствовать. Добавите потом. Правда в этом случае вам придется самостоятельно закоментировать в скетче те участки кода, которые отвечают за взаимодействие с отсутствующими блоками, но это не так уж и сложно. Я покажу как.

Главное, чтобы хоть что-то собралось и заработало, тогда веселее продолжать.

Как уже говорилось, центральный блок основан на Arduino MEGA. Ещё нам понадобятся:

  • датчик температуры и влажности DHT11
  • датчик барометрического давления типа BMP180
  • WiFi модуль ESP8266
  • радиомодуль типа nRF24 2,4 Ггц
  • дисплей типа LCD1604 (4 строки по 16 символов), купить можно за $5
  • блок питания с выходом 5-12 В постоянного напряжения (я использовал зарядку от мобильного с USB выходом что удобно)
  • макетная плата под пайку, паяльник, канифоль, припой либо обычная беспаечная arduino-макетная плата. Лично я паял для надёжности, потому что проект явно был долгоиграющим и не хотелось страдать из-за случайно выдернутого из макетки проводка.

Макетную плату для распайки можно купить от $1. Берите размером побольше, чтобы хватило на все соединения. И ещё раз: перед покупкой читайте описание, а не картинку.

Беспаечную плату можно купить от $2. Берите размером побольше, чтобы хватило на все соединения.

Соединительные провода бывают таких нужных нам типов:

  • Dupont кабель «папа-мама» (есть и «папа-папа», «мама-мама»). Это шлейф из нескольких проводов с разными цветами изоляции и коннекторами под штыревые контакты для Arduino. Такими проводами удобно соединять платы и датчики напрямую к Ардуино без использования макетной платы.
  • Обычные соединительные провода под беспаечную макетную плату для Ардуино.
  • Пучок проводков для пайки.

Первым делом распаял табло LCD-1604. Сначала припаял штырьки к табло, затем разъемы к макетной плате.

Паял по наитию без предварительной разводки, поэтому здесь никакой схемы приведено не будет. Делайте как удобнее, хуже не будет. Придерживайтесь только принципа, что чёрный провод — это всегда земля, красный — «плюс» питания, остальные цвета как получится. Получилось так.

Для того чтобы не забыть, где какие разъемы, «покрасил» белым корректором участки платы по соседству и сделал соответствующие надписи. Некрасиво? Зато практично и быстро, это же прототип!

Распиновка и соединение

Дисплей 16×4 LCD1604

Подробнее о дисплее и работе с ним погуглите «Работа с символьными ЖКИ на базе HD44780». Отметим, что нужно внимательно отнестись к полярности подключения питания к ЖК-индикатору и чтобы напряжение питания было в диапазоне +4,5…5,5 В. Невнимательное отношение к этому может привести к выходу индикатора из строя!

Пин LCD 1604 Arduino MEGA Arduino UNO Описание
VSS GND GND GND
VDD 5 V 5 V 4,7 — 5,3V
RS 22 4 Высокий уровень означает, что сигнал на выходах DB0—DB7 является данными, низкий — командой
RW GND GND Определяет направление данных (чтение/запись). Так как операция чтения данных из индикатора обычно бывает невостребованной, то можно установить постоянно на этом входе низкий уровень
E 23 5 Импульс длительностью не менее 500 мс на этом выводе определяет сигнал для чтения/записи данных с выводов DB0-DB7, RS и WR
DB4 24 8 Входящие/исходящие данные
DB5 25 9
DB6 26 10
DB7 27 11
LED A+ +5V или резистор 220 Ом → +5VLED-A
LED B- GND
V0 GND или подстроечник на 10кОм

Программная инициализация будет выглядеть так:

Температура, влажность DHT11

Подключение датчика температуры и влажности DHT11 (SainSmart). Датчик расположите лицевой стороной вверх, выводы будут описаны слева направо.

DHT11 Arduino Mega
DATA Digital pin 2 (PWM) (см. ниже DHTPIN)
VCC 3,3—5 В (рекомендуется 5 В, лучше внешнее питание)
GND GND

Барометр BMP180

Подключение датчика атмосферного давления BMP180 (барометр) + температура по интерфейсу I2C/TWI.

BMP180 Arduino Mega
VCC не подключен
GND GND
SCL 21 (SCL)
SDA 20 (SDA)
3,3 3,3 В

Для UNO: A4 (SDA), A5 (SCL).

nRF24L01+

  • Диапазон частот 2,401 — 2,4835 Ггц
  • 126 каналов. Нулевой канал начинается с 2400 Мгц и далее с шагом 1 Мгц, например 70 канал находится соответственно на 2470 Мгц. При установке скорости передачи 2Mbps занимается ширина канала в 2 Мгц
  • Питание 1,9 — 3,6 В (рекомендуется 3,3 В)

Вот распиновка модуля.

Некоторые советуют сразу же припаять керамический конденсатор 100nF (можно 1µF, 10µF) на выводы питания RF для избежания электрических помех.

Распиновка nRF24L01+ (смотреть сверху платы там где чип, пины должны быть внизу) :

пин 2 3,3V пин 4 CSN пин 6 MOSI пин 8 IRQ
пин 1 GND пин 3 CE пин 5 SCK пин 7 MISO

Подключение для метеостанции:

Arduino Mega nRF24L01+
3,3 В VCC пин 2 (лучше внешнее питание)
пин D8 CE пин 3 (chip enable in)
SS пин D53 CSN пин 4 (chip select in)
SCK пин D52 SCK пин 5 (SPI clock in)
MOSI пин D51 SDI пин 6 (SPI Data in)
MISO пин D50 SDO пин 7 (SPI data out)
IRQ пин 8 (Interrupt output) не подсоединен
GND GND пин 1 (ground in)

Программирование радиомодуля будет подробно описано в программной части.

ESP8266

Распиновка ESP8266 (смотреть сверху платы там где чипы, пины должны быть внизу):

GND GPIO2 GPIO0 RX
TX CH_PD RESET VCC

Подключение ESP8266 для метеостанции:

ESP8266 Arduino Mega
TX 10 пин (SoftwareSerial RX)
RX 11 пин (SoftwareSerial TX)
VCC 3,3 В
GND GND
CH_PD Через резистор 10К к 3,3 В Arduino
GPI0 Необязательно. Через резистор 10К к 3,3 В Arduino
GPI2 Необязательно. Через резистор 10К к 3,3 В Arduino

Центральный блок в сборе. «Материнскую плату» вырезал из картонной коробки из-под обуви и к ней винтиками на 3 прикрутил всё остальное.

Как видим в этом месте всё питание осуществляется от пинов Ардуино, т.е. к блоку питания напрямую ничего не идёт, и пока мощи хватает.

Вроде всё. Ничего не забыл.

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

Источник

Adblock
detector