Погода в доме или бюджетный мониторинг CO2, PM2.5, температуры и влажности на ESP32 и Blynk

hnp4pfmiw8pv7sci0kgmr8nda7s.jpeg По просьбах трудящихся в этой теме, решил сделать обзор-инструкцию, как можно сделать бюджетный измеритель CO2.

В данном обзоре я не буду описывать «пагубность» влияния CO2, а также низкой влажности на самочувствие и здоровье человека. Также, как и не буду доказывать, что без этого девайса не прожить. Об этом уже написаны тонны статей, как и споров в комментах. Я постараюсь лаконично описать создание максимально бюджетного устройства, но при этом измерительного устройства, а не показометра.

Также для максимальной простоты повторения, в обзоре выложу прошивку для ESP32 и проект Blynk.
Для создания нам понадобятся следующие комплектующие:

  • Датчик CO2 Senseair S8 — $27,9
  • Микроконтроллер с Wi-Fi ESP32 (модель 30 pin) — $3,2
  • Датчик температуры, влажности и давления BME280 — $1,85 (опционально)
  • Датчик загрязнённости воздуха PM2.5 PMSA003 — $14,9 (опционально)
  • Десяток коротких проводков, чтобы их соединить.


Ссылки на конкретных продавцов даны для примера, отбирал по количеству заказов, так как сам заказывал на Таобао.

Все датчики уже давно отлично себя зарекомендовали. Имеют очень хорошую точность, отличное соотношение цена/качество, и доставляют минимум проблем при настройке и эксплуатации. Тот же Senseair S8 используется в топовых бытовых приборах AirVisual Pro, которые по $300.

Сразу оговорюсь, что в данном случае не будет конечного устройства. Так как аппетит приходит во время еды, и захотелось ещё мониторить чистоту воздуха. Датчик же PM2.5 частиц только недавно приехал, и 3D-печатный корпус под это всё хозяйство буду проектировать попозже. Плюс хочу заказать у китайцев печатные платки, чтобы с проводами не возиться. Но корпус любой уже может сделать на своё усмотрение, главное помнить, что через корпус должен хорошо проходить воздух, и датчик температуры нужно держать подальше от всех остальных компонентов, так как они греются и могут завышать температуру.

Как я дошел до этого


DIY устройств на этих датчиках в интернете вагон и маленькая тележка. Но почему-то, в основном люди зациклены на создании, так сказать, Standalone-решений. Т.е. коробочка с датчиками и экраном, на который выводятся показания. Но я не в восторге от экранчиков от Nokia и всяких символьных 1604 и подобных, тем более хотелось бы видеть графики для анализа изменений. А хороший IPS экран, во-первых, будет стоить больше всех датчиков вместе взятых, во-вторых, может потребовать более мощного контроллера, в-третьих, потребует возни с нормальным интерфейсом (те же графики рисовать).

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

Blynk


Перед тем, как делать свой велосипед. Решил глянуть возможные готовые решения. Естественно есть различные сервисы для сбора данных Народный мониторинг, thingspeak и т.п. Но как-то они показались слишком громоздкими для моего случая. Различные системы «умных домов», которые умеют работать с датчики, тоже из пушки по воробьям.

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

Вот так выглядит проветривание 10 минут, в режиме откинутое окно (в районе 0 часов), потом CO2 довольно быстро поднимается, при том, что я сейчас один в квартире.

8dxswhvuvvugbfi1lhqt3i0edgg.jpeg

Вроде всё хорошо, CO2 быстро снизился до 410 ppm, но график PM2.5 увеличился в 2,5 раза, и температура упала на 2 градуса.

Увеличение PM2.5 при проветривании
wsyio2l2inl62r6zdo844qhpt24.jpeg

Цены


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

hnxapbzkrrvm1cv96glq30c9glw.jpeg

В моем случае используются следующие виджеты:

  • 5×400 Labeled Value
  • 1×300 Gauge
  • 3×900 SuperChart


Итого 5000 энергии. Бесплатно даётся 2000. Можно докупить недостающее. Энергия покупается однократно, и может использоваться бесконечно, а если вы удаляете какой-то виджет то энергия возвращается в полном объеме. И можно использовать повторно.

Также можно установить свой Blynk сервер. Либо есть альтернативные Blynk серверы почти без ограничения.

Ну и ещё вариант, заменив Labeled Value на Value Display можно сэкономить 1000, плюс убрать один или 2 графика. На одном графике можно выводить 4 показателя.

О датчиках


Датчики SenseAir S8 бывают нескольких сильно отличающихся модификаций. Для наших целей отлично подходит модификация 004–0–0053, и у себя использовал именно её. Обратите внимание, что S8 датчики есть для промышленного применения, с виду одинаковые, но на значительно большие диапазоны, к примеру модель 004–0–0024 измеряет от 400 до 32000 ppm (но при этом точность ±1000 ppm, у модели 0053 точность ±40 ppm), в домашних же условиях 400–800 ppm это хорошо, а больше 2000 ppm уже будет очень плохое самочувствие.

Обращаю внимание, что датчики температуры BME280 в виде готовых модулей, бывают на напряжение 3,3 В и на 5 В. В нашем случае нужен именно на 3,3 В.

Датчики пыли PM 2.5 бывают тоже несколько вариантов PMSA003-A (вход и выход воздуха с одной стороны) и PMSA003-C (вход и выход с противоположных сторон). Тут в принципе без особой разницы, зависит от того, как удобнее будет в корпусе. Также есть более старые поколения этого датчика PMS7003, PMS5003 (без дополнительных букв). Они также подойдут и должны работать с прошивкой без изменений, но они больше по размерам. Для датчика PMSA003 желательно купить переходник, так как там контактная площадка с шагом 1 мм, и подпаиваться проводами несколько напряжно.

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

Подключение


Схема подключения выглядит так.

8yccfp3cf1scfmvacifysqpv9u8.jpeg

Для тех кому привычнее буквы, а не картинки
BME280 (подключаем по I2C)
VCC →3V3
GBD → GND
SCL → D22
SDA → D21

S8
G+ → Vin
G0 → GND
UART_RxD → TX2
UART_TxD → RX2

PMSA003
(тут на некоторых переходниках есть обозначения, у меня нет, но порядок одинаковый)
VCC → Vin (1) (жирная дорожка на переходнике намекает на VCC)
GND → GND (2)
RxD → D35 (4)
TxD → D34 (5)


А так страшно выглядит это пока у меня вживую
8qzy6g9a52-xpe5opv-aaqfw7da.jpeg


Прошивка


Сначала хотел выкладывать это в виде скетчей для Arduino IDE. Но тогда придется ещё рассказывать, как пользоваться этим самым Arduino. Поэтому для увеличения уровня доступности решил сделать готовую прошивку и добавить WiFi менеджер.

При первой загрузке, или, когда не удаётся подключиться к сети, девайс переходит в режим точки доступа, и создаёт сеть вида esp32_eae234 (где после esp32 кусочек серийного номера чипа, т.е. он будет разный).

Вы на смартфоне открываете список сетей и подключаетесь к этой сети. После чего телефон скажет, что для подключения нужно открыть браузер (точно также как в различных WiFi сетях магазинов, кафешек и т.п.). В браузере открывается страничка, в которой можно из списка доступных сетей выбрать нужную, ввести пароль для неё, а также ввести Token для Blynk.

Проект для Blynk можно будет клонировать просто отсканировав QR-код. И в дальнейшем вы сможете либо использовать его в готовом виде, либо изменить его под себя.

Саму же прошивку с инструкциями по установке и исходники, опубликую попозже. Хотелось бы получить обратную связь по необходимым функциям, ну и несколько добровольцев «для опытов», чтобы можно было провести закрытое beta-тестирование, прежде, чем выкладывать в открытый доступ. Если будет востребовано, то могу и сайтик организовать, чтобы можно было обновления выкладывать.

Материалы по теме


esp32 — изучаем и попутно сравниваем датчики пыли
Четыре датчика CO2 в одном устройстве: сверяем показания.
Сравнение датчиков углекислого газа СО2
Как я чуть не выкинул 150к на ветер или история установки приточной вентиляции в квартире
А тут можно посмотреть внутренности разных измерителей качества воздуха

P.S.


Кстати, выяснилось, почему так увеличивался PM 2.5 при проветривании, оказывается в очередной раз что-то горит под Киевом. И сейчас Киев вошел в 10-ку городов мира с самым грязным воздухом. Причем почувствовал запах гари я значительно позже, чем начал показывать датчик. Так что тоже полезно, сигнализировать, что сейчас не время для проветриваний.

156 это показания в местных попугаях, а в PM 2.5 это 64 µg/m³.

59aky9wrc8jn7vhmm6us4p4gthu.jpeg

© Habrahabr.ru