IR-модуль¶
Плата может работать как ИК-приёмопередатчик — учить коды с любого пульта (TV, AC, audio, проектор) и потом эти коды отправлять как action в Задачах либо ловить как trigger.
Когда использовать¶
- Включать кондиционер по cron / по UDP-событию с другой платы.
- Реагировать на кнопку TV-пульта (например, «включить свет» когда нажали Mute).
- Отправлять команды любым устройствам с ИК-управлением — TV, audio, проекторы, вентиляторы, AC.
Hardware¶
Минимальный набор на плате:
| Что | Назначение | GPIO (default) |
|---|---|---|
| IR LED 940nm через NPN-транзистор + резистор | Передатчик | D2 / GPIO4 |
| TSOP1838 / VS1838B demodulator | Приёмник | D5 / GPIO14 |
Готовые модули KY-005 (TX) + KY-022 (RX) подключаются 3 dupont-проводами каждый, паять не надо. Подробная схема — в плагинах » архитектура и в README репозитория.
Build flag¶
IR не включён в дефолтной прошивке (нужна память под ring buffer). Включается отдельным env'ом:
Или добавить флаг в существующий env. После пересборки в /api/v1/system/info поле features.ir станет true, и UI покажет блок «ИК-модуль» в Settings.
Workflow «выучил и вставил»¶
- Открой Settings → ИК-модуль.
- Нажми 🎯 Считать код.
- Наведи пульт на TSOP-приёмник, нажми нужную кнопку в течение 10 сек.
- В поле появится строка вида
NEC:0x20DF10EF(илиRAW:t1,t2,...если протокол не распознан). - Кнопка 📋 Копировать → в clipboard.
Дальше используй в Задачах:
- Trigger «ИК-команда (приём)» —
code = NEC:0x20DF10EF→ таска срабатывает когда плата ловит этот код. - Action «ИК-команда (отправить)» —
code = NEC:0x20DF10EF→ плата шлёт burst на IR LED.
REST API (для headless / автоматизации)¶
POST /api/v1/ir/learn — blocking ≤10 сек, возвращает {"code":"NEC:0x..."} или 408 timeout.
POST /api/v1/ir/send — {"code":"NEC:0x..."} → отправляет burst. ~50-200ms blocking.
Полные рецепты в API cookbook.
Поддерживаемые протоколы¶
- NEC (TV/audio пульты большинства брендов) — декодируется в hex, короткая строка, ~14 символов.
- RAW timings — fallback для любых других протоколов (RC5, Sony, AC-пульты). Длинная строка timings — фит'ится в trigger/action поле размером 48 байт только для коротких raw'ов (≤10 timings).
Для длинных AC-bursts (200+ timings) — текущий MVP не подходит, нужно расширение в follow-up.
Heap-стоимость¶
На ESP8266 IR-driver статически занимает ~768 B DRAM (ring buffer + state). Без подключённого приёмника (floating pin) есть риск constant-noise capture'ов → heap-фрагментация. Поэтому в коде есть MIN_BURST_TIMINGS = 20 — burst'ы меньше отбрасываются как шум, реальные NEC (67 timings) и AC (100+) проходят.
Ограничения текущего MVP¶
- TX/RX пины hardcoded D2/D5. Configurable будет в Phase 3.6.
- IR_CODE_MAX = 48 символов — длинные RAW коды (AC) не помещаются в trigger/action data.
- Только NEC decoder в коробке. RC5/Sony/Samsung — пока через RAW fallback.
- Trigger matching строго по строке — fuzzy raw match (для шумных AC) deferred.
Связано¶
- Плагины » index — таблица всех модулей с build flags.
- API cookbook — curl-примеры learn/send.
- Settings page — UI блок IR-модуля.