ИТ

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

Когда вы собираете амбилайт для домашнего кинотеатра, управляете декоративной подсветкой в нескольких комнатах или работаете со светодиодными инсталляциями в коммерческих проектах, возникает проблема, которую потребительские контроллеры не решают: управление двумя независимыми 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, его основные возможности, реальные показатели производительности и сценарии применения. Вы узнаете, как он справляется с независимыми выходами, приоритизацией источников данных и интеграцией с Home Assistant, Node-RED и HyperHDR. Мы также рассмотрим тепловой менеджмент для больших инсталляций, пройдем быстрый старт за 5 минут и ответим на часто задаваемые вопросы.

Оглавление
Что отличает Roshni
Два независимых выхода
Три источника данных с приоритизацией
Оборудование: Teensy 4.1 + официальный Ethernet Kit
Реальные показатели производительности
Термика (важно для больших инсталляций)
Типовые сценарии (13 реальных конфигураций)
Сеть и веб-интерфейс
Архитектура: матрица входов × выходов
Быстрый старт (5 минут)
OTA-обновления и диагностика
Примеры интеграции
Известные ограничения и компромиссы
Roadmap
Сборка из исходного кода
FAQ
Содержание
  1. Roshni: контроллер LED, когда стандартных решений недостаточно
  2. Что отличает Roshni
  3. Два независимых выхода
  4. Три источника данных с приоритизацией
  5. Оборудование: Teensy 4.1 + официальный Ethernet Kit
  6. Реальные показатели производительности
  7. Термика (важно для больших инсталляций)
  8. Типовые сценарии (13 реальных конфигураций)
  9. Сеть и веб-интерфейс
  10. Архитектура: матрица входов × выходов
  11. Быстрый старт (5 минут)
  12. OTA-обновления и диагностика
  13. Примеры интеграции
  14. Home Assistant
  15. Node-RED
  16. HyperHDR (Ambilight)
  17. Известные ограничения и компромиссы
  18. Roadmap
  19. Сборка из исходного кода
  20. FAQ
  21. В: Почему Teensy 4.1, а не ESP32?
  22. В: Могу ли я использовать кастомные эффекты кроме встроенных?
  23. В: Минимальное количество светодиодов?
  24. В: Как обеспечить гальваническую развязку для коммерческих инсталляций?
  25. В: Работает ли с WLED или другими LED-контроллерами?
  26. В: Какова задержка от входа до изменения пикселя?
  27. Готовы собирать?

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

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

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

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

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

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

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

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

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

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

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

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

  1. TPM2 по USB — стандартный протокол HyperHDR. Подключите USB-кабель от ПК или телевизора, и Roshni получит 50–60 FPS амбилайт-данных сразу же. Используйте это, если захватываете видео с исходного устройства.
  2. UDP Raw на порту 5568 — вариант по Ethernet, предпочтителен при стабильном доступе в сеть. HyperHDR, WLED и другие контроллеры говорят на UDP Raw нативно. Как только приходит UDP-пакет, он берет управление из любого активного встроенного эффекта.
  3. Веб-интерфейс / встроенные эффекты — когда нет внешних данных, можно запустить встроенные эффекты: 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-клей за месяцы и ускоряет старение люминофора. Стандартные способы защиты:

  1. Установка на алюминиевый профиль. Снижает температуру на 20–30 °C. Необходимо при такой плотности.
  2. Ограничение глобальной яркости. Реальный амбилайт редко нуждается в 100% белизне. Ограничение на 80% снижает пиковое тепло примерно на 20% без видимой разницы для большинства контента.
  3. Снизить бюджет тока. Планируемый блок питания 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://<controller-ip>/ и вы получите три панели.

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 минут)

  1. Прошейте прошивку — загрузите последний .hex из Releases и используйте Teensy Loader, или OTA-обновление, если у вас уже есть рабочая версия.
  2. Подключите Ethernet — вставьте кабель. Roshni запросит DHCP при загрузке и выведет IP по серийному порту.
  3. Откройте веб-интерфейс — перейдите на http://<controller-ip>/ в браузер.
  4. Настройте свою полоску — выберите тип микросхемы (APA102 или WS2812B), количество светодиодов, порядок цветов (RGB/GRB/и т.д.) и яркость. Нажмите Apply. Настройки сохранятся.
  5. Укажите ваш источник данных:
    • По Ethernet: HyperHDR → Add LED Device → udpraw<controller-ip>: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.

Node-RED

Простой HTTP request node на http://<controller-ip>/api/mode?name=<effect> дает вам полный контроль внутри своего flow. Комбинируйте с MQTT, вебхуками или времени-основанными триггерами. Этот подход хорошо работает с другими стратегиями оркестровки домашней автоматизации из нашего гайде по DIY IoT.

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.

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

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

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

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

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