- Roshni: контроллер LED, когда стандартных решений недостаточно
- Что отличает Roshni
- Два независимых выхода
- Три источника данных с приоритизацией
- Оборудование: Teensy 4.1 + официальный Ethernet Kit
- Реальные показатели производительности
- Термика (важно для больших инсталляций)
- Типовые сценарии (13 реальных конфигураций)
- Сеть и веб-интерфейс
- Архитектура: матрица входов × выходов
- Быстрый старт (5 минут)
- OTA-обновления и диагностика
- Примеры интеграции
- Home Assistant
- Node-RED
- HyperHDR (Ambilight)
- Известные ограничения и компромиссы
- Roadmap
- Сборка из исходного кода
- FAQ
- Готовы собирать?
- Schema.org Markup
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-данные, они становятся активными. 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-клей за месяцы и ускоряет старение люминофора. Стандартные способы защиты:
Для текущей сборки 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-обновление, если у вас уже есть рабочая версия.http:/// в браузер.- По 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:// дает вам полный контроль внутри своего 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
