40

Еще одна погодная станция на ESP8266

Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост

Я решил мониторить погодные показатели у себя дома. У меня уже есть богатый опыт сборки устройств на arduino и esp8266 и на esp мне понравилось больше (из-за наличия wi-fi).

Для полноценной картины погодных условий нам необходимо знать температуру внутри и снаружи, давление воздуха, влажность и качество воздуха (количество CO и CO2). Показания буду считывать домашним сервером на Linux при помощи самописного скрипта и выводить через MRTG в виде графика.


Собственно детали были заказаны на Aliexpress: MP180 (температура и давление), MQ135 (качество воздуха), DTH11 (температура и влажность), DTH22 (уличная температура и влажность), 662k (стабилизаторы на 3.3 вольта). Доставка была быстрой, и уже через две недели все было готово к сборке.


К сожалению, на момент написания статьи DTH22 еще не пришел, но я оставил для него выведенный внешний разъем.


Я не буду выкладывать схему, так как нет принципиальной разницы к каким GPIO что цеплять (за исключением i2c шины, она необходима для датчика давления). Сборку начнем с впаивания esp8266 в плату с контактами, где кстати, сразу отпаяем перемычку и впаяем стабилизатор на 3.3 вольта. Как раз для этого были куплены десяток 662k стабилизаторов. Это нам очень упростит дальнейшее подключение, так как все датчики работают либо от 3.3 до 5 в, либо строго от 3.3. Получается питать всю схему можем любым напряжением и не париться, что что-то сгорит.

Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост

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

Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост
Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост

Далее расположил все на макетной плате, чтоб было поудобнее, все впаял, развел провода сзади (плюс на плюс, GND на минус, остальное на GPIO, сопротивления для светодиодов и аналогового входа, об этом чуь позже), вывел несколько светодиодов, чтобы понимать что происходит, поставил PC спикер для понта (пищит при включении и превышении показаний).

Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост

Кстати у ESP8266 есть один аналоговый вход, но он считывает напряжение до 1 вольта. У датчика загазованности MQ135, есть два выхода - цифровой и аналоговый. Цифровой срабатывает при превышении показаний, поэтому для мониторинга он бесполезен, а второй выгод аналоговый. Вот его то мы и подключим к ESP. Но для корректной работы нам нужно собрать простой делитель напряжения на двух сопротивлениях.

Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост

После подключения и написания скетча на Adruino оказалось, что в режиме i2c могут работать не все контакты (как я ранее упоминал). В итоге мне так и не удалось заставить работать по i2c никакие GPIO кроме дефолтных (GPIO4, GPIO5). Конечно не принципиально, но пришлось разок перепаять схему.


Экранчик я решил не подключать, так как показания всегда можно посмотреть с мобильника или компьютера. Кроме того показания мониторятся с сервера (у меня дома свой сервер) и выводятся в MRTG.

Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост

Для мониторинга температуры выбрал SimpleDHT.h, потому что с ним не глючит, а со стандартным постоянно вместо температуры "nan". Кроме того оказалось, что по одному датчику температуры и по другому (один в DHT11, другой MP180) температура отличается на 3 градуса, при этом на настольном градуснике температура равна средненму от них обоих. Я не стал заморачиваться и считаю, что верная температура, та которая средняя. Для датчика давления использовал SFE_BMP180.h. Загазованность можно просто считывать с аналогового выгода, но зависимость показаний не линейная, поэтому сложно анализировать. Для того, чтобы упростить скетч я использовал MQ135.h. Главное, после того как установите MQ135, необходимо дать ему 24 часа поработать, чтобы прогреться. Затем нужно считать нулевые значения при помощи команды:


float rzero = gasSensor.getRZero();

Как получили нулевые значения, их нужно вписать в файл MQ135.h в переменную RZERO.


Далее, давайте рассмотрим веб-страничку, которую генерит погодная станция.

Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост

Если посмотреть код страницы, в самом низу можно увидеть скрытый код. Между скрытыми элементами <!start data> и <!stop data> находятся данные для сервера.

Еще одна погодная станция на ESP8266 Погодная станция, Esp8266, Arduio, Arduino-project, Arduino, Проект, Электроника, Радиоэлектроника, Длиннопост

Так проще обрабатывать.

На сервере (Linux) по крону запускается MRTG, которая стартует скрипт:


curl -s http://192.168.1.63 | sed -n '/<!start data><!/,/><!stop data>/p'|grep -v "data" > /tmp/ws.tmp
grep nvAvrIntTemp /tmp/ws.tmp -A1|tail -1
grep nvHmD1 /tmp/ws.tmp -A1|tail -1

Ну и по аналогии получаем остальные данные. То есть вместо nvAvrIntTemp может быть, например, nvMq1, тогда мы получим не среднюю температуру, а качество воздуха. Настройку MRTG я не буду расписывать, она совершенно стандартна, но если будет интересно, выложу, хотя там ничего замороченного нет.


Оригинал статьи со скетчем

Arduino & Pi

1.5K поста20.8K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу