Roshni: контроллер для управления адресуемыми светодиодами на Teensy 4.1

ИТ

Roshni: контроллер LED, когда стандартных решений недостаточно

Когда вы собираете амбилайт для домашнего кинотеатра, управляете декоративной подсветкой в нескольких комнатах или работаете со светодиодными инсталляциями в коммерческих проектах, возникает проблема, которую потребительские контроллеры не решают: управление двумя независимыми LED-системами с одной платы, прием данных из нескольких источников без перепрошивки, и все это со стабильностью, о которой можно забыть.

Вот что делает Roshni.

Roshni — это production-готовый контроллер светодиодов, построенный на Teensy 4.1 (ARM Cortex-M7 на 600 МГц). Он позволяет управлять двумя независимыми светодиодными лентами одновременно, каждая с собственным типом микросхемы, настройками цвета и питанием. Контроллер принимает данные из трех источников в порядке приоритета: TPM2 по USB, UDP Raw по Ethernet или встроенные эффекты. Каждая функция доступна через REST API, поэтому Roshni интегрируется в Home Assistant, Node-RED или любую другую систему, которую вы используете.

Он разработан для людей, которые посмотрели на WLED, QuinLED или различные коммерческие наборы для амбилайта и подумали: «Мне нужна гибкость, и я готов потратить время, чтобы сделать это правильно».

Что отличает Roshni

Большинство контроллеров LED заставляют выбирать: либо вы управляете одной лентой с одним протоколом, либо собираете что-то сами и потом это поддерживаете. Roshni вмещает весь стек в одну прошивку, которую вы прошиваете один раз и настраиваете через браузер.

Два независимых выхода

Вы можете управлять двумя совершенно разными светодиодными системами с одной платы.

Выход 0 управляет лентами APA102 или SK9822 (до 600 светодиодов) по SPI с отдельными линиями данных и тактирования. Они работают быстро, хорошо переносят длинные кабели и подходят для применений, где нужна высокая частота обновления или большие расстояния между контроллером и лентой.

Выход 1 управляет лентами WS2812B или SK6812 (до 574 светодиодов) по одному GPIO пину. Дешевле за светодиод, чем APA102, но требует точных импульсов и лучше подходит для коротких расстояний.

Вы не ограничены независимой работой. Можно:

  • Зеркалировать оба выхода на одни данные (двойная лента амбилайта удваивает яркость)
  • Зеркалировать с разворотом (ленты смотрят в разные стороны)
  • Объединить в один логический дисплей на 1200 светодиодов
  • Запустить их полностью независимо с разными источниками данных и эффектами

Каждый выход имеет независимые настройки: тип микросхемы, порядок цветов (RGB, GRB, BGR и т.д.), яркость, гамма-коррекция и направление. Если у вас две партии светодиодов с немного разной цветопередачей, Roshni это обработает автоматически.

Три источника данных с приоритизацией

Большинство LED-контроллеров слушают один протокол. Roshni слушает три одновременно и автоматически переключается по приоритету.

  • TPM2 по USB — стандартный протокол HyperHDR. Подключите USB-кабель от ПК или телевизора, и Roshni получит 50–60 FPS амбилайт-данных сразу же. Используйте это, если захватываете видео с исходного устройства.
  • UDP Raw на порту 5568 — вариант по Ethernet, предпочтителен при стабильном доступе в сеть. HyperHDR, WLED и другие контроллеры говорят на UDP Raw нативно. Как только приходит UDP-пакет, он берет управление из любого активного встроенного эффекта.
  • Веб-интерфейс / встроенные эффекты — когда нет внешних данных, можно запустить встроенные эффекты: FULL (все светодиоды белые), Fire, Breathing, Plasma, Cylon, Matrix, Rainbow, Solid (однотонный), Strobe или Random. Плюс палитра и ввод hex-кода.
  • Модель приоритета простая: приходят TPM2-данные, они становятся активными. TPM2 прекращается, UDP Raw берет управление. Оба источника молчат, возобновляются встроенные эффекты. Вам никогда не нужно перепрошивать или перестраивать систему. Просто начните отправлять данные, и Roshni переключится сам.

    Оборудование: Teensy 4.1 + официальный Ethernet Kit

    Teensy 4.1 — это ARM Cortex-M7 на 600 МГц с 1 МБ ОЗУ и 8 МБ флэша. Примерно в 2.5 раза быстрее, чем платы на ESP32, которые используют большинство LED-контроллеров.

    Это означает:

    • Реал-тайм производительность без потери кадров
    • Достаточно CPU для диагностики и мониторинга при отправке пиксельных данных
    • Аппаратный Ethernet через официальный PJRC Ethernet Kit (без помех Wi-Fi)
    • Несколько каналов DMA для параллельной передачи данных
    • Стабильная температура (68–69 °C в устойчивом состоянии)

    Рекомендуемая сборка использует промышленный металлический корпус IP66 с внешними 5 В блоками питания (2× 20 А или 3× 30 А в зависимости от плотности LED и выбора цветов), отдельную защиту на каждый выход и опциональную гальваническую развязку между зонами. Включены схемы и таблицы распиновки CAT5.

    Реальные показатели производительности

    Это данные из production-инсталляции автора: rooted LG C9 OLED с HyperHDR, захватывающий 574 WS2812B светодиода по TPM2.

    • 50 FPS (синхронизирован с частотой видео)
    • 68875 кадров обработано за 2138 секунд работы
    • 0 ошибок
    • 100% успешных кадров
    • ~1 мс задержки на кадр TPM2
    • ~9800 Гц частота основного цикла под нагрузкой потока
    • 68–69 °C температура CPU

    Встроенный тест производительности измеряет до 1000 FPS в loopback-тесте (тестирование выходного драйвера без внешних данных). Это валидирует пиксельный конвейер в идеальных условиях.

    Термика (важно для больших инсталляций)

    Если вы управляете 1000+ адресуемыми светодиодами, тепловой менеджмент — не опция. Это разница между стабильной 5-летней инсталляцией и преждевременной деградацией LED.

    Один светодиод APA102 потребляет примерно 60 мА при полной белизне (20 мА на каждый RGB-канал), рассеивая около 0.3 Вт. На полосе из 574 светодиодов с плотностью 60 пикс/метр (9.57 метров), это 172 Вт электрической мощности в пике, из чего около 130 Вт становится теплом в самой ленте.

    На голой flex-PCB при 13.5 Вт/метр постоянного тока температура поверхности достигает 70–90 °C. Это разрушает 3M-клей за месяцы и ускоряет старение люминофора. Стандартные способы защиты:

  • Установка на алюминиевый профиль. Снижает температуру на 20–30 °C. Необходимо при такой плотности.
  • Ограничение глобальной яркости. Реальный амбилайт редко нуждается в 100% белизне. Ограничение на 80% снижает пиковое тепло примерно на 20% без видимой разницы для большинства контента.
  • Снизить бюджет тока. Планируемый блок питания 3× 30 А оставляет примерно 30% запаса. На практике вы вряд ли превысите 40–50% постоянного потребления.
  • Для текущей сборки 2× 20 А (574 WS2812B), тепловая нагрузка остается в безопасных пределах на алюминиевом профиле с удобным запасом.

    Типовые сценарии (13 реальных конфигураций)

    Roshni работает лучше всего, когда вы думаете о том, какие данные входят и куда они выходят. Вот 13 реальных конфигураций, которые люди используют:

    | Конфигурация | Входные данные | Выходы | Когда использовать |

    |—|—|—|—|

    | Полная независимость | 2 разных потока | 2 разных выхода | Амбилайт ТВ (выход 0) + подсветка кухни (выход 1). Одна плата заменяет два контроллера. |

    | Линейное объединение | 1 поток | Оба выхода подряд | Одна длинная лента превышает лимит 600 LED одного выхода. 1000+ светодиодов в ряд. |

    | Зеркалирование | 1 поток | Оба выхода (одни данные) | Двойная полоса амбилайта. Ленты смотрят в одну сторону, яркость удваивается без роста частоты обновления. |

    | Зеркало с разворотом | 1 поток | Выход 0 прямо, выход 1 развернут | Симметричные инсталляции. Ленты по бокам ТВ или окна, каждая получает свое зеркало данных. |

    | Разные типы микросхем | 1 поток | APA102 (выход 0) + WS2812B (выход 1) | Разные компромиссы производительность/цена в разных зонах. APA102 в зоне камеры (без мерцания), WS2812B в декоративных зонах. |

    | Разные источники, разные зоны | 2 разных потока | 2 выхода, разные микросхемы | Профессиональная инсталляция. Выход 0 получает амбилайт из одной системы, выход 1 из другой. |

    | Гальваническая развязка | Любые | Выходы на разных фазах/автоматах | Коммерческие проекты, требующие соответствия электрокодексу или большого потребления тока. |

    | Прототип + production | Любые | Выход 0 (тест), выход 1 (боевая) | Разработка и отладка без прерывания боевой инсталляции. |

    | Резервирование | 1 поток | Оба выхода (идентичные) | Одна лента резервирует другую. Если одна выходит из строя, вторая показывает контент. |

    | Debug-оверлей | 1 поток | Выход 1 (контент) + выход 0 (диагностика) | Живая отладка. Выход 0 показывает графики FPS или тепловую карту ошибок, выход 1 показывает обычный контент. |

    | Масштабирование за лимит одного выхода | 1 поток | Оба выхода объединены | Превышен лимит по длине кабеля или по току одного выхода. Раздел на две системы питания и распределения. |

    | Распределение мощности | Любые | 2 выхода (выбор по мощности) | Выше 40 А один блок питания становится непрактичным. Раздел естественно дает две независимые электрические области. |

    | Зонирование по времени | Любые | Выход 0 (день), выход 1 (вечер) | Расписание для разных зон в разное время. Управление из Home Assistant или cron. |

    Большинство пользователей начинают с зеркалирования (двойная полоса амбилайта) или полной независимости (отдельные зоны). Вы скоро обнаружите, что матрица гибкости полезна способами, которые вы не планировали.

    Сеть и веб-интерфейс

    Roshni раздает полную панель управления прямо из контроллера. Никакого отдельного приложения, никаких облачных зависимостей. Откройте браузер на http:/// и вы получите три панели.

    LED-конфигурация — выберите тип микросхемы, количество светодиодов, порядок цветов, яркость и смещение на каждый выход. Настройки сохраняются в EEPROM.

    Управление и эффекты — вкл/выкл светодиодов, выбор из 10 встроенных эффектов (FULL, Fire, Breathing, Plasma, Cylon, Matrix, Rainbow, Solid, Strobe, Random), выбор цвета из палитры или ввод hex-кода. Мониторинг телеметрии: FPS, количество кадров, процент ошибок, время работы, температура CPU.

    Управление — загрузчик OTA-обновления прошивки, логи EEPROM (если включены), кнопки прямого доступа к API, тест производительности.

    Каждое действие в UI отображается на REST-endpoint. Вам не нужен UI для Home Assistant, Node-RED или пользовательских дашбордов. Просто делайте HTTP-запросы:

    GET /api/mode?name=fire          # Включить эффект Fire
    GET /api/power?on=1               # Включить питание светодиодов
    GET /api/solid?color=FF0000       # Однотонный красный
    GET /api/led?chipset=apa102       # Переключиться на APA102
    POST /ota -F file=firmware.hex    # OTA-обновление

    Полный API reference включает все endpoints, параметры и схемы ответов.

    Архитектура: матрица входов × выходов

    Реальная мощь Roshni в том, как входы и выходы развязаны друг от друга. Вы выбираете независимо.

    Что входит: TPM2 (USB), UDP Raw (Ethernet), встроенные эффекты или ничего.

    Сколько источников: до трех одновременно (преимущество по приоритету).

    Что выходит: APA102 (быстрый SPI, до 600 LED), WS2812B (дешевле, одна линия, до 574 LED), или любой тип микросхемы в FastLED.

    Как маршрутизируется: независимые срезы буфера на 1200 LED, зеркалирование, объединение, разворот или комбинация.

    Настройки на выход: тип микросхемы, порядок цветов, яркость, гамма, направление, смещение.

    Эта гибкость позволяет Roshni работать и с простыми сборками (вставь, настрой, забудь) и со сложными (арт-инсталляции, коммерческие проекты, многокомнатные сценарии). Вы покупаете одну плату и она адаптируется к вашим потребностям, а не наоборот.

    Быстрый старт (5 минут)

  • Прошейте прошивку — загрузите последний .hex из Releases и используйте Teensy Loader, или OTA-обновление, если у вас уже есть рабочая версия.
  • Подключите Ethernet — вставьте кабель. Roshni запросит DHCP при загрузке и выведет IP по серийному порту.
  • Откройте веб-интерфейс — перейдите на http:/// в браузер.
  • Настройте свою полоску — выберите тип микросхемы (APA102 или WS2812B), количество светодиодов, порядок цветов (RGB/GRB/и т.д.) и яркость. Нажмите Apply. Настройки сохранятся.
  • Укажите ваш источник данных:
    • По Ethernet: HyperHDR → Add LED Device → udpraw:5568
    • По USB: HyperHDR → Add LED Device → tpm2 → серийный порт, baudrate 2000000

    Все. Эффекты из веб-интерфейса будут автоматически вытеснены, когда придут внешние данные.

    OTA-обновления и диагностика

    Обновления прошивки идут по HTTP. Никакого Teensy Loader, никакого USB после первоначальной установки. Загрузите новый .hex файл через панель OTA-обновления в веб-интерфейсе.

    Встроенная диагностика:

    • Performance Test — запуск loopback-теста на пинах 20/23, измерение реального распространения пиксельных данных и обнаружения ошибок до 1000 FPS
    • Continuous Test — мультимодовой диагностический цикл для стресс-тестирования
    • Boot Logs — сохранение событий загрузки в EEPROM (опционально, отключено в MEM-OPT для экономии памяти)
    • Live Status — реал-тайм FPS, количество кадров, процент ошибок, успешность, время работы, Гц цикла, температура CPU

    Примеры интеграции

    Home Assistant

    Для домашней автоматизации Roshni интегрируется как простое REST-устройство. Определите команды в configuration.yaml:

    rest_command:
    leds_fire:
    url: "http://10.0.1.59/api/mode?name=fire"
    leds_off:
    url: "http://10.0.1.59/api/power?on=0"
    leds_solid_red:
    url: "http://10.0.1.59/api/solid?color=FF0000"

    Затем создавайте автоматизации или скрипты, которые их вызывают. Подробнее в нашем [гайде по настройке Home Assistant](/articles/it/smart-home-setup/).

    Node-RED

    Простой HTTP request node на http:///api/mode?name= дает вам полный контроль внутри своего flow. Комбинируйте с MQTT, вебхуками или времени-основанными триггерами. Этот подход хорошо работает с другими стратегиями оркестровки домашней автоматизации из нашего [гайда по DIY IoT](/articles/it/diy-iot-automation/).

    HyperHDR (Ambilight)

    Roshni — это полноценное HyperHDR-устройство. Добавьте его как udpraw по Ethernet (рекомендуется, низкая задержка) или tpm2 по USB. Автор запускает HyperHDR прямо на rooted LG C9 OLED, захватывая видео-конвейер ТВ и отправляя TPM2 в Roshni без внешнего оборудования. Это самый низкозадержный подход для ТВ-амбилайта.

    Известные ограничения и компромиссы

    • WS2812B критичен к импульсам. Расстояния свыше 2 метров требуют аккуратной терминации линии. Используйте CAT5 с правильной дифференциальной терминацией близко к ленте.
    • APA102 быстрее, но дороже. Примерно 50–70¢ за светодиод против 10–15¢ для WS2812B.
    • Лимиты на выход: APA102 до 600 LED, WS2812B до 574 LED. Для больших полос объедините выходы или используйте второй контроллер.
    • Teensy 4.1 не имеет Wi-Fi. Планируемый ESP32 Wi-Fi bridge решит это (пункт roadmap).

    Roadmap

    Долгосрочное видение Roshni — стать платформой здоровья и обслуживания для больших адресуемых LED-инсталляций, а не просто контроллером отправки пиксельных данных.

    Ближайшие:

    • ESP32 Wi-Fi bridge (сопроцессор для инсталляций без Ethernet)
    • Основы телеметрии (RAM/PSRAM/SD time-series с Prometheus, InfluxDB, MQTT, JSON)
    • Непрерывный мониторинг целостности сигнала (расширение 1000 FPS loopback в production watchdog)
    • Тепловой мониторинг (I²C датчики температуры по ленте, зонная коррекция яркости)
    • Автоматическая защита линии (управляемое отключение per-output 5 В релеем)

    Среднесрочные:

    • Мониторинг деградации пиксель-за-пикселем (энергетические аккумуляторы, проекция L70 в стиле IES TM-21)
    • Anti burn-in рутины (пиксельный сдвиг, расписания освежения, восстановление залипших пикселей из OLED playbook)
    • Алертинг (webhook, MQTT, Telegram, Home Assistant с debouncing)
    • Installation-specific модели деградации
    • Home Assistant HACS интеграция (нативные entities, не REST-обертки)

    Долгосрочные:

    • Расширение протоколов (E1.31/sACN, Art-Net, DDP, WLED JSON, OSC, MQTT pixel frames)
    • Примитивы для арт-инсталляций (зоны, сцены, расписания, переходы, GPIO триггеры, SD воспроизведение)
    • mDNS/Bonjour zero-config discovery

    Полные технические спецификации для каждого пункта roadmap есть в документации проекта.

    Сборка из исходного кода

    git clone https://github.com/razqqm/Teensy.git
    cd Teensy/LED
    pio run -e teensy41                 # компиляция
    pio run -e teensy41 -t upload       # прошивка
    pio device monitor                  # просмотр логов

    Требуется PlatformIO + board-definition для Teensy 4.1. Arduino IDE сборки тоже работают.

    FAQ

    В: Почему Teensy 4.1, а не ESP32?

    О: Teensy 4.1 — это 600 МГц Cortex-M7 с real-time гарантиями и без Wi-Fi стека, конкурирующего за прерывания. ESP32 примерно в 2.5 раза медленнее и документально имеет потолок по частоте кадров на инсталляциях среднего размера. Архитектура Roshni использует headroom производительности Teensy для диагностики, OTA обновлений и веб-хостинга без ущерба пиксельной пропускной способности.

    В: Могу ли я использовать кастомные эффекты кроме встроенных?

    О: Прошивка open-source и построена на PlatformIO. Вы можете изменить src/effects.cpp и добавить новые эффекты. Смотрите существующие Plasma, Fire, Matrix как шаблоны, потом перекомпилируйте. OTA делает развертывание мгновенным.

    В: Минимальное количество светодиодов?

    О: Один пиксель на выход. Roshni отлично работает с 10 светодиодами, если это ваш случай. Архитектура масштабируется от одного пикселя до 1200 LED.

    В: Как обеспечить гальваническую развязку для коммерческих инсталляций?

    О: Каждый БП независимый со своим автоматом и предохранителем. Вы можете подвести выходы к разным входам сети, если электрокодекс требует развязки. Сам контроллер развязан от LED блоков питания. /api/power?on=0 деэнергизирует ленты через внешний контактор без потери сетевого соединения.

    В: Работает ли с WLED или другими LED-контроллерами?

    О: Roshni говорит на HyperHDR протоколах (TPM2, UDP Raw). WLED и другие контроллеры могут отправлять в Roshni как в стандартное HyperHDR устройство. Обратное (Roshni отправляет в другие устройства) не поддерживается.

    В: Какова задержка от входа до изменения пикселя?

    О: Примерно 1 мс для полного цикла TPM2-кадра (получение, обработка, выход). При нормальном видеовоспроизведении на 50 FPS это незаметно.

    Готовы собирать?

    Roshni лицензирован под MIT и свободен для использования, изменения и распространения. Полный исходный код, схемы, таблицы распиновки CAT5 и детальный API reference на [GitHub](https://github.com/razqqm/Teensy).

    Если вы собираете амбилайт, управляете multi-zone LED инсталляциями или работаете со светодиодами в коммерческом контексте, Roshni дает вам контроль и стабильность, которые нет в стандартных решениях.

    Загрузите последний release прошивки, прошейте в Teensy 4.1, подключите Ethernet кабель, и у вас будет production-готовый LED-контроллер за 5 минут.

    Для вопросов, вклада и обсуждений проект открыт для issues и pull request. Документация включает глубокие дайв-даун в архитектуру, тепловые расчеты и примеры интеграции со всем: от Home Assistant до Node-RED.

    *Roshni (रोशनी) означает свет, сияние и освещение на хинди и урду. Подходящее имя для проекта, построенного надежно отправлять фотоны в мир.*

    Schema.org Markup

    {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
    {
    "@type": "Question",
    "name": "Почему Teensy 4.1, а не ESP32?",
    "acceptedAnswer": {
    "@type": "Answer",
    "text": "Teensy 4.1 — это 600 МГц Cortex-M7 с real-time гарантиями и без Wi-Fi стека, конкурирующего за прерывания. ESP32 примерно в 2.5 раза медленнее и документально имеет потолок по частоте кадров на инсталляциях среднего размера."
    }
    },
    {
    "@type": "Question",
    "name": "Могу ли я использовать кастомные эффекты?",
    "acceptedAnswer": {
    "@type": "Answer",
    "text": "Прошивка open-source и построена на PlatformIO. Вы можете изменить src/effects.cpp и добавить новые эффекты. Смотрите существующие как шаблоны, потом перекомпилируйте."
    }
    },
    {
    "@type": "Question",
    "name": "Минимальное количество светодиодов?",
    "acceptedAnswer": {
    "@type": "Answer",
    "text": "Один пиксель на выход. Roshni отлично работает с 10 светодиодами. Архитектура масштабируется от одного пикселя до 1200 LED."
    }
    },
    {
    "@type": "Question",
    "name": "Как обеспечить гальваническую развязку?",
    "acceptedAnswer": {
    "@type": "Answer",
    "text": "Каждый БП независимый со своим автоматом. Вы можете подвести выходы к разным входам сети. Контроллер развязан от LED блоков питания."
    }
    },
    {
    "@type": "Question",
    "name": "Работает ли с WLED?",
    "acceptedAnswer": {
    "@type": "Answer",
    "text": "Roshni говорит на HyperHDR протоколах (TPM2, UDP Raw). WLED может отправлять в Roshni как в стандартное HyperHDR устройство."
    }
    },
    {
    "@type": "Question",
    "name": "Какова задержка?",
    "acceptedAnswer": {
    "@type": "Answer",
    "text": "Примерно 1 мс для полного цикла TPM2-кадра. При видеовоспроизведении на 50 FPS это незаметно."
    }
    }
    ]
    }

    Read in English: Roshni LED Controller: Dual-Output Teensy 4.1

    Оцените статью