Перейти к содержанию

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:ir-module]
build_flags =
    -D IR_ENABLED=1

Или добавить флаг в существующий env. После пересборки в /api/v1/system/info поле features.ir станет true, и UI покажет блок «ИК-модуль» в Settings.

Workflow «выучил и вставил»

  1. Открой Settings → ИК-модуль.
  2. Нажми 🎯 Считать код.
  3. Наведи пульт на TSOP-приёмник, нажми нужную кнопку в течение 10 сек.
  4. В поле появится строка вида NEC:0x20DF10EF (или RAW:t1,t2,... если протокол не распознан).
  5. Кнопка 📋 Копировать → в 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.

Связано