Как стать автором
Обновить

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

Время на прочтение4 мин
Количество просмотров59K
Привет ГТ!

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

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

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


КДПВ:





Для начала решил отыскать существующие системы, которые можно было бы взять в качестве прототипа. Нашлась одна, подходящая по возможностям — 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 на базе MH-Z19, чтобы мониторить наличие углекислого газа в воздухе. Как только придет — соберу модуль с ним, чтобы расширить перечень измеряемых параметров погоды в доме.

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

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



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



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



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



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

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

Скриншоты







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

Скриншоты






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

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


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

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

Update:

Для всех библиотек к модулям, подключаемых по 1-wire шине, требуется заменить инциализацию wire-протокола с Wire.begin() на Wire.begin(0, 2), т.к. стандартные пины заняты экраном.
Теги:
Хабы:
+23
Комментарии93

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн