Сразу хочу оговориться, что это не "тот самый" вариант, где на ПК в фоновом режиме обработчик передает данные на ардуинку, которая с некоторой задержкой подсвечивает фон монитора. Здесь все работает практически синхронно, с обработкой «на лету» HDMI сигнала, а демон крутится на одноплатнике Raspberry Pi, так же «на лету» обрабатывая уменьшенные копии кадров и управляя подсветкой.
Идея, что очевидно - не моя (технология была изобретена и запатентована компанией Philips Electronics) и заключается в дублировании цветовой гаммы с краев экрана на подсветку, которая освещает пространство за телевизором, в оригинале звучит Ambient Lighting Technology — «Технология Окружающего Освещения», или технология фоновой подсветки для телевизоров.
Так как в компании Филипс не только
Видели такое наверняка все, кому-то нравится, кому-то - нет. На вкус все фломастеры разные.
Строгой аналогии в этих экспериментах конечно же нет – я не внедряю чего-либо в сам TV приемник, и могу работать только с внешним сигналом, подаваемым на HDMI вход монитора или TV. Используя одноплатный ПК Raspberry Pi B+ можно получить результат двумя путями. Первый вариант – «Hard». Построен на анализе сигнала HDMI от любого внешнего источника, где Raspberry выполняет только обработку сигнала, предварительно преобразованного в аналоговую форму. Второй вариант – «Soft», где Raspberry одновременно является источником сигнала и занята программной обработкой кадров.
В зависимости от задач оба варианта имеют право на реализацию. Вариант «Hard» применим для организации фоновой подсветки любого экрана RGB лентой, модулями, прожекторами без привязки к источнику, используя HDMI сплиттер для получения сигнала и свое, независимое от ПК железо. При этом подсветка будет понимать протокол WS2812.
WS2812 - это собственно название чипа, на котором строят адресные светодиодные ленты или модули. Подобных чипов множество, но принцип работы примерно одинаков у всех. В отличии от обычной RGB ленты, где светодиоды могут менять свой цвет только все вместе и только одновременно, в адресной ленте каждый светодиод может в один и тот же момент времени светиться своим заранее заданным цветом. Реализовано это при помощи последовательного протокола SPI, когда пакет данных передается на цифровой вход первого чипа, он "откусывает " от пакета свои байты, содержащие информацию для красного, синего и зеленого уровней и передает пакет дальше. Происходит это в высокой скоростью и заметить эти переходные процессы при правильной организации пакетов - практически нереально. Существуют четырехпиксельные светодиоды, еще более скоростные протоколы передачи данных, но принцип неизменен.
Делалось все это изначально для работы, т.к. у заказчика была идея сделать подиум под презентуемый автомобиль в виде большого сборного экрана, на котором крутилось бы видео с бегущим дорожным полотном, а скосы подиума должны были подсвечивать окружающее пространство мощными RGB модулями по периметру. Но проект зачах, а у меня на руках были уже некоторые наработки и "малина". Не пропадать же добру..
Реализация варианта «Hard»
Некоторые необходимые компоненты для отладки этого варианта на фото. Это – Raspberry Pi B+ , HDMI-2-AV скейлер, активный HDMI сплиттер, USB граббер EasyCap, кабели HDMI, патчкорд для LAN соединения, соединитель папа-папа «тюльпан», источник питания 5В, microSD карта 32гб 10 класс. Кроме этого нужны - кардридер для microSD, USB мышка и клавиатура, какой либо монитор с HDMI входом или DVI + переходник HDMI-DVI, USB и HDMI кабели для подключения всего этого.Мышка, клавиатура и монитор для малины – опционально, потому что все можно настроить через SSH с консоли и файлового менеджера. Из перечисленного железа – скейлер HDMI2AV понимает входной сигнал с разрешением до 1080P, значит для обработки входящего 2К и 4К сигнала непригоден. Для более высоких разрешений есть другие скейлеры, принимающие 4K и позволяющие на выходе получить приемлемый сигнал. Для питания 5V ленты и малины использовал БП Sony 7,6В 2А от какого-то устройства, которым питал инвертор из Китая, имеющий на выходе 5V при максимальном токе до 8А, как заявлено в описании. Для отладки с лентой WS2812B на 91 пиксель этого вполне хватает. Структурная схема соединений всех блоков будет такой:
Как следует из приведенной выше схемы подключений, источник сигнала через HDMI сплиттер подается одновременно на целевой экран (TV) и HDMI-2-AV скейлер, который на выходе дает CVBS сигнал, который в свою очередь подается через коаксиальный переходник на вход аппаратного граббера EasyCAP.
Граббер передает захваченные кадры Raspberry Pi через USB порт, а Hyperion ambilight daemon, запущенный на Raspberry дает уже на другой USB порт или выход GPIO (в зависимости от настроек и типа чипов диодов подсветки) последовательность для управления этой самой подсветкой, используя один из множества доступных протоколов.
В некоторых сторонних проектах, которые я изучал – напрямую с Raspberry Pi управляли лентой на чипах APA102 или их аналогами, так как другие чипы требовали библиотек, доступных только в среде для контроллеров Arduino.
Сейчас ситуация изменилась, и во многих случаях можно обойтись без дополнительного контроллера.
Установка ПО на ПК и OS на Raspberry Pi B+.
Из программного обеспечения, устанавливаемого на ПК, понадобится:Актуальный на текущий момент пакет NOOBS_v3_2_1.zip для записи установщика ОС на microSD.
Софт для соединения по SSH - PuTTY и WinSCP, а также виртуальная машина Java (jre-8u231-windows-x64) и конфигуратор демона Hyperion (HyperCon.jar). Опционально – удобный файловый менеджер, как Total Commander.
Не успев начать, я зашел в тупик. Неудачно записав образ OS на карту microSD, обнаружил, что карта при записи образа была отформатирована так, что под Windows было видно только один раздел – около 500мБ.
Исправить это удалось быстро, причем штатными средствами Windows –
1. Запустить cmd.exe
2. В командной строке набрать DiskPart
3. Затем list disk и посмотреть номер своей карты по объему диска (у меня 29Гб)
4. Выбрать свой диск командой select disk 3 (У вас может быть другим)
5. Набрать команду clean
6. Затем идем в Управление компьютером -> Управление дисками, тыркаем в наш правой кнопкой, создаем раздел, кликаем ОК, назначаем букву, имя тома.
Готово.
Очистка диска:

Если образ по какой-либо причине не запустится на малине, это самый быстрый способ вернуть карту в первоначальное состояние для записи другого.
Свойства диска после очистки:
Создание тома:
После этого так же штатными средствами форматируем карточку в FAT32. NTFS не подойдет.
Установка OS на Raspberry проблем не вызывает и занимает мало времени.
Настройки OS и Hyprion
В итоге я установил последнюю версию LibreElec и получил первый отрицательный результат – под этой ОС не определялся мой аппаратный граббер.Как оказалось, при реализации подобных проектов у других людей так же возникали аналогичные проблемы, если граббер был на чипе, отличном от Fushicai (UTV007). Вскрытие моего показало другое железо – WS2106 от MacroSilicon
Железо граббера:
Решил сделать еще попытку, но уже с официальной сборкой Raspbian, опять же с помощью установщика NOOBS. В итоге команда ls /dev вывела в списке устройств что-то похожее на нужное мне – video0, который появлялся при включении граббера в порт. Уже прогресс.
Девайс 007 определяется как video0:

Теперь можно все настроить для удобной работы и заняться непосредственно установкой Hyperion демона на малину и конфигуратора HyperCon на комп под виндой. На текущий момент, т.е. в нынешнем состоянии проекта Hyperion - достаточно установить на ПК под Windows конфигуратор HyperCon, настроить его для связи с Raspberry Pi через SSH и уже через него ставить и конфигурировать демон Hyperion на Raspberry Pi.
Интернет на Raspberry Pi необходим, и желательно проводной. WiFi, судя по жалобам в сети – легко отваливается и сильно этим напрягает.
Проводной я пробовал в двух вариантах – раздавать с ПК через вторую сетевую карту и через роутер. Второй вариант проще, так как работает из «коробки». С первым нужны некоторые манипуляции по настройке IP адресов, но это не требует много времени и тоже работает.
Пока для начала нужно на Raspberry Pi в панели конфигурации (на вкладке интерфейсы) включить все протоколы - SSH, VNC, SPI… я включил все, кроме камеры, которой у меня нет). Перезагрузил Raspberry Pi. Затем назначил статический IP для проводной и WLAN сетей, чтобы каждый раз при перезагрузке Raspberry Pi не прописывать новый адрес в настройках программ на Windows. Делается это просто. Любым удобным способом нужно узнать IP адрес роутера – при помощи сканера или в командной строке:
netstat –r –n
Лучше сразу назначить Raspberry Pi статический IP, чтобы при перезагрузках не было потерь времени на определение новых и перенастроек клиентов удаленного доступа:
В консоли малины открыть файл конфигурации DHCP –
sudo nano /etc/dhcpcd.conf
и прописать в конце –
nodhcp
interface eth0
static ip_address=192.168.0.243/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
interface wlan0
static ip_address=192.168.0.243/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
interface wlan1
static ip_address=192.168.0.243/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.1
Здесь 192.168.1.1 – IP роутера, eth0 – проводное подключение
wlan0 – WiFi Raspberry Pi, wlan1 – для внешнего WiFi адаптера, если он подключен к Raspberry Pi.
Так же с консоли перезагрузка -
sudo reboot
Чтобы иметь доступ к Raspberry Pi через консоль и файловый менеджер, на ПК под Windows установил Putty и WinSCP. Как их скачать и настроить – много информации на профильных сайтах, достаточно поискать информацию с запросом «работа с PUttY и WinSCP».
На этом скриншоте три способа соединения малины с ПК под виндой через SSH –
Консоль Putty, файловый менеджер WinSCP и Total Commander – естественно, он тоже умеет это.
Несколько удобных команд для консоли малины, которые помогут разобраться с конфигурацией портов и подключенного железа:
ls /dev список всех устройств в системе
__________________________________________________________________
Проверка работоспособности службу hyperion:
sudo service hyperion status
__________________________________________________________________
lsusb выводит список подключенного к портам оборудования
Usage: lsusb [options]...
List USB devices
-v, --verbose
Increase verbosity (show descriptors)
-s [[bus]:][devnum]
Show only devices with specified device and/or
bus numbers (in decimal)
-d vendor:[product]
Show only devices with the specified vendor and
product ID numbers (in hexadecimal)
-D device
Selects which device lsusb will examine
-t, --tree
Dump the physical USB device hierarchy as a tree
-V, --version
Show version of program
-h, --help
Show usage and help
___________________________________________________________________
Есть так же полезная утилита Hardware Lister - lshw, которая не включена в пакет по умолчанию
и требует установки –
# sudo apt-get install lshw
С ее помощью можно просмотреть свойства любого железа в системе.
# sudo lshw
Можно вывести информацию об отдельных компонентах системы
# sudo lshw -C сpu
Команды утилиты Hardware Lister (lshw) -
usage: lshw [-format] [-options ...]
lshw -version
-version print program version ()
format can be
-html output hardware tree as HTML
-xml output hardware tree as XML
-json output hardware tree as a JSON object
-short output hardware paths
-businfo output bus information
options can be
-class CLASS only show a certain class of hardware
-C CLASS same as '-class CLASS'
-c CLASS same as '-class CLASS'
-disable TEST disable a test (like pci, isapnp, cpuid, etc. )
-enable TEST enable a test (like pci, isapnp, cpuid, etc. )
-quiet don't display status
-sanitize sanitize output (remove sensitive information like serial numbers, etc.)
-numeric output numeric IDs (for PCI, USB, etc.)
-notime exclude volatile attributes (timestamps) from output

Убедившись, что EasyCap определяется и доступен на одном из портов, можно ставить на ПК
конфигуратор HyperCon, которому для работы так же потребуется виртуальная машина
Java, соответствующая версии и разрядности Windows на ПК. Гуглим, качаем, ставим.
Настройка параметров в конфигураторе HyperCon.
Вот так выглядят вкладки HyperCon с моей тестовой конфигурацией:На момент написания этого руководства была доступна версия HyperCon V1.03.3 (22.10.2017), то есть проект последний раз обновлялся 2 года назад, а доступная по настройкам и проблемам информация в сети вообще датируется 14-16 годами.
При настройках в первой вкладке нужно не забывать, что отсчет пикселей ведется с нуля,
а не с единицы. Это нужно учесть при указании общего количества пикселей в первой вкладке
Вкратце по вкладкам конфигуратора:
Hardware (железо)
- device -> Configuration Name – любое удобное имя текущей конфигурации
- device -> Type - тип чипа адресной ленты, модуля или чего другого
- device -> Amount LEDs – количество адресуемых пикселей (сколько светиков в ленте)
- device -> RGB Byte order – следование цветов в протоколе
Construction (расположение источников света)
- чекбоксы –> (led top left итд) - наличие источника света в углах конструкции
- LEDs horizontal -> Количество пикселей по верхнему краю конструкции
- LEDs Left-> Количество пикселей по левому краю конструкции
- LEDs Right -> Количество пикселей по правому краю конструкции
- Bottom gap -> Количество пропущенных зон по нижней части конструкции
- 1-st LED offset -> Поправка на смещение пикселей для установки первого в удобном углу.
Image process (обработка зон)
- Image process -> Horizontal depth – глубина зон по горизонтали, %
- Image process -> Vertical depth – глубина зон по вертикали, %
- Image process -> Horizontal gap – отступ зон от края по горизонтали, %
- Image process -> Vertical gap – отступ зон от края по вертикали, %
- Image process -> Overlap – перекрытие соседних зон, %

Blackborder detection (обнаружение черных краев экрана)
- Чувствительность и режим обработки. Работает по идее так – демон анализирует края экрана по
указанному уровню и как-то реагирует) Мне это не нужно было, я не проверял.
Process (обработка кадров)
- Smoothing -> Enabled (чекбокс включения сглаживания)
- Smoothing -> Type (тип сглаживания)
- Smoothing -> Time (время переходов)
- Smoothing -> Update freq (частота обновления)
- Smoothing -> Update delay (задержка перед обновлением кадра)
- Color calibration (настройка передачи цветов) – интуитивно понятные пункты, позволяющие отдельно
для каждого из 3-х основных цветов задать минимальный и максимальный уровень свечения,
насыщенность, температуру, уровень свечения фона без сигнала и т.д.
Отмеченный чекбокс Send Continuous позволяет видеть изменения в процессе настройки уже на
собранной конструкции.
Grabber (Граббер – захватчик кадров, самая интересная вкладка))
- Internal Frame grabber (Программный граббер)
- Internal Frame grabber-> Enabled (чекбокс включения внутреннего граббера)
- Internal Frame grabber-> Width (ширина зоны)
- Internal Frame grabber-> Heigth (высота зоны)
- Internal Frame grabber-> Interval (интервал захвата граббера)
- Internal Frame grabber-> Priority Channel (приоритет этого канала)
Здесь нужны некоторые пояснения. Фишка в том, что на базе Raspberry Pi можно сделать медиаплеер,
который сам будет крутить контент с локальной сети, флешки, или может это будет IP TV. Пример такой ОС для малины – LibreElec. Поскольку контент и так крутится плеером малины, есть возможность делать захват без внешнего EasyCap граббера, демон сам разберется с кадрами, но в этом случае источником сигнала будет HDMI выход самой Raspberry Pi. Есть возможность использовать так же внешний граббер для другого источника, не отключая внутренний – для этого предусмотрены приоритеты каналов, это
последний пункт настройки программного граббера. Чем больше число – тем ниже приоритет канала.
Именно так, здесь нет ошибки.
GrabberV4L2 (Настройки драйвера аппаратного граббера))
- Grabber V4L -> Device ( USB устройство, с которого делается захват - /dev/video0 по умолчанию)
- Grabber V4L -> Input ( Используемый вход - 0 по умолчанию)
- Grabber V4L -> Width (ширина зоны - -1 по умолчанию)
- Grabber V4L -> Heigth (высота зоны - -1 по умолчанию)
- Grabber V4L -> Frame decimation (сжатие кадра)
- Grabber V4L -> Size decimation (коэффициент сжатия)
- Grabber V4L -> Priority Channel (приоритет этого канала)
- Grabber V4L -> 3D mode (выбор режима 2D/3D)
- Grabber V4L -> Crop Left (обрезка кадра слева)
- Grabber V4L -> Crop Right (обрезка кадра справа)
- Grabber V4L -> Crop Top (обрезка кадра сверху)
- Grabber V4L -> Crop Bottom (обрезка кадра снизу)
- Grabber V4L -> три последних пункта (порог включения каналов по цветам)
External (Внешние настройки)
- External -> Kodi Checker (Настройки для плеера Kodi, в случае если он используется как плеер)
- External -> Json/Proto/Boblight Server (Настройки портов серверов, оставить как на скрине)
- External -> Booteffect / Static color (Настройки демо-эффектов при старте демона)
- External -> Json/Proto Forvard (Настройки портов вывода, оставить как на скрине)
SSH (Настройки соединения ПК с Raspberry Pi)
- SSH – Connection -> System (Выбор ОС, установленной на Raspberry Pi)
- SSH – Connection -> Target IP (IP адрес Raspberry Pi)
- SSH – Connection -> Port (как на скрине - (22))
- SSH – Connection -> Username/password (имя – пароль, заданные на Raspberry Pi)
- SSH – Connection -> Connect/Disconnect (кнопка соединения-разъединения с Raspberry Pi)
- SSH – Connection -> Show Traffic (Кнопка вызова консоли с выводом инфы)
- SSH – Manage Hyperion from HyperCon -> Inst/Upd. Hyperion (Кнопка установки демона на Raspberry Pi или обновление демона через сеть. Никаких sudo get-install, соединяемся с Raspberry Pi, тыркаем и ждем
вывода в консоль HyperCon- а)
- SSH – Manage Hyperion from HyperCon -> Remove Hyperion (Кнопка деинсталляции демона)
- SSH – Manage Hyperion from HyperCon -> Start/Stop (Кнопки остановки-запуска демона)
- SSH – Manage Hyperion from HyperCon -> Get Log (Вывод в консоль логов демона, удобно для
поиска нестыковок и чтения кодов ошибок)
- SSH – Send Hyperion Configuration -> Local Config Path (Отправка файла конфигурации в указанное
локальное место на ПК)
- SSH – Send Hyperion Configuration -> Send Config (Отправка файла конфигурации через SSH на Raspberry Pi)
- SSH – Colorpicker (интуитивно понятный тестер палитры – можно проверить вывод всех цветов.
Кнопки под вкладками сохраняют-загружают настройки HyperCon-а (не сам файл конфигурации демона!!)
- HELP – понятно, а Create Hyperion Configuration позволяет локально сохранить сам файл конфига
демона для Raspberry Pi - hyperion.config.json
После установки и конфигурации в первую очередь нужно попытаться получить скриншот с граббера –
в консоли PUTTY пишем строку:
sudo hyperion-v4l2 --width 640 --height 480 --screenshot --frame-decimator 2 --size-decimator 8 --crop-left 26 --crop-right 27 --crop-top 20 --crop-bottom 20
В результате получаю ошибку:
V4L2GRABBER ERROR: Only pixel formats UYVY, YUYV, and RGB32 are supported ERROR
Чего-то не то с порядком следования цветов и сигналов. Буду эти грабли как-то обходить)
Пытаюсь узнать правильный формат командой:
v4l2-ctl -d /dev/video0 --list-formats-ext
и вижу следующее –

Значит скармливаю команду для конфигурации драйвера V4L2:
sudo hyperion-v4l2 -d /dev/video0 --video-standard "no-change" --pixel-format "yuyv" –screenshot
И теперь в HyperCon вместо ошибки получаю вполне сносный скриншот, который буду подгонять)
При работающем и запущенном демоне с консоли сделать снимок не выйдет – будет сообщение о том, что сервис занят. Его нужно сначала остановить кнопкой Stop в HiperCon, затем вбить в PuTTy команду,
А затем кликнув правой кнопкой мыши в окне с примером – загрузить свой скриншот.
Шаг 1 – Stop, команда в консоли Putty, шаг 2 – загрузить снимок.
Выглядит это так:
Можно использовать много каких параметров в зависимости от конкретного случая –
sudo hyperion-v4l2 --width 480 --height 320 --frame-decimator 1 --size-decimator 1 --crop-left 7 --crop-right 0 --crop-top 7 --crop-bottom 3 --pixel-format "yuyv" --screenshot
Или с другим разрешением:
sudo hyperion-v4l2 --width 720 --height 480 --screenshot --frame-decimator 1 --size-decimator 1 --crop-left 7 --crop-right 0 --crop-top 7 --crop-bottom 3 --pixel-format "yuyv"
Скриншот желательно делать на светлом фоне, дабы откорректировать «crop» краев кадра – т.е убрать все черные края на скрине.
И еще – вывод для 2812 в последней на этот момент версии конфигуратора hypercon возможен без Arduino, напрямую с вывода GPIO Raspberry Pi:
Взято с форума проекта:
WS2812B chipset
The "ws2812b" driver only works for the Raspberry Pi 1 (A and B model).
The newly merged "ws281x" driver works for Raspberry Pi 1,2 and 3
Configuration
You can use the special driver for Ws2812b to run compatible leds, the device-config for the original led device should look like this:
Code:
"device" :
{
"name" : "MyPi",
"type" : "ws2812b",
"colorOrder" : "rgb"
},
The device-config for the NEW led device that support RPi 1,2,3 should look like this:
Code:
"device" :
{
"name" : "MyPi",
"type" : "ws281x",
"colorOrder" : "grb",
"leds" : 107
},
Additional device parameters
In addition to "colorOrder" and "leds", the "ws281x" device has the following parameters (listed here with their defaults):
Code:
"gpio" : 18,
"dmanum" : 5,
"freq" : 800000,
"pwmchannel" : 0,
The RPi 2 and 3 both have three pins capable of PWM, BCM 18 (default, channel 0), BCM 12 (channel 0) and BCM 13 (channel 1). All three pins have been verified to work with WS2812B LEDs and with the ws281x driver.
However, both PWM channels are used by the Pi's on-board analog audio, so you have the problem outlined below no matter which pin you choose.
Это нужно вручную прописать в параметры файла на малине - /etc/hyperion/hyperion.config.json
Нужно понимать, что при загрузке файла из конфигуратора HiperCon - старый на Raspberry Pi заменяется, т.е. вносимые вручную изменения нужно делать только в конце как окончательный вариант.
Еще одна полезность - команда для просмотра параметров драйвера v4l2:
v4l2-ctl –all
Подробный список – хелп вызывается так:
v4l2-ctl -h, --help

Подключение ленты ws2812b: (скриншот с форума проекта)
И очередные грабли – ничего на выходе, демон вылетает с ошибкой 25, жалуясь на сигнал.
Поиск причины привел к следующему - в файле конфигурации hyperion.config.json в секции V4L2 GRABBER CONFIG меняем параметр "standard" : "PAL" (или "NTSC") на
"standard" : "no-change".
HyperCon по умолчанию дает выбор только из двух стандартов, но любой из них вышибал сервис на старте. Поэтому так -
"grabber-v4l2" :
{
"device" : "/dev/video0",
"input" : 0,
"standard" : "no-change",
"width" : -1,
"height" : -1,
"frameDecimation" : 2,
"sizeDecimation" : 8,
"priority" : 700,
"mode" : "2D",
"cropLeft" : 9,
"cropRight" : 9,
"cropTop" : 9,
"cropBottom" : 14,
"redSignalThreshold" : 0.0,
"greenSignalThreshold" : 0.0,
"blueSignalThreshold" : 0.0
},
Остается дело за малым - для автозапуска демона в консоли малины выполнить
sudo nano /etc/rc.local
и записать в открытый файл «rc.local» ту же строку -
sudo hyperion-v4l2 --width 480 --height 320 --frame-decimator 2 --size-decimator 8 --crop-left 9 --crop-right 9 --crop-top 9 --crop-bottom 12 --pixel-format "yuyv" –screenshot
Или отредактировать файл локально и перезаписать потом старый:

Теперь при перезапуске Raspberry Pi автоматом стартует демон hyperion
Остается сделать основу для фиксации ленты с чипами WS2812B на заднюю панель TV.
Я использовал низкий дюралевый профиль для светодиодных лент 16х4 с молочным рассеивателем.
В окончательном варианте получилось по 24 боковых пикселя и 43 сверху. Всего 91.
Конфиг немного подправил под это дело.
Теперь можно пытаться сделать на Raspberry Pi медиацентр с использованием внутреннего граббера hyperion, тогда отпадет необходимость в бОльшей части оборудования и используемой ранее как источник TV приставки. Пока же все запланированное удалось – целью было организовать динамическую подсветку от сигнала HDMI с выводом на WS2812B.
Процесс модернизации TV:
Рабочий, проверенный с этим оборудованием конфиг - в текстовом файле с именем «hyperion.config.json.hard.exemple.txt» - в дополнении к этому руководству.
Файл, используемый Hyperion на Raspberry называется «hyperion.config.json».
Более подробно описывать весь процесс для этого варианта в рамках и так раздутой публикации не имеет никакого смысла — достаточно вбить в поисковик "Hyperion Ambilight" и посмотреть, как это делали умельцы в разные года — информации хватает. Только читай, вникай и делай. Нежданчик может случиться разве что по части железа, поэтому отмечу некоторые моменты и убью пару мифов за одно:
1. Аппаратный граббер EasyCap может иметь различные чипсеты, например Fushicai (UTV007) или Macro Silicon (WS2106) как в моем случае, или еще черт знает какие — китайцы клепают очень много вариаций. Какие-то чипы поддерживаются драйверами демона Hyperion, какие-то — нет.
2. В некоторых проектах авторы убеждали, что использовать ленту на чипах WS281x или WS2801 нельзя. Нужно сразу делать на APA102. Однако у меня все прекрасно завелось на WS2812B, и не считая куцей цветовой гаммы — все ОК. Все мерцания, помехи, глюки и прочие проблемы, связанные якобы с использованием WS2812B — на самом деле результат косячности в части разводки сигнальных цепей и земли ленты, малины-ардуины, БП. Скорость передачи данных WS2812B — 800кГц — так же перекрывает все потребности в засветке 100-150 пикселей с частотой 60Гц, поэтому APA102 выигрывает только за счет более "правильной" и широкой цветовой гаммы.
3. В некоторых проектах авторы упоминали, что скейлер сам урежет любой HDMI сигнал. Однако это не так. Тот, что в большинстве проектов, в т.ч. у меня — принимает только 1080p. Для сигнала 2K или 4К понадобится другое, соответствующее разрешению железо.
4. В некоторых проектах комментаторы убеждали, что аппаратный Ambilight от Philips настолько крут, что повторить его невозможно, ибо там анализируется весь кадр, хитрые алгоритмы и т д… Отчасти они правы — в колхозной реализации есть некоторые минусы, но
— мы имеем на порядок большее число каналов (у меня влезло в периметр ящика без нижней стороны 91 против 37 у оригинала с бОльшей диагональю).
— мы можем настраивать зоны для анализа как угодно. Ширину, глубину, перекрытие зон, сглаживание переходов. Можем игнорировать черные края у широкоформатных картинок, можем вовсе глушить свет по горизонту при их наличии. Т.е. имеем возможность настроить все как нам угодно.
5. В текущей версии для управления WS281x не нужен посредник в виде ардуины со скетчем. Поддерживается управление напрямую с выхода GPIO малины. И управляющий уровень сигнала 3,3В отлично вписывается в границы по даташитам на эти чипы.
Как резюме – данный вариант вполне жизнеспособен для некоторых областей применения.
В качестве «домашнего» этот "аппаратный" вариант исполнения мне не понравился из-за обилия железа, соединенного кучей кабелей и проводов. Поэтому я пошел дальше – к реализации чисто программного варианта на базе все той же «малины». Но это уже отдельная и более объемная тема, которую надеюсь поднять в следующей статейке.
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.