Домой Программирование esp8266, график температуры и многое другое

esp8266, график температуры и многое другое

by dilix
Wifi термометр Wifi термометр на esp8266

Если вы хотите собрать устройство с wifi и отправлять данные в облако или же на свой сервер, то вы по адресу, добро пожаловать под кат, где обсудим что интересного и как именно можно сделать с помощью esp8266 и даже без Arduino.

Что такое esp8266?

Если вы уже в курсе, можно перепрыгнуть сразу дальше.

Esp8266 крайне популярный микроконтроллер с Wifi интерфейсом, а значит он может быть использован в IoT проектах, а приятная цена (от 250руб. в России и ~100руб. на Aliexpress) позволяют со спокойной совестью с ним экспериментировать.

Esp32 и другие аналоги

Кроме esp8266, есть, например более “продвинутая” версия контроллера esp32, но немного дороже.

Что будем делать с esp8266?

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

Мы же соберем простой термометр, который будет с определенным периодом отправлять данные в облачный сервис, можно также настроить, чтобы при достижении определенных значений присылалось sms, email, телеграмм уведомление.

Что нам понадобится

  • esp8266
    • Интересен именно такой формфактор, т.к., например в других модификациях не выведен GPIO 16 для реализации Deep Sleep (режим, когда модуль просыпается лишь время от времени, экономя энергию и не нагреваясь по сравнению с обычным режимом работы). При отсутствии выведенного пина, можно припаять перемычку непосредственно на самом чипе, но сделать это, особенно не обладая большим опытом пайки – не тривиально.
  • 1х адаптер под макетную плату для esp8266
    • В идеале для устройства можно вытравить печатную плату, но для упрощения процесса будет использовать макетную плату.
  • макетная плата
  • 1х стабилизатор AMS1117
  • 1х конденсатор на мин. ~300 (я взял на 470), 1х на 30-50 (я взял на 47) для развязки питания.
  • термометр ds18b20
  • 1х 4.7к резистор для подтяжки линии данных термометра
  • джампер
    • можно обойтись без него, используется для соединения GPIO 16 и RST, чтобы использовать deepSleep или в дальнейшем для ввода устройства в Sleep Mode, чтобы прервать цикл с глубоким сном.
  • USB-TTL или  Arduino для первичной прошивки esp8266 (в дальнейшем можно будет настроить обновление по воздуху)
  • 1х корпус для устройства
    • в моем случае идеально подошла коробочка от мятных конфет 😀
  • 1х micro usb вход для питания от множества накопившихся телефонных зарядок

Схема подключения

Wifi термометр Wifi термометр на esp8266

Важное дополнение – при использовании адаптера для esp8266, приведенного выше, резистор на 10к не нужен, как и разводка для CHIP_EN, т.к. в самом адаптере это уже сделано за вас, как и вывод GPIO на GND.

Программное обеспечение

Можно естественно самому написать ПО для устройства с нуля, можно использовать возможность сделать из esp8266 Arduino.

Я же пошел по пути минимального сопротивления и поискал готовые решения для реализации устройства и наткнулся на крутой конструктор прошивок для esp8266, который позволяет получить готовую прошивку с набором функций, необходимым для решения именно вашей проблемы по максимально демократичной цене в ~110 рублей за лицензию на устройство, позволяющую использовать все доступные функции прошивки.

Мой набор функций выглядит следующим образом:

Наобр функций для wifi esp8266 термометра

  • 1-wire ds18b20 – поддержка нашего датчика температуры
  • DHT 11/21/22 – поддержка датчиков температуры, но они пока что не используются в устройстве
  • Коррекция датчиков – не всегда датчики откалиброванны идеально на заводе, можно будет выставить коррекцию именно для ваших условий, опираясь на показания проверенного датчика на месте.
  • flymon.net – облачный сервис сбора и визуализации статистики – выглядит многообещающе, но на деле у меня очень редко быстро выводит графики, очень долго грузится, в идеале я сделал свое простое решение на php, mysql, js
  • sms.ru, email уведомления, sms/email шаблоны – опции для организации уведомления по смс и электронной почте
  • TCP/UDP Клиент – необходим для передачи данных на свой собственный сервер
  • Обновление ОТА, Авто ОТА – опции, с помощью которых можно буквально в 1 клик обновить прошивку по воздуху, выбрав другой набор опций в конструкторе – крайне удобно, чтобы не загружать прошивку каждый раз через программатор
  • Logic2 – отвечает за построение кастомной логики на устройстве, например отправке уведомлений при определенных условиях
  • Время и NMTP – поддержка синхрониазции времени на устройстве, в простейшем случае не нужно, но можно строить например сценарии отправки данных на сервер только по расписанию

Процесс прошивки прост и описан на сайте конструктора.

Вид готового устройства

Готовый термометр на ESP82688 с wifi

Виз сзади на собранный термометр на esp8266

esp8266, график температуры и многое другоеВид сзаду сбоку на термометр на базе esp8266 с wifi

Виз спереди на собранный термометр на esp8266

Вид спереди на термометр на базе esp8266 с wifiВид спереди на термометр на базе esp8266 с wifi в корпусе

Температура с устройства на графике и в таблице

Сервис Flymon

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

График из сервиса Flymon

Готовые системы умного дома

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

Главный минус такого подхода – что если вам нужно исключительно мониторить ряд параметров и получать данные в облаке, то поднимать сервер дома, пусть и возможно одноплатном компьютере, например Raspberry PI, все равно – это из пушки по воробьям.

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

Сбор данных на хостинге

Сохранения данных в базу на хостинге

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

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

Данные с термометра на esp8266

Скрипт позволяет записывать данные с разных датчиков в одну таблицу, например можно поставить 2 устройства, прописать в отправке данных разные deviceId и отправлять разные типы данных в базу на хостинге, например температуру, влажность, давление, сохранять факт срабатывания датчиков движения, открытия дверей и др. на что хватит фантазии.

Визуализация данных из базы данных

Данные собраны, остается лишь понять что с ними делать.

Самый просто и понятный способ – вывести данные на графике.

График температуры

Виден пик, когда попробовал использовать устройство без глубокого сна и в закрытой коробке.

Предусмотрен интерфейс изменения настроек, который можно скрыть как в примере выше.

esp8266, график температуры и многое другое

Скрипт для сбора данных на своем хостинге, страницу визуализации данных и инструкцию как все это использовать и завести у себя на хостинге можно взять всего за 149 руб. по ссылке.

Интересные факты относительно ESP8266

  • Контроллер 8266 сам по себе довольно прожорлив, т.ч. держать его постоянно включенным приводит к нагреву, не говоря уже о большом потреблении тока, что критично в проектах, рассчитанных на работу от аккумулятора,
  • Если в собранном устройстве как у меня не использовать deep sleep и держать модуль постоянно включенным, то это приводит к нагреву и завышению температуры
    • Если вся плата находилась в закрытой коробочке, то это давало лишних ~8 градусов,
    • Если плата была на воздуха без коробки, это давало лишних ~3 градуса,
    • При использовании deep sleep контроллер не нагревается и не искажает данные с термометра
  • С помощью батарейки и режима глубокого сна можно сделать автономный датчик температуры, способный проработать не один месяц на одной батареи,
  • Пин CHIP_EN можно использовать для включения и выключения контроллера, когда, например, он используется просто как канал связи в Arduino проекте – н