Чому важливий моніторинг якості повітря
Зазначимо: коли в офісі рівень CO2 перевищує 1500 ppm, концентрація співробітників падає приблизно на 30% — це не теорія, а результати досліджень Гарвардської школи громадського здоров'я. Крім того, підвищений вміст PM2.5 та VOC може викликати головні болі та зниження продуктивності. Ми стикалися з проєктом, де в серверній кімнаті через погану вентиляцію виходили з ладу SSD-накопичувачі — температура та вологість теж відіграють роль. Без моніторингу ви помічаєте проблему лише за суб'єктивними відчуттями. Ми розробляємо мобільний IoT-додаток, який підключається до датчиків Sensirion SEN55 або Bosch BME688 на ESP32, передає дані по MQTT та відображає в реальному часі на смартфоні з кольоровою індикацією та налаштовуваними сповіщеннями. Все — від прошивки датчика до App Store та Google Play.
Як наш IoT-додаток вирішує задачу моніторингу повітря
Ми будуємо платформу, яка поєднує точні датчики, надійну прошивку та зручний мобільний клієнт. Кожен компонент оптимізовано під умови експлуатації в офісах, складах або житлових приміщеннях.
Як датчик SEN55 передає дані на телефон?
SEN55 вимірює PM1.0, PM2.5, PM4, PM10, VOC, NOx, температуру та вологість по інтерфейсу I²C. ESP32 зчитує дані кожні 30 секунд, упаковує в JSON та відправляє через MQTT на брокер (наприклад, Mosquitto). Серверний API зберігає показники в базу InfluxDB та розсилає push-сповіщення через FCM. Додаток підписується на MQTT-топік для реального часу або опитує REST API.
Код на сервері отримує сирі дані, застосовує формули конвертації від Sensirion, обчислює AQI:
AirQualityLevel classifyPm25(double ugm3) { if (ugm3 <= 12.0) return AirQualityLevel.good; if (ugm3 <= 35.4) return AirQualityLevel.moderate; if (ugm3 <= 55.4) return AirQualityLevel.sensitiveGroups; if (ugm3 <= 150.4) return AirQualityLevel.unhealthy; if (ugm3 <= 250.4) return AirQualityLevel.veryUnhealthy; return AirQualityLevel.hazardous; } Дашборд в додатку: кругові індикатори (gauge) кожного параметра з кольоровим кодуванням та міні-трендом за останню годину. CO2 > 1000 ppm — рекомендація провітрити, PM2.5 > 35 — увімкнути очищувач.
Що таке IAQ і чому він важливий?
Bosch BME688 з бібліотекою Bsec видає IAQ індекс 0–500. Чим вище, тим гірше. На відміну від сирих значень, IAQ враховує комбінацію газів та компенсує температуру і вологість. Це зручно для швидкої оцінки: один зелено-жовто-червоний індикатор замість п'яти.
Вибір датчиків і протоколів
SEN55 забезпечує точність PM2.5 ±10%, що в 1.5 рази краще, ніж у Plantower PMS5003 (±15%). Порівняємо популярні датчики:
| Датчик | Вимірювані параметри | Інтерфейс | Точність PM2.5 | Цінова категорія |
|---|---|---|---|---|
| Sensirion SEN55 | PM1.0,2.5,4,10, VOC, NOx, T, Rh | I²C/UART | ±10% | Середня |
| Bosch BME688 | VOC, NOx, T, Rh, IAQ | I²C/SPI | — | Низька |
| Plantower PMS5003 | PM1.0,2.5,10 | UART | ±15% | Середня |
SEN55 — найкращий вибір для PM, BME688 — для комплексної оцінки повітря з меншим бюджетом.
Автокалібрування датчиків: як це працює
SEN55 та BME688 мають вбудоване автокалібрування, яке компенсує дрейф датчиків з часом. Рекомендується проводити початкове калібрування на свіжому повітрі.Прошивка ESP32
Пишемо на C++ з бібліотекою SensirionI2CSen5x або Bsec. Після ініціалізації I²C кожні 30 секунд вимірюємо, формуємо JSON, публікуємо в MQTT:
#include <Sen5x.h> Sen5x sensor; void setup() { sensor.begin(Wire); sensor.startMeasurement(); } void loop() { auto data = sensor.readMeasuredValues(); char buffer[256]; sprintf(buffer, "{\"pm2.5\":%.1f,\"voc\":%d}", data.massConcentrationPm2p5, data.vocIndex); client.publish("air/office", buffer); delay(30000); } Для стабільності використовуємо watchdog та queue в разі втрати зв'язку.
Серверна частина та зберігання
Дані надходять до MQTT-брокера, потім підписник зберігає в InfluxDB. Історія агрегується по 15-хвилинках для графіків в додатку. Для push-сповіщень використовуємо Firebase Cloud Messaging. Локальний кеш останніх значень (SharedPreferences) усуває порожній екран при запуску.
Мобільний додаток
Використовуємо Flutter для кроссплатформенності: один код під iOS та Android. Стек: Dio для HTTP, MQTT Client для підписки, fl_chart для графіків, flutter_local_notifications для алертів. Користувач налаштовує пороги: CO2 > 1000 ppm або PM2.5 > 35 мкг/м³ — сповіщення на телефон.
Що входить в роботу: deliverables
Кожен проєкт включає повний цикл розробки та документацію:
- Прошивка для датчика (ESP32/Arduino) з конфігурацією MQTT та автокалібруванням.
- Серверний API (Node.js або Go) на вашій інфраструктурі або в хмарі, включаючи парсинг даних.
- Мобільний додаток (Flutter) з дашбордом, історією та push-сповіщеннями.
- Документація з розгортання та експлуатації (схеми, конфіги, інструкції).
- Інтеграція з App Store та Google Play (включаючи сертифікати та provisioning profiles).
- Місяць безкоштовної підтримки після запуску.
Процес роботи: покроково
- Аналіз вимог та вибір датчиків (1 день).
- Прошивка ESP32 з налаштуванням MQTT та watchdog (3-5 днів).
- Розробка серверної частини: API, InfluxDB, FCM (3-5 днів).
- Мобільний додаток на Flutter з дашбордом та сповіщеннями (5-7 днів).
- Інтеграційне тестування та деплой (2-3 дні).
Строки розробки
Розробка під ключ — від 2 до 3 тижнів. Строки уточнюємо після аналізу ваших датчиків та вимог до дизайну. Нижче приблизна тривалість етапів:
| Етап | Тривалість |
|---|---|
| Аналіз вимог | 1 день |
| Прошивка ESP32 | 3-5 днів |
| Серверна частина | 3-5 днів |
| Мобільний додаток | 5-7 днів |
| Тестування та деплой | 2-3 дні |
У нас за плечима 20+ IoT-проєктів, включаючи системи моніторингу для офісів та складів. Команда з трьох інженерів з досвідом від 5 років. Ми гарантуємо стабільну роботу завдяки код-рев'ю та навантажувальному тестуванню. Замовте попередню оцінку вашого проєкту — ми підберемо оптимальний стек. Зв'яжіться з нами для старту розробки.







