Проект · Умная комната · Безопасность
Одна панель, которая следит за всей комнатой
Четыре дешёвые детали закрывают комнату полностью: DHT22 — климат, PIR — движение, MQ-2 — газ и дым, 2-канальное реле — свет и вентилятор. Один ESP32 связывает их в панель безопасности с цепочкой тревоги — бейдж, зуммер, журнал, авто-проветривание — и всё это управляется с дашборда, который чип отдаёт сам.
Детали и их причуды
| Деталь | Роль | Что знать |
|---|---|---|
| DHT22 | температура + влажность | одно чтение в 2 с, однопроводный протокол |
| PIR (HC-SR501) | движение | держит выход окно ретриггера — так и трактуйте |
| MQ-2 | газ / дым | нужен прогрев и калибровка на экземпляр |
| Реле 2ch | свет + вентилятор | опто-платы хотят 5 В; проверьте полярность IN |
| Зуммер | локальная тревога | активному достаточно GPIO high |
Цепочка тревоги — приоритеты, а не спагетти
У панели один статус, и газ всегда побеждает: GAS! > Motion > All clear. Газ включает зуммер, принудительно запускает вентилятор на проветривание и пишет событие; движение просто переключает бейдж и логируется. Вся логика приоритетов — пять строк:
// Alarm chain: gas beats motion; the buzzer follows the gas state, fan auto-vents.
bool gasBad = gas > 350; // real: calibrate to your MQ-2
if (gasBad && roomState != 2 && evlog) evlog->print("GAS/SMOKE - venting");
roomState = gasBad ? 2 : (motion ? 1 : 0);
alarmOut = gasBad;
if (gasBad) fan = true; // auto-vent on gas
// PIR: the module holds its output ~3 s per trigger — treat it as a window.
motion = millis() < motionUntil; Дашборд
Две страницы: Room (показания + статус + журнал) и Control (свет, вентилятор,
тревога). Пресеты dht22 и mq2 сами выбирают виджеты и диапазоны:
dash.layout("Room", RICON_HOME);
dash.sensor("dht22", &temp, &hum); // temp gauge + humidity metric
dash.sensor("mq2", &gas); // smoke/LPG gauge with the right range
dash.badge("Status", &roomState).labels("All clear", "Motion", "GAS!");
dash.led("Motion", &motion); // PIR state, live
evlog = &dash.log("Events", 6);
dash.layout("Control", RICON_BULB);
dash.toggle("Light", &light); // relay channel 1
dash.toggle("Fan", &fan); // relay channel 2
dash.led("Alarm", &alarmOut); // buzzer output
dash.beginAP("RisalDash-Room", "12345678"); Пример из библиотеки (examples/04_Templates/RoomMonitor) работает без железа — фейковый MQ-2 изредка «чует дым», PIR срабатывает случайно, и вся цепочка видна: бейдж → зуммер → журнал → вентилятор. Потом подключаете реальные детали и убираете фейки. Каждый виджет — ещё и MCP-tool: ИИ-агент спросит «есть кто в комнате?» или включит вентилятор — это паттерн ИИ-агента.
Смежные сборки
Нужна только охрана? Шаблон MotionSecurity добавляет зоны и постановку на охрану. Только газ? GasSafety — MQ-2 + MQ-7 с трип-индикаторами. Вся квартира? SmartHome масштабирует тот же паттерн до сцен и комнат — эта панель и есть их выжимка для одной комнаты.
Посмотрите, как сработает тревога, на фейках сегодня — комнату подключите в выходные.