- PVSM.RU - https://www.pvsm.ru -

Домашняя метеостанция на esp8266

Привет ГТ!

С появлением esp8266 пару лет назад, у меня возникла мысль создать на базе этого контроллера что-нибудь полезное, что будет нужным в доме, и чем будет удобно пользоваться всем. Возможность подключения по wi-fi, небольшие габариты, достаточное количество контактов ввода-вывода, легкость программирования сделали возможным собирать на базе этой платы множество устройств, и одно из них — система мониторинга погоды.

Изначальные требования к системе:

  • Удаленный просмотр измеряемых данных
  • Возможность удаленного управления устройством
  • Наличие дисплея для просмотра данных «прямо сейчас»
  • Простота подключения и питания (питание от обычной USB-зарядки)
  • Передача данных на домашний сервер для сбора статистики, просмотра графиков и т.п.
  • Возможность увеличения количества подключенных сенсоров
  • Возможность использования множества метеодатчиков одновременно

КДПВ:

Домашняя метеостанция на esp8266 - 1

Для начала решил отыскать существующие системы, которые можно было бы взять в качестве прототипа. Нашлась одна, подходящая по возможностям — wifi-iot.com [1], но она была отвергнута из-за закрытого кода и необходимости покупки лицензии для активации полного списка возможностей. Поэтому решил создать свой велосипед.

Для реализации надо было воплотить в жизнь железячную и программную части.

На Ебее были закуплены следующие компоненты:

  • NodeMCU board — 350р.
  • LCD TFT Display 320х240 на базе чипа ILI9340C — 370р.
  • Датчик DHT22 — 130р.
  • Датчик BMP180 — 115р.
  • Макетная плата 5х7 см — 30р. (при покупке 5 штук)
  • Плата с micro USB разъемом — 10р.

На местном рынке был куплен корпус — Gianta G403 за 70р.

Итого — 1000р на компоненты (цены на момент публикации, по курсу — 15 вечнозеленых).

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

Для программирования была выбрана среда Arduino IDE, с подключенным модулем для разработки на esp8266. Как это сделать — подробно описано тут — github.com/esp8266/Arduino [2]

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

Для обмена данными между метеостанцией и малинкой был выбран формат данных JSON.

Схемы подключения сенсоров к модулю — были использованы стандартные, библиотеки можно найти здесь:

Так же понадобилась следующая библиотека — github.com/bblanchon/ArduinoJson [6]

Помимо вышеназванных к системе можно подклюючить и настроить полученные данных со следующих сенсоров:

Сейчас жду посылку с датчиком CO2 на базе MHT-Z19, чтобы мониторить наличие углекислого газа в воздухе. Как только придет — соберу модуль с ним, чтобы расширить перечень измеряемых параметров погоды в доме.

Итак, после получения всех посылок, множества итераций по отладке кода и сборок на макетке, пришло время собрать готовое устройство.

Схема устройства:

Домашняя метеостанция на esp8266 - 2

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

Домашняя метеостанция на esp8266 - 3

После этого внутри был закреплен сам экран, бутерброд из платы с модулем, и датчики. Так же не была забыта кнопка сброса :)

Домашняя метеостанция на esp8266 - 4

В торцевых пластинах корпуса были проделаны отверстия для вентиляции сенсоров, и для разъема питания. После подключения — информация на экране:

Домашняя метеостанция на esp8266 - 5

В прошивке модуля реализовано удаленное управление — поднят веб-сервер, используя который можно произвести начальную настройку (указать используемую wifi-сеть, указать используемые датчики, настроить модуль реального времени, посмотреть данные с подключенных сенсоров, перезагрузить модуль). Когда писал странички, уделил внимание тому, что настройки может производиться с мобильного — поэтому Привет, адаптивный дизайн! :)

Никаких внешних зависимостей встроенные странички не имеют, все стили и скрипты — хранятся в памяти модулей.

Скриншоты

Домашняя метеостанция на esp8266 - 6 Домашняя метеостанция на esp8266 - 7
Домашняя метеостанция на esp8266 - 8 Домашняя метеостанция на esp8266 - 9

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

Скриншоты

Домашняя метеостанция на esp8266 - 10
Домашняя метеостанция на esp8266 - 11
Домашняя метеостанция на esp8266 - 12

Что планируется реализовать еще:

  • Синхронизация времени по NTP
  • Накопление данных в модуле в случае потери сети
  • Реализация авторизации на сервере просмотра данных
  • Привязка датчиков к опреденным пользователям
  • Настройка данных, отображаемых на экране датчика
  • Создание outdoor-версии датчика (буду рад советам, как это лучше сделать)
  • Возможность управления реле
  • Возможность получения данных с датчиков открытия окон-дверей (например герконов)

Исходный код проекта — доступен здесь: github.com/aproschenko-dev/MeteoEsp [10]

Буду раз любой конструктивной критике и комментариям.

Автор: alexpp

Источник [11]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/umny-j-dom/128602

Ссылки в тексте:

[1] wifi-iot.com: http://wifi-iot.com/

[2] github.com/esp8266/Arduino: https://github.com/esp8266/Arduino

[3] learn.adafruit.com/dht: https://learn.adafruit.com/dht

[4] github.com/iot-playground/Arduino/tree/master/external_libraries/SFE_BMP180: https://github.com/iot-playground/Arduino/tree/master/external_libraries/SFE_BMP180

[5] github.com/gnulabis/UTFT-ESP8266: https://github.com/gnulabis/UTFT-ESP8266

[6] github.com/bblanchon/ArduinoJson: https://github.com/bblanchon/ArduinoJson

[7] github.com/kmaximv/BH1750: https://github.com/kmaximv/BH1750

[8] learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/overview: https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/overview

[9] github.com/enjoyneering/HTU21D: https://github.com/enjoyneering/HTU21D

[10] github.com/aproschenko-dev/MeteoEsp: https://github.com/aproschenko-dev/MeteoEsp

[11] Источник: https://geektimes.ru/post/276878/