Почему важен мониторинг качества воздуха
Отметим: когда в офисе уровень 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 лет. Мы гарантируем стабильную работу благодаря код-ревью и нагрузочному тестированию. Закажите предварительную оценку вашего проекта — мы подберём оптимальный стек. Свяжитесь с нами для старта разработки.







