Метеостанция на ESP8266
Как-то постигла меня участь сменить место жительства. Арендовали новую квартиру, перебрался в неё и заметил, что за окном нет термометра. Не то чтобы это было проблемой для меня, но иногда приходится посматривать на него, особенно в зимний период. Немного позднее было решено сообразить цифровой термометр, а еще немного позже сообразить не только термометр... Так в последствии и родился этот проект.
За основу было решено взять микроконтроллер ESP8266.
Поскольку проект "термометр" перерос в проект "метеостанция" помимо контроллера необходимы были еще 7-сегментный индикатор TM1637, датчик DS18B20 (для измерений комнатной температуры), датчик BME280 (для измерений уличной температуры, влажности воздуха и атмосферного давления), а чуть позже было решено добавить еще и часы реального времени на DS1307Z. В закупке на помощь пришла всем нам известная китайская интернет торговая площадка. Все комплектующие были закуплены там и через месяц горстью лежали у меня на столе.
Набросал принципиальную схему
И начался долгий процесс кодинга... Оно конечно можно и быстрее , но за основной работой не сильно быстро пишется, да и концепция проекта в ходе написания кода несколько раз менялась. Основу написал, по вечерам, за недельку, а дальше пошло ленивое допиливание проекта, добавление новых фитч, переписывание некоторых библиотек и многое другое. Затянулось это на долгих 10 месяцев.
Итак в завершении мы имеем следующие функции:
1. Измерение температур/влажности/давления
2. Возможность работы в домашней Wi-Fi сети и в режиме точки доступа
3. Вывод данных на 7-сегментный индикатор
4. Web интерфейс для просмотра данных с компьютера/ноутбука/телефона
5. Изменения настроек с помощью web интерфейса
6. Сохранение настроек в EEPROM памяти
7. Возможность отправки данных на ресурс Narodmon.ru
8. Часы с возможностью синхронизации с NTP серверами
9. Смена яркости свечения 7-сегментных индикаторов
*10. Так же была возможность отправки данных в Telegram, но из-за нехватки ОЗУ ESP8266 пришлось отказаться от этой затеи. Функция работала нестабильно и вызывала частые перезагрузки или зависание. Если использовать ESP32, то должно все работать, но я еще не пробовал.
Больше всего времени пришлось потратить на написание web страниц. Если с С++ я еще дружу, то с HTML, CSS и JS я до этого времени особо не сталкивался. Да и HTML внедряется в код тут специфически.
Главная Web страница. На ней отображаются данные с датчиков. Автоматически страница обновляет данные каждые 5 минут, а так же изменяет цвет фона в зависимости от температуры на улице. При t<0 - синий оттенок, t=0..28 - зеленый, при t>28 оранжевый. Данный стиль страницы я, честно, где-то подсмотрел в интернете, но немножко переделал под свои нужды и добавил медиа-запросы, что позволило просматривать данную страницу на устройствах с маленькими дисплеями.
Что такое Narodmon.ru? Как гласит сайт проекта:
Народный мониторинг - это основанный в 2011 году краудфандинговый геоинформационный проект по отображению на карте мира и контролю (на ПК, смартфонах и других гаджетах) показаний датчиков своих участников (температуры, влажности, атм.давления, скорости и направления ветра, радиации, энергопотребления и любых других величин), а также частных и городских веб-камер для публичного или приватного просмотра.Главная фишка в том, что данные с вашей метеостанции, с помощью данного ресурса, можно просматривать с любой точки мира через сайт или с помощью мобильного приложения (выше на фото скрины с официального приложения). Сервера сервиса хранят данные до 1 года (среднечасовые показания). На основе показаний сервис строит тренды, что позволяет просматривать динамику их изменений в течении часа/дня/недели/месяца/года, а так же экспортировать данные в csv формате. Для бонуса к карме можно предоставить данные вашей метеостанции для публичного просмотра.
Собственно для отправки данных на ресурс необходимо: подключение к беспроводной сети, включить данную функцию в настройках метеостанции, дождаться отправки данных на ресурс и в аккаунте narodmon добавить новое устройство. Добавление устройств проходил по MAC адресу, при старте метеостанции, она выводит его в монитор COM порта.
Часы. В первых версиях проекта не было отдельного модуля RTC. Счет времени был организован с помощью отсчета времени самой ESP, а точнее с использованием библиотеки <Ticker.h>. Но есть небольшая проблема. При отключении питания время сбрасывается и если нет подключения к интернету, то придется устанавливать время вручную. В следствии этого было принято решение для счета времени использовать микросхему DS1307Z. Собственно модуль RTC представлен на фото выше. Точность хода ±1-3 секунды в час. Предусмотрена синхронизация с NTP сервером. Синхронизация произойдет если время метеостанции будет отличаться от серверного более чем на 1 минуту. Автоматический переход на летнее/зимнее время, пока, не предусмотрен. Для этого необходимо вручную изменить часовой пояс GMT и нажать клавишу "сохранить". Синхронизацию можно отключить и выставить время вручную. Поскольку на RTC модуле есть резервное питание, в виде батарейки LIR2032, можно не боятся, что время сбросится при отключении питания.
По окончанию написания программной части стал вопрос о том, как же это железо все слепить до кучи, ведь оставить все на проводках лежать на подоконнике не вариант. Решено было сделать конструкцию модульной, в виде конструктора. Для этого в Sprint-Layout были нарисованы 3 платы: общая переходная плата, плата с интерфейсными разъёмами под датчики (USB+Audio 3.5mm 4pin) и плата с разъёмом питания DC 5.5/2.1mm. Модуль RTC пришлось отдельно припаять на проводах прямо к ESP, но он неплохо вписался в общий вид модели.
Габариты конструкции получились ~75*30*60 (ш*в*г).
Для перенесения рисунка платы на текстолит использовал, впервые, фоторезист. Отмечу, что классная штука, тем кто еще не пробовал - советую.
Как писал выше, датчики решил сделать на разъемах. Для BME используется USB, для DS18B20 - Audio 3.5mm. На плате разъемы припаяны с разных сторон, для удобства и в силу того, что разъем 3.5 mm SMD типа. Так как у DS182B20 всего 3 провода для подключения, то можно не использовать 4-pin штекер (я использовал 4pin так как в магазине не было smd разъема на 3pin). Разводка платы такова, что пины 1 и 2 шунтированы и на них подается питающее напряжение, следовательно при распайке, как на рисунке ниже, можно использовать 3-pin штекер.
DS18B20 сразу заказал гильзованым и с кабелем.
BME280 продается в виде платы и без корпуса. Данный датчик должен размещаться на улице, следовательно необходимо его защитить от дождя, снега и прямых солнечных лучей (это скажется на измерениях температуры). Корпус сделал из подручных материалов - из шприца "20ки".
Шток шприца должен быть с резиновым наконечником. В резинке пробивается отверстие и через него протягивается кабель. Резина плотно прилегает к кабелю обеспечивая герметичность.
Под игольный конус необходимо убрать. Лучше всего вырезать чем-то горячим, например, паяльником. Это обеспечит хороший доступ к атмосфере для измерения влажности и не даст скапливаться внутри шприца конденсату. Торчащую часть штока можно обрезать, но я не стал. В случае чего можно легко извлечь шток.
Датчик необходимо как-то разместить на улице. Можно крепить по классике жанра на откосе за окном, сделав из полоски металла крепеж. Так же необходимо сделать защиту от солнечных лучей.
Метеорологи размещают свое измерительное оборудование в психотермометрической будке (она же будка Селянинова, она же будка Стивенсона, она же метеорологическая будка). Выглядит она примерно вот так:
Но поскольку живу я в квартире, а не в своем доме, то городить такой "скворечник" на отливе за окном не было никакого желания. И если у вас, как и у меня, нет сверлильного инструмента, то сделать крепление для данного датчика можно из подручных средств.
Шприц очень хорошо входит в горлышко обычной пластиковой бутылки из под "минералки" или картонного пакета сока, а упоры для пальцев не дают ему провалиться в горлышко. Обрезается дно бутылки, укрывается непрозрачным светоотражающим материалом, например, фольгой, делаются окошки для вентиляции и ушки для крепления к отливу. Крепить можно на обычной скотч, предварительно вытерев отлив от грязи.
При размещении датчика без такой вот простой "метеобудки" показания явно завышены относительно показаний когда датчик в "будке". Особенно это было заметно весной в рассветный час, когда на окно некоторое время падал солнечный свет.
Конечно данный вариант отнюдь не подходит под звание лучшей психотермометрической будки года, но все же лучше чем просто прилепить к окну или стене, особенно когда у вас нет под рукой нужного инструмента.
PS: если отправлять данные на narodmon и показатели температуры будут завышены относительно средних показателей по региону, то narodmon вышлет вам предупреждение и отключит публичный доступ у этого датчика. Конечно, через время можно снова подключить публичный доступ, но это лишние телодвижения. А оно вам надо?
Корпус метеостанции... Где же взять корпус? Можно купить у китайцев готовый пластиковый корпус под электронику и сделать в нужных местах отверстия для разъемов и индикатора. Я же решился заморочиться и сделать его сам. Не хотелось мне обыденности и черного пластика. Решил сделать из ламината (о чем в процессе пожалел). Довольно твердая штука оказался этот ламинат. При отсутствии инструмента и мастерской это не простая задача, но я справился.
PS: За время, что делался этот проект, было собрано два устройства. Одно в корпусе из фанеры и ламината (лицевая часть), а другое в корпусе чисто из ламината. На фотках представлен уже второй вариант корпуса.
Для подключения к web интерфейсу метеостанции необходимо знать ее IP адрес. Он выводится при старте метеостанции в монитор СОМ порта и на индикаторе в виде бегущей строки. Если не знаете, забыли или роутер выделил новый адрес - перезагрузите метеостанцию и она покажет его на индикаторе.
Если это первый запуск и еще не настроены параметры сети или работа в режиме точки доступа, то адрес всегда будет фиксированный 192.168.4.1
Ну и собственно пример работы индикации. Время -- температура в помещении -- температура на улице -- атм.давление в мм.рт.ст. -- влажность в %.
Для тех кому интересна данная самоделка оставлю ссылку на github. Там сам скетч для Arduino IDE, дополнительные библиотеки, драйвер для СН340, инструкция и разводка платы в формате lay.










































