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

Привет ГТ!

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

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

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

КДПВ:

564d5e527195477081d617eae12bbba6.jpg

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

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

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

  • 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

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

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

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

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

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

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

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

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

675f6fc3f413434babf69ac0a7ecb605.png

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

9c341662c8a946b28ebfee00ee157ea4.jpg

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

67eee227dd4f46cd8450e8437a32dfa7.jpg

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

c8bbdbd0091c47958f4d33126751df61.jpg

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

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

Скриншоты

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

Скриншоты

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

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

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

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

© Geektimes