Esp8266 как подключить dht11

ESP8266:Примеры/Отображение температуры в браузере с помощью чипа ESP8266 и датчика DHT11/DHT22

Содержание

Отображение температуры в браузере с помощью чипа ESP8266 и датчика DHT11/DHT22 [1]

В этой статье объясняется, как сделать автономный веб-сервер с чипом ESP8266, который получает данные от датчика температуры/влажности DHT11/DHT22 и показывает их в браузере.

Для начала взгляните на видеоруководство:

Установка библиотеки «DHT Sensor»

Библиотека «DHT Sensor» упрощает использование датчика DHT для считывания температуры и влажности при помощи платы ESP8266 или Arduino. Чтобы скачать ее, проделайте следующее:

Загрузка кода на ESP8266

Сначала убедитесь, что в IDE Arduino установлен аддон для чипа ESP8266. О том, как установить его, читайте тут.

Затем кликните в IDE Arduino на Инструменты > Плата > Generic ESP8266 Module (Tools > Board > Generic ESP8266 Module).

Скопируйте скетч ниже в IDE Arduino. Замените SSID и пароль на те, что соответствуют вашей сети. Отредактировав скетч, загрузите его на ESP8266 (если загрузить его не получается, поищите решение проблемы в этой статье).

Примечание: В верхней части скетча можно раскомментировать строчку для датчика DHT22 – если вы привыкли работать именно с ним.

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

Примечание: Скетч выше совместим и с другими моделями датчика DHT (подробней читайте в комментариях к коду).

Схема

Важно: Датчику DHT для корректной работы требуется 5 вольт, поэтому убедитесь, что используете на ESP8266 контакт Vin, который как раз выдает нужные 5 вольт.

IP-адрес ESP8266

Откройте монитор порта IDE Arduino на скорости 115200 бод. Спустя несколько секунд в нем должен появиться IP-адрес ESP8266. В моем случае это «192.168.1.95».

Демонстрация

Чтобы проверить, работает ли проект, откройте любой браузер на устройстве, подключенном к тому же роутеру, что и ESP8266. Затем введите в адресной строке IP-адрес, показанный в мониторе порта IDE Arduino, и кликните ↵ Enter . В результате браузер должен показать примерно следующее:

Источник

Esp8266 как подключить dht11


Artwork by Павел Бондаренко

ESP8266 может работать в двух режимах: в режиме интерпретатора AT-команд или в режиме самостоятельного микроконтроллера с wifi модулем. Работу ESP8266 в режиме интерпретатора AT-команд я рассматривал в предыдущей статье, эта же статья рассматривает работу ESP8266 в качестве самостоятельного микроконтроллера.

В этой статье мне хотелось бы рассмотреть программирование ESP8266 с помощью ESP8266 фреймворка для Arduino IDE. Данная тема решает широкий спектр задач обеспечения радиоканалом разного рода датчиков и простых устройств управления нагрузкой.

В качестве примера в статье рассматривается пошаговое написание прошивки для температурного логера на датчиках DHT11 и DS18B20. Первый датчик используется для определения комнатной температуры и влажности, второй используется для определения уличной температуры. Я статье используется плата ModeMCU ESP8266, т.к. там есть автозагузка прошивки, но в принципе может быть использована любая другая плата на модуле ESP12E/ESP12F. Данные модули оснащены флеш-памятью на 4 мегабайта, что позволяет забыть о жёсткой оптимизации размера прошивки, когда борьба идёт за каждый байт.

READ  Как подключить старый домофон

При работе с ESP8266 есть выбор для использования его совместно с «облаками», собственным внешним сайтом, собственном сервером расположенным в интросети или автономной работой ESP826, когда веб-сервер запускается на самом ESP8266.

В данном проекте используется веб-сервер uhttpd на роутере с прошивкой OpenWRT. ESP8266 передаёт на него показания датчиков, а роутер их сохраняет и виде обычных файлов, и делает их доступными для просмотра через web-интерфейс. Можно дать новую жизнь старому смартфону или планшету настроив их на отображение таких web-страниц. Web-интерфейс универсален и может отображаться на любых браузерах любых устройств.

I. Начало работы с ESP8266 фреймворком для Arduino IDE

II. Работа с библиотекой ESP8266WIFI

1) Установка ESP8266 фреймворка для Arduino IDE

Домашняя страница ESP8266 фреймворка для Arduino IDE расположена на гитхабе: https://github.com/esp8266/Arduino. Там имеется небольшая инструкция по устаноке фреймворка:

Действуя в соответствии с этой инструкцией, прописываем в настройках Arduino IDE адрес репозитория «http://arduino.esp8266.com/stable/package_esp8266com_index.json»:

В менеджере плат устанавливаем пакет поддержки плат esp8266:

После установки пакета поддержки esp8266, выставляем в настройках свою плату, в моем случае это nodemcu на модуле esp12e, а настройки платы можно оставить по умолчанию:

Теперь подключаем плату NodeMCU к компьютеру, выбираем последовательный порт в Arduino IDE, находим в примерах для ESP8266 тестовый скетч «Blink», компилируем, загружаем и наслаждаемся ровным миганием синего светодиода:

Прошивка занимает почти четверь мегабайта, а процесс прошивки занимает примерно секунд двадцать. Если вы не горите желанием написать свою реализацию TCP/IP стека, то стоит принять это как данность.

Значение константы LED_BUILTIN определенно в файле

Т.е. LED_BUILTIN это GPIO_16. Если мы хотим помигать светодиодом который установлен на модуле ESP12E, то приведем скетч к следующему виду:

2) Подключение датчика DHT11 к ESP8266

Теперь нам нужно подключить к ESP8266 несколько сенсоров чтобы впоследствии передавать данные с них через WiFi.

Для начала возьмём популярной датчик температуры и влажности DHT11. Его подключение будет выглядеть так:

В качестве библиотеки возьмём библиотеку от Adafruit https://github.com/adafruit/DHT-sensor-library, т.к. она универсальна и поддерживает датчики DH11, DHT22(AM2302, AM2321) и DHT21(AM2301). Правда для своей работы она требует ещё одну библиотеку: https://github.com/adafruit/Adafruit_Sensor, её тоже надо будет установить.

После установки библиотек и подключения датчика DHT11 к ESP8266, загрузим в Arduino IDE тестовый скетч:

Если всё было сделано правильно, то после компиляции и загрузки прошивки, в мониторе последовательного порта можно будет наблюдать показания датчика:

3) Подключение датчика DS18B20 к ESP8266

Вторым датчиком который мы подключим ESP8266, будет DS18B20. Схема его подключения к NodeMCU ESP8266 показана ниже:

Здесь, так же как и в случае с DHT11, Data pin подтягивается к шине питания через резистор номиналом 4.7КОм.

Для работы с датчиком DS18B20 будем использовать библиотеку OneWire: https://github.com/PaulStoffregen/OneWire/. Эта библиотека как же поддерживает несколько моделей датчиков Dallas Semiconductor, что нам только на руку.

Подключаем датчик к плате NodeMCU, скачиваем библиотеку «OneWire» и открываем пример DS18x20_Temperature.

В примере правим строку:

также можно еще скорость UART поднять до значения 115200

Если все было сделано правильно, то после компиляции примера и загрузки прошивки в микроконтроллер, мы получим следующий лог работы в мониторе последовательного порта:

4) Установка WiFi соединения

Теперь, когда у нас есть данные, которые нужно куда-то передавать, самое время разобраться с библиотекой ESP8266WIFI, с помощью которой мы будем это делать.

READ  Как подключить роутер tp link w8951nd

Библиотека ESP8266WIFI имеет схожий API c библиотекой Arduino WIFI.

Опираясь на эту информацию, начинаем писать код.

В составе библиотеки ESP8266WIFI имеется 17 примеров, среди которых имеется пример для сканирования доступных точек доступа: WIFIScan. Я переписал его на свой манер:

Результат работы программы выглядит так:

Действие программы соответствует AT-команде CWLAP, её можно свернуть в функцию с названием, скажем list_wifi(). На базе этой функции можно написать другую, которая будет искать определенную точку доступа. Можно ее будет также наделить полезным свойством, возвращать в случае обнаружения заданной точки доступа уровень ее сигнала rssi. Т.о. получим функцию двойного назначения get_rssi():

Дело осталось за малым, установить соединение с точной доступа. У меня это получилось так:

5) Использование режима энергосбережения DeepSleep

Теперь вместо задержки на функции delay() будем посылать ESP8266 в режим энергосбережения. Для этого нам нужно будет соединить выводы D0 и RST:

После этого, заменим в главном цикле стоку delay(5000) на ESP.deepSleep(3e7), которая отправит в ESP8266 в режим энергосбережения. Параметр «3e7» означает 3*10^7 микросекунд, т.е. тридцать секунд.

Лог работы программы будет выглядеть теперь так:

Здесь непечатные символы, это отладочное сообщение при выходе ESP8266 из режима энергосбережения.

Для более корректной работы, мы можем поменять алгоритм таким образом: 1)пусть в начале главного цикла сначала устанавливается WiFi соединение, 2) потом путь передаются данные, 3) после этого WiFi соединение разрывается, и ESP8266 уходит в режим энергосбережения.

6) Класс WiFiClient, получение web-страницы от сервера на OpenWRT и отправка данных через GET запрос

Класс WiFiCliet реализует установку TCP соединения с сервером. Демонстрационный пример его использования можно найти здесь: Client — ESP8266 Arduino Core 2.4.0 documentation. Я адаптировал этот пример под свой случай, и в итоге получилось так:

Результат работы программы выглядит так:

Для контроля можно взглянуть на дамп соединения в Wireshark:

Как видно, соединение осуществляется без ошибок. Красная строчка показывает закрытие соединения клиентом, с помощью вызова WiFi.disconnect().

Теперь аналогично предыдущей статье: Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос, мы можем отправлять на веб-сервер свои данные через GET-запрос.

Изменим в программе строку:

После чего заново компилируем и перепрошиваем esp8266. Смотрим на результат работы программы:

Как видно, данные успешно уходят на сервер.

7) Отправка на web-сервер данных с датчика DHT11 через GET запрос

Теперь нам нужно добавить к получению данных с датчика DHT11, отправку их на web-сервер через GET-запрос, как это делалось в предыдущей статье: Отправка данных от ESP8266 на web-сервер OpenWRT через GET запрос.

Программа в данном случае получается такой:

Для приёма данных, на стороне сервера нужно будет добавить cgi скрипт sensors.cgi следующего содержания:

Данный скрипт записывает полученные показания датчиков в файлы вида: ‘/site/sensors/»дата»/log.txt’. Файлы автоматически разбиваются по дням. Формат файлов выглядит так:

8) Добавление датчика DS18B20

Теперь нужно добавить опрос датчика DS18B20, и передачу его данных на web-сервер. Для этого я добавил в программу код из примера «DS18x20_Temperature» библиотеки OneWire. Этот пример поддерживает датчики: DS18S20, DS18B20, DS1822. Я не стал его упрощать затачивая конкретно под свой DS18B20, а оставил как есть:

Также немного придётся поправить cgi скрипт для приёма и записи показаний датчика DS18B20:

Теперь показания датчиков выглядят следующим образом:

9) Вывод показаний датчиков через веб-интерфейс

Теперь нам нужно реализовать вывод данных через веб-интерфейс. Для этого напишем два CGI скрипта. Первый будет выводить лог измерений за текущие сутки, а второй будет выводить текущие значения. К сожалению я не обнаружил в uhttpd сервере поддержки SSI, поэтому генерацию html кода пришлось полностью реализовывать через шелл-скрипы.

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

GCI скрипт для вывода лога измерений получился таким:

Он довольно простой. Второй скрипт будет поинтереснее:

По желанию еще можно добавить JavaScript для автоматического обновления содержимого страницы.

Результат работы последнего скрипта на экране мобильника выглядит так:

В заключение хочу ещё добавить, что нужно внимательно отнестись к установке датчика уличной температуры. Он должен быть защищён от ветра и прямого солнечного света. Также он не должен напрямую соприкасаться со стеной или окном жилого дома. По моим наблюдениям, расстояние в 10см от стены дома достаточно для корректных показаний.

10) Второй WiFi термометр на датчике AM2320 (добавлено 26.05.19г)

Спустя полгода после изготовления термометра, должен сказать, что он получился довольно удачным. Это очень удобно, проснувшись утром взять смартфон, и тут же посмотреть какая температура сегодня за окном. Не нужно подходить к замороженому окну и пытаться разглядеть что-то за замороженым окном в темноте.

Теперь же, с приближением лета, возникла необходимость в изготовлении второго термометра. Для чего вам может понадобиться второй уличный термометр? Если у вас окна выходят на север, то вы можете не волноваться за результаты показаний термометра, он скорее-всего будет всегда казать температуру приближенную к реальной. Если же у вас все окна выходят на юг, то даже если вы будете как-то пытаться экранировать сенсор, солнце все равно будет засвечивать его, и показания «поплывут». Если же у вас, как и у меня окна, выходят на восток и запад, то большую часть года вполне можно обойтись термометром на восточном окне. Однако летом, как только встает солнце мой спрятанный под карнизом DS18B20 начинает показывать температуру кипения хлорного ангидрида, что для земной атмосферы несколько ненормально.

Я буду использовать I 2 C интерфейс, на ESP12E/ESP12F он расположен на GPIO4 (SDA) и GPIO5 (SCL). На NodeMCU это соответственно выводы D2 и D1:

Подключается датчик к NodeMCU таким образом:

Подтягивающие резисторы на линии SDA и SDL ставить не надо, они есть в самом датчике. Так же как и в случае с DHT11, для работы с датчиком нам понадобится библиотека https://github.com/adafruit/Adafruit_Sensor. Кроме этого, понадобится библиотека непосредствено работающая с AM2320 https://github.com/adafruit/Adafruit_AM2320. Последняя содержит скетч для проверки работы датчика:

После компиляции скетча и прошивки NodeMCU, в окне терминала мы должны увидеть лог работы:

В терминале должен пойти лог такого вида:

Теперь на роутере напишем CGI-скрипт «/site/cgi-bin/am2320.cgi» для приема и сохранения результатов измерений датчика:

Осталось привести скетч ESP8266 к окончательному рабочему виду:

Для отображения данных с двух датчиков, скрипт temperature.cgi нужно будет привести, например, к такому виду:

Выглядит гадко, но это работает. Итоговый результат на экране смартфона:

В заключение хочу немного сказать об автономном режиме работы ESP8266, т.е. режиме работы от аккумулятора. Мне пока удалось добиться беспрерывной работы всего лишь двое суток. НО. У меня довольно «слабый» аккумулятор. Это одна батарея 18650, сама обычная с али. Ее фактическая емкость где-то 500 или 600 мА. Далее у меня не самая эффективная цепь питания. C батареи питание идет на повышающий до 6 Вольт DC-DC преобразователь. Затем питание проходит через понижающий до 3.3 Вольт линейный преобразователь ams1117-3.3. В итоге, я пока имею только двое суток автономной работы. Work in progress, как говорится.

Источник

Поделиться с друзьями
Как подключить и установить...
Adblock
detector