Автор: Николай Хабаров

Одним прекрасным пятничным вечером я решил посмотреть дома фильм: включил ноутбук, подключил HDMI-кабель через переходник с DisplayPort, взял пульт, включил телевизор, запустил воспроизведение на ноутбуке. И понял, что громкость на телевизоре недостаточна — пришлось снова искать пульт, чтобы ее увеличить… Тут я подумал «А можно ли этот процесс как-то упростить?»

Субботнее утро выдалось крайне плодотворным. Я решил сделать собственный сетевой мультимедиа-проигрыватель, причем такой, каким его представляю я. Почти все детали были взяты из кладовки, сердце плеера — Raspberry Pi. Подробнее, что у него внутри, и как собрать аналогичное устройство, смотрите под катом.



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

Подбираем детали


Прежде всего хотелось бы просто попробовать и понять целесообразность изготовления конечного устройства. Поэтому для начала мы возьмем минимум деталей и испытаем потенциальный медиаплеер в работе. Идем в кладовку и буквально откапываем нужные нам детали:
1. Компьютер с HDMI-выходом. Старенький Raspberry Pi 1 вполне подходит для наших целей, также можно использовать Raspberry Pi 2.
2. Блок питания для платы — подойдет microUSB-зарядка от старого телефона. «На попробовать» можно взять любую, но желательно взять источник обеспечивающий выходной ток 1А (одного ампера за глаза хватит и для Pi 2, см. требования);
3. microSD-карточка на 4 ГБ или более.
4. USB-мышка и/или клавиатура (можно беспроводные) и, опционально, приемник инфракрасного сигнала TSOP4836 или аналогичный.
5. USB Wi-Fi-адаптер или возможность подключить Ethernet-кабель с интернетом в плату.

Ставим OpenElec, пробуем


На этом этапе мы запустим OpenElec в минимально возможном в виде. Едва подумав о ПО для своего мультимедиа-проигрывателя, я вспомнил XBMC, позже переименованный в Kodi . Но желания ставить какую-то операционку, а потом настраивать Kodi не было. Поэтому я решил погуглить и нашел эту сборку операционной системы GNU/Linux, поверх которой Kodi уже установлен. Называется эта сборка OpenElec, это проект с открытыми исходными кодами. Его официальный сайт — openelec.tv
Итак, качаем установочный образ с официального сайта. Выбираем желательную версию и платформу, на которой будем ее запускать (в моем случае stable релиз для Rasberry Pi), и качаем 'Diskimage' (файл с расширением .img.gz).
Распаковываем образ:
$ gunzip -d <имя файла>.img.gz

И записываем на карту памяти:
$ sudo dd if= <имя файла>.img of=/dev/mmblck0 bs=4M

Поправьте /dev/mmblck0 — если карточка памяти у вас в системе не одна.

Внимание! Содержимое карты памяти будет полностью затерто.

Пользователи ОС Windows могут использовать бесплатную утилиту Win32 Disk Imager. Утилита имеет графический интерфейс — выбираете файл, карточку памяти и нажимаете 'Write'.
Теперь убеждаемся что все записано на карточку командой
$ sync

Или просто извлекаем карточку через безопасное извлечение устройства в графическом интерфейсе ОС. Достаем ее физически и ставим в Raspberry Pi. Далее подключаем Ethernet-кабель с интернетом или вставляем USB Wi-Fi-адаптер, подключаем мышку, HDMI-кабель к телевизору. При желании использовать инфракрасный пульт нужно подключить ИК-приемник к GPIO18 и питанию процессора(3.3В). Итоговая схема подключения выглядит следующим образом:

Если вы решили использовать инфракрасный приемник, будьте аккуратны с ним
— убедитесь в правильности расположения выводов у вашего приемника.
Все, теперь можно посмотреть на саму среду. Запитываем плату от источника питания. После загрузки на экране появится мастер первоначальной настройки:


Во время настройки рекомендую сразу включить SSH-доступ. Все остальные вопросы тривиальны.

Теперь можете поиграть с самой средой будущего плеера при помощи мышки и/или клавиатуры. Можете попробовать воспроизвести видео в различных форматах (можно подключить USB-флешку к свободным портам) и вообще понять, что к чему. Существуют различные корпуса для самой платы Raspberry Pi, возможно, кого-то все устроит в таком минималистичном виде, можно например подключить беспроводную USB-мышку и пользоваться устройством. Мы же продолжим его совершенствовать.

Подключаем ИК-пульт


Если вы решили не подключить ИК-приемник, можете просто пропустить этот раздел.

Чтобы использовать пульт, нам необходимо настроить LIRC. Для начала давайте включим модуль, который непосредственно работает с приемником через GPIO-порт. Для этого нужно добавить строчку в файл конфига DeviceTree. Логинимся через SSH на ваше устройство (вы же включили SSH при первоначальной настройке? Если нет, это можно сделать в графическом интерфейсе самой системы).
$ ssh root@ip_address

Пароль по умолчанию — openelec. Добавляем нужную нам строку в файл:
# mount -o remount,rw /flash
# nano /flash/config.txt

в самый конец добавляем строку и затем перезагружаем:
dtoverlay=lirc-rpi

Теперь нам нужно убедиться, что все работает и LIRC сможет получать команды с пульта, для этого останавливаем LIRC и пытаемся получить данные с пульта:
# killall lircd
# mode2 -d /dev/lirc0

Нажимаем на любую кнопку пульта и светим на приемник — в консоли должен побежать текст, описывающий приходящие импульсы. Теперь мы убедились, что все работает и можем обучить LIRC использовать именно ваш пульт. Обращаю внимание, что lircd во время процесса настройки должен быть остановлен, мы это сделали ранее с помощью команды kill. Для обучения существует специальная утилита irrecord, для её запуска выполняем команды:
# cd /storage/.config
# irrecord -d /dev/lirc0 lircd.conf

Далее следуем инструкциям на экране. В начале утилита попросит понажимать различные кнопки на пульте пока не заполнятся точки на экране, чтобы обучиться паттерну вашего пульта. Затем нужно будет текстом указывать, использованию какой кнопки вы хотите обучить LIRC, и посветить на приемник.
Я рекомендую обучить как минимум следующим кнопкам:
KEY_UP
KEY_DOWN
KEY_LEFT
KEY_RIGHT
KEY_OK
KEY_PLAY
KEY_EXIT
KEY_STOP
KEY_INFO
KEY_EPG

Весь список доступных в системе кнопок можно получить по команде:
# irrecord -list namespace


На пульте вы можете выбирать любые удобные для вас кнопки. У большинства телевизоров в режиме HDMI большая часть кнопок не делают ничего, что нам, конечно, на руку. В результате у нас должен получится файл lircd.conf с параметрами вашего пульта — перезагружаем плату и пробуем использовать пульт.
Так же можно реализовать включение/выключение проигрывателя. Для это нужно соединить приемник со вторым выводом Raspberry PI GPIO1 для Raspberry PI 1 или GPIO3 для Raspberry PI 2 — на обоих платах эти выводы расположены в одном и том же месте разъема платы:


Соединив этот вывод с землей, можно разбудить плату, находящуюся в выключенном состоянии. При таком подключении можно запрограммировать кнопку KEY_POWER, и плеер будет выключаться при нажатии на нее, а его включение будет осуществляться по любому сигналу от любого пульта.

Собираем девайс посерьезнее
Мне захотелось сделать более основательный девайс с внешностью заводского устройства и добавить в него жесткий диск. Я заглянул в кладовку и нашел старенький спутниковый ресивер. Внутри уже имеется БП достаточной для всех компонентов мощности, имеется приемник ИК-сигнала, тумблер выключения питания на задней стенке. Есть и возможность сделать часы на передней панели за счет уже установленного семисегментного индикатора. И конечно же, сам корпус отлично подходит для наших целей. Спутниковый приемник можно заменить старым DVD или VHS-проигрывателем даже в нерабочем состоянии.
Внимание, при разборке устройства будьте аккуратны с блоком питания — он содержит конденсаторы, которые могут быть все еще заряжены от сети. И при последующей сборке/наладке будьте аккуратны при включении — на плате БП имеют компоненты, на которых во включенном состоянии присутствует 220 В.

Вскрываем корпус ресивера/видеомагнитофона. Для начала нам нужно убедиться, что у блока питания есть 5В выход, который может выдать необходимую мощность. Для этого с помощью мультиметра проверяем наличие 5В питания и затем прослеживаем, через какие компоненты получаются эти 5В. Если элементная база выпрямителя и диаметр обмотки трансформатора блока питания способны выдержать 2-3 ампера, нам повезло — источник есть, в противном случае придется менять источник в корпусе на более мощный. Затем вынимаем основную плату/лентопротяжный механизм/оптический привод и отправляем его обратно в кладовку — он еще пригодится. Внутри оставляем лишь плату БП и плату с лицевой панелью, на которой есть ИК-приемник.

Теперь выбираем, куда установить саму Raspberry Pi. Выбор тут довольно прост — сторона платы с HDMI должна выходить наружу корпуса, сторона с USB-портами должна быть смонтирована внутри для подключения внутренних компонентов, кроме того, нам нужен хоть какой-нибудь доступ к microSD-карточке на случай смены прошивки. На корпусе ресивера имеются отверстия для RCA-разъемов, поставим плату так, чтобы HDMI-разъем был максимально доступен снаружи. С этой же стороны имеются выходы звуковой платы и microUSB, работающего в режиме периферийного устройства. Эти разъемы нам не интересны, питание мы заведем снаружи через основной GPIO-разъем платы.

Размечаем, где нужно немножко подрезать, чтобы HDMI-разъем свободно вставлялся в плату снаружи корпуса и намечаем четыре отверстия для установки платы. Я использовал такие стойки:


Стойки родной платы мешали, и я удалил их при помощи пассатижей. Манипуляции нужно проводить аккуратно, неловким движением можно легко погнуть сам корпус. Сверлим, пилим, прикручиваем подходящими болтиками стойки и к ним саму плату.


Теперь нужно найти место для HDD. Здесь требование довольно простое — нужно оставить несколько свободных сантиметров внутри корпуса со стороны SATA-разъема, т. к. туда будет вставлен переходник. На жестком диске есть резьба на нижней поверхности и по бокам HDD. Винчестер нужно чуть приподнять, чтобы он не лежал на металле. Я решил проблему очень просто — взял подходящие под нижнюю резьбу болты, но чуть более длинные чем нужно, и проложил расстояние между корпусом и HDD гайками большего размера.

Теперь нам понадобиться найти SATA USB-преобразователь или старый контейнер для HDD, откуда такой преобразователь можно вытащить. У меня был контейнер, но он, к сожалению, оказался нерабочим. Пришлось за SATA USB-преобразователем бежать в магазин. USB-разъем мы вставим в Raspberry PI, но, чтобы не нагружать довольно серьезными токами плату, которых требует HDD, особенно при раскручивании шпинделя, нужно провести дополнительное питание напрямую от БП. В моем случае у переходника был кабель с двумя USB-разъемами, один из них я и подключил напрямую к блоку питания, распаяв ответный USB-разъем рядом с БП.


Еще две вещи, о которых стоило бы сразу подумать. Первое — где и как будет расположен внешний USB-порт. Второе — куда ставить Wi-Fi-адаптер, или если вы планируете реализовать только подключение по Ethernet, как вынести Ethernet-разъем на стенку корпуса (если расположить плату краем с этим разъемом к корпусу, USB-устройства изнутри вы подключить не сможете). Удлинить Ethernet можно, поставив внутри корпуса обычную настенную розетку и обжав короткий провод с коннектором.

Сейчас продаются совсем крошечные USB Wi-Fi-донглы, но ставить такой внутрь металлического корпуса не стоит — может плохо проходить сигнал. Можно взять короткий USB-удлинитель, вывести USB-разъем на заднюю часть корпуса и вставить его туда. Также бывают USB-адаптеры со съемными антеннами, можно удлинить RMA-разъём до задней стенки корпуса и там прикрутить антенну. У меня был довольно старый и, как следствие, довольно большой USB Wi-Fi-адаптер с накручивающейся антенной и miniUSB-входом. Девать его из-за размеров мне было некуда, и я решил применить его в дело. Снял корпус — его форма не давала прикрепить снаружи антенну. Плата была довольно большая, и мне пришлось хорошенько подумать над ее размещением. К счастью, она оказалась очень тонкой, и я решил поставить ее над USB-разъёмами от Raspberry Pi. RMA-разъем вывел наружу, закрутил на гайку и внутри корпуса поставил одну высокую стойку для платы. Доступ к USB остался, а антенна оказалась поднята над корпусом. Отлично!


Теперь надо как-то закрепить USB-удлинитель на лицевой панели, убедившись, что он ничему не помешает внутри корпуса. В моем случае на ресивере имелась дверца для карточек доступа, и я решил поставить разъём за нее — чтобы не пылился! Поэтому слишком аккуратно я его вырезать не стал, а сзади залил термоклеем.


С платой лицевой панели ситуация более интересная — вариантов того, из чего она состоит, множество. Мне пришлось реализовывать динамическую индикацию семисигментных индикаторов с помощью DMA (Direct Memory Access, прямая реализация динамической индикации через GPIO-порты потребляла бы слишком много ресурсов CPU, и яркость свечения сегментов была бы неравномерной из-за активностей операционной системы). Но это уже тема для отдельной статьи, да и к тому же подобные платы могут кардинально отличаться, поэтому здесь предоставим право проявить свой творческий потенциал читателю. Можете изучить исходные коды реализации для моей платы. В простейшем случаем можно просто перерезать дорожки, идущие к ИК-приемнику, и припаяться к нему напрямую тремя проводами. Отмечу лишь, что для подключения к GPIO-разъему платы я использовал IDE-шлейф, он прекрасно надевается на разъем Raspberry Pi, и провода можно легко распаять с другими компонентами.

В конечном итоге, у меня получилось вот такое устройство:


Настраиваем


Если при включении вы увидите цветной квадрат в верхнем правом углу экрана, это означает, что питания для Raspberry Pi недостаточно — либо слабый блок питания, либо слишком тонкие провода, либо USB-периферия отбирает слишком много. В первом случае поможет только замена БП на более мощный. Во втором — проблему легко решить заменой проводов на более толстые или параллельным использованием нескольких жил, в третьем — проблема решается путем запитывания USB-устройств напрямую от БП, или, например, установкой USB-хаба с возможностью подключить внешний источник питания.

Также вы наверняка увидите, что ваш HDD подключился к системе как внешняя флешка. Давайте сделаем его основным хранилищем в операционной системе. При первом запуске OpenElec автоматически начинает использовать все свободное пространство на microSD-карточке под раздел с данными, который затем монтируется как /storage. Наиболее удачным мне кажется решение использовать в качестве /storage жесткий диск целиком. Для этого отформатируйте жесткий диск и создайте на нем раздел с файловой системой ext3/4. Это можно сделать прямо на плеере, используя утилиты parted и mkfs, команды ниже затрут все содержимое диска и создадут один ext4 раздел:

# umount /dev/sda1
# parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel GPT
mklabel GPT
Warning: The existing disk label on /dev/sda will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
yes
(parted) mkpart primary 2048s 100%
mkpart primary 2048s 100%
(parted) q
q
Information: You may need to update /etc/fstab.
# mkfs.ext4 /dev/sda1


Для это нужно будет зайти по SSH на проигрыватель. Затем примонтируйте новый раздел куда-нибудь:
# mkdir /tmp/hdd
# mount /dev/sda1 /tmp/hdd


Cкопируйте все содержимое /storage в новый раздел, чтобы сохранить текущее состояние:
# cp -rf /storage/. /tmp/hdd


Отмонтируйте раздел и при желании удалите папку:
# umount /dev/sda1
# rmdir /tmp/hdd


Теперь надо указать, какой именно диск мы должны монтировать при загрузке. Сделать это можно, поправив командую строку параметров ядра, но для начала узнаем UUID раздела нашего винчестера:
# blkid /dev/sda1


Скопируйте в буфер обмена UUID раздела. Теперь перемонтируем файловую систему с конфигом ядра на запись и поправим его:
# mount -o rw,remount /flash
# nano /flash/cmdline.txt


В файле заменим параметр disk на UUID нашего диска. Содержимое файла должно получится примерно такое:
boot=/dev/mmcblk0p1 disk=UUID=95013338-89b1-43af-8471-9b30efc85d98 quiet


После перезагрузки проигрыватель будет использовать жесткий диск как /storage, а раздел на карточке памяти можно удалить, чтобы он при загрузке не монтировался автоматически:
# parted -s /dev/mmcblk0 rm 2


Вот такие веселые у меня выдались выходные. Не забывайте, что на борту этого медиаплеера находится операционная система GNU/Linux, и вы можете самостоятельно модифицировать/дополнять ее как вам угодно. Также можно решать какие-то задачи домашней автоматизации, использую все то же устройство.

И напоследок видео выступления автора статьи, рассказывающего об устройстве.

Всем приятного просмотра!
Поделиться с друзьями
-->

Комментарии (51)


  1. boingo-00
    24.08.2016 22:34

    Также можно реализовать включение/выключение проигрывателя. Для это нужно соединить приемник со вторым выводом Raspberry PI GPIO1 для Raspberry PI 1 или GPIO3 для Raspberry PI 2
    Соединив этот вывод с землей, можно разбудить плату, находящуюся в выключенном состоянии.
    Я и не знал даже, спасибо

    Кстати, у вас получилось «сдружить» малину с HDMI-CEC?


    1. kAIST
      24.08.2016 23:04

      Малинка из коробки работает с HDMI-CEC, у меня по крайней мере с samsung'ом без лишних вопросов заработало.


    1. DataArt
      25.08.2016 13:01

      К сожалению, у автора статьи нету телевизора с поддержкой HDMI-CEC, однако Raspberry Pi и OpenElec поддерживают CEC, так что по идее должно заработать.


    1. Turilion
      25.08.2016 16:39

      Как я понял из статьи, автор использовал Raspberry PI2, на сколько я помню, полноценная поддержка HDMI-CEC появилась только в третьей версии платы.
      Буквально сегодня ночью закончил аналогичное устройство))) Только на PI3, с блекджеком и пр.
      Из плюшек:
      1) Отдельный хотспот на малинке, для подключения всего и вся с DLNA, UPnP, всякими AllShare и пр. (кстати, работает на ура)
      2) Полностью рабочий синезуб. Данный факт очень порадовал, потому как ложусь позже супруги и засыпаю только под фильм. (раньше она всегда ворчала когда посреди ночи начинал бубнить телек, а теперь красота, одел гарнитуру и никого не тревожу звуком)
      3) Полная поддержка HDMI-CEC без дополнительных танцев с бубном.
      4) Питание от двух USB-портов, тоже немалый бонус — ключил телек — включилась малинка, выключил телек — погасла и малинка. (Пока контент на сетевом хранилище, в дальнейшем планирую от него отказаться, переставив накопители на малинку по схеме автора статьи)

      А вот про включение с GPIO и не знал. Надо будет запилить вкл/выкл малинки с пульта телека, благо кнопок «пустых» хватает.


      1. vasikos
        03.09.2016 00:07

        Можете рассказать про два USB для питания? Что и куда втыкать?


        1. Turilion
          03.09.2016 11:10

          Малинке для нормальной работы нужно не менее 1 А.
          USB порт по стандарту должен обеспечивать 500 мА. Значит, что бы нормально запитать малинку нам нужно питание с двух портов USB. А дальше либо ищем в магазинах микро-USB кабель с двумя хвостами (например от жесткого диска), либо запаять самому, как я и сделал. Взял мини-USB кабель от старого внешнего диска с двумя хвостами, и напаял разъем микро-USB вместо мини-USB.


        1. Turilion
          03.09.2016 11:15

          Т.к. эфирного ТВ, как и спутника у меня нет, то очень удобно получилось. Включаешь телик и вместе с ним и малинка включается, телик видит сигнал на HDMI и сразу на него переключается. Вкупе с полной поддержкой HDMI-CEC, получилась полная бесшовная работа двух систем. Пользователи (жена с сыном) даже не замечают, что работают с двумя системами))))


  1. rockin
    24.08.2016 22:41
    +2

    Тут, конечно, каждому своё, и я сам люблю с паяльничком повонять маленько, но…

    Не совсем ясен выпад по поводу «китайские плееры на андроиде»
    Их производительность всяко выше будет — раз, да и чисто эстетически вещь намного более удобная, намного более функциональная (за счёт андроида).

    Помимо фильмов, кстати говоря, есть iptv — и функционал коди в данном контексте просто ужасен. Там и повышенные требования к источнику (фризы, если что не нравится), и неудобное переключение каналов.
    «Китайские плееры» этого лишены, т.к. в маркете имеется несколько отличных приложений для iptv.


    1. Meklon
      24.08.2016 23:37

      Все прекрасно у KODI с iptv. Пакет iptvsimple доустановить только.


      1. rockin
        24.08.2016 23:53

        Ага, прекрасно. Особенно переключение каналов радует и фризы

        Что такое прекрасно — на андроиде Perfect Player.


    1. AllexIn
      25.08.2016 06:42

      Тот же xTreamer SideWinder будет стоить дешевле, а по мощности и возможностям находится далеко впереди. Но разве это важно?


      1. avost
        25.08.2016 09:31

        59 евро (до скидки было 89) за полную версию и 79 за урезанную (wtf?) — это дешевле? Хм…


        1. AllexIn
          25.08.2016 09:43

          Одна только малинка стоит 2500. Не говоря уж о сопутствующих деталях.
          Ну ладно, не дешевле. Столько же. При больших возможностях.
          Но, повторюсь, DIY он не про экономию и не всегда про лучшее качество. DIY он про удовольствие сделать что-то самому.


      1. ClearAirTurbulence
        25.08.2016 15:01

        Насколько я понял по сайту сабжа, основная прелесть девайса во всяких нетфликсах и хулу. А как оно будет работать в РФ? Если так же «замечательно», как ROKU, который регионально огорожен, и нужно будет дополнительно как-то настраивать ему сеть, чтобы враги думали, что ты не в России, и еще приплачивать $5\мес за какой-нибудь прокси, нафиг надо такое удовольствие.


        1. AllexIn
          25.08.2016 15:03

          Ничего не могу сказать.
          У меня первый SIdewinder купленный за 3000 рублей еще до кризиса. На тот момент был почти как ПК. С регулярными обновлениями и умением делать все что захочешь. Плюс кастомные скрипты от пользователей для расширения функционала.
          ЧТо умеет актуальная версия — не знаю. Но учитывая что там Андроид — полагаю что все что угодно.


    1. fLegmatik
      25.08.2016 16:38

      Кроме того, в описании практически любого китайского arm-плеера упомянут тот же kodi, который легко ставится на android. Баги внутри устройств от этого не пропадут, конечно, но довод про неприспособленность графического интерфейса отметается.

      Меня android и openelec не устраивают по причине недостаточной гибкости под меня. Захочется запустить на большом экране эмулятор приставки или openarena — сиди, думай, как и откуда их туда поставить. Другое дело debian, в котором эти вопросы сводятся к банальному apt-get install.


    1. TwiggyR
      26.08.2016 12:39

      А можно по подробнее про эти отличные приложения для iptv?
      Они все так же запускают просмотр в сторонних плеерах или уже нормально?


      1. Meklon
        26.08.2016 18:21

        iptvsimple добавляет в Kodi новое меню ТВ. И все. Все в одном месте. Фотографии, сериалы, фильмотека, музыка, тв и прочее.


        1. TwiggyR
          27.08.2016 09:37

          Я если честно спрашивал про апкшки для андроида. Просто сутки пост был на предмодерации.


  1. melchermax
    24.08.2016 23:27

    Прекрасный слог, отличная подача материала. Автор — гик в наилучшем смысле этого слова!


  1. I-denis
    24.08.2016 23:52
    +1

    Испытал творческий облом дойдя до абзаца про лицевую панель. Ну никак не интересно в нацатый раз читать как сунуть флешку в usb порт и как примонтировать hdd. Столь же не интересно читать про то как сверлить дырки в корпусе и ставить опоры. Кто хоть раз что то делал подобное ,- меня поймет. А про инсталляцию дистрибутива с Коди вообще
    Итак, лицевая панель. О подумал я — сейчас вкусненькое будет. А вот фиг…


    1. DataArt
      25.08.2016 13:17

      Лицевая панель может очень сильно отличаться в различных устройствах. Поэтому детально описывать её реализацию автор не стал. Если в двух словах, то платы лицевых панелей таких устройств — это, как правило, обычные семиразрядные индикаторы, которые еще имеют какую-то электронную обвязку — начиная от банальных ключей на транзисторах, заканчивая специализированной микросхемой, реализующей динамическую индикацию. В зависимости от этой обвязки метод подключения будет очень сильно различаться, и всех их не описать. В случае автора, на плате был установлен сдвиговый регистр для восьми сегментов, т.е. пришлось последовательно записывать байт по одному проводу, описывающий какой набор сегментов зажечь, и затем зажигать весь разряд, чтобы его было видно. И так четыре разряда. Такая плата требует очень много переключений из нуля в единицу и обратно при реализации динамической индикации, а учитывая жесткие требования по времени зажигания разрядов (иначе дисплей будет мигать различными светоэффектами) это возможно реализовать только на аппаратном уровне. В Raspberry Pi есть DMA. В двух словах это работает так: можно выделить какой-то буфер в памяти и указать с какой скоростью его читать — содержимое этого буфера будет выводиться в GPIO-порт (можно работать не только с GPIO), причем без участия CPU, это будет делать отдельный аппаратный модуль в процессоре. Таким образом, можно положить в буфер последовательность, какие ножки GPIO и в какие моменты времени дергать, чтобы отобразить нужные нам цифры, используя динамическую индикацию. Чтобы использовать эти возможности, нужно записать нужные флаги в регистры процессора, доступные по физическим адресам процессора. Автор взял готовую библиотеку RPIO, в которой именно этот метод был использован для генерирования ШИМ, чтобы не писать свои инициализации этих регистров, чуточку подправил под свои нужды и использовал. Исходные коды этого проекта доступны здесь — https://github.com/Nikolay-Kha/seven-segment-clock


  1. wOvAN
    25.08.2016 00:43

    Каша из топора (тм)


  1. brujodentista
    25.08.2016 02:55

    А HDMI-CEC нынче не в моде?


    1. boingo-00
      25.08.2016 09:49

      Не везде может работать. У меня малину с телевизором LG 2015 года и старой Sony BRAVIA подружить не удалось.
      Может я что-то не так делаю, не знаю. Я даже не понял, как оно работает.
      Включаться вместе с телевизором — не включается
      Управлять пультом от ТВ как клавиатурой/мышью — телевизор ругается, что эти кнопки не работают


      1. dmitryredkin
        25.08.2016 18:22

        В стандарте CEC не так много кнопок, как на телепульте. Железно работать должны стрелки-ок-exit и четыре цветные кнопки (не знаю правде на что они замаплены в kodi).
        У меня с включением тоже проблемы. Телевизор может включать/выключает плеер, а вот плеер телевизор только включает.


        1. boingo-00
          25.08.2016 18:35

          Железно работать должны стрелки-ок-exit и четыре цветные кнопки
          Вот ни в какую не работает, при нажатии «ОК» телевизор показывает инфу о входе, а малина делает ничего


          1. dmitryredkin
            25.08.2016 18:42

            Если в списке входов не появляется HDMI-CEC (или как он там у LG называется), значит он не активирован в малине.


            1. boingo-00
              25.08.2016 18:45

              Адаптер HDMI-CEC включен точно, а как определить работает ли с ним ТВ, я не понял.
              HDMI-CEC на обоих устройствах включена, только телевизор не понимает, что это за НЁХ ему подсунули
              И никак не работает с ним, от слова «совсем»
              Кстати, сонька так же не видит устройство с HDMI-CEC и так же не работает с ним


    1. Meklon
      25.08.2016 10:29

      Оно нафиг не надо. Удобнее когда пультом является каждый телефон и планшет в доме. Причем сразу с обратной связью и информацией по контенту.
      image


      1. dmitryredkin
        25.08.2016 12:01

        Пульт ТВ — лучший контроллер для ТВ.
        Планшет:

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


        HDMI-CEC — наше все. Только алфавитной клавиатуры не хватает.


        1. Meklon
          25.08.2016 12:41

          Вопрос вкуса. У меня телефон всегда под рукой. Пульт один, а девайсов для управления 7 штук. Коннектится все мгновенно. Никаких тормозов. Очень удобно, стоя на кухне, посмотреть сколько у детей осталось времени мультфильма и добросить еще в плейлист. Или музыку включать из сосденей комнаты. На самом деле очень удобно. Уже 3 года без нареканий.


          1. dmitryredkin
            25.08.2016 18:17

            Ну если только когда из кухни :)


            1. Meklon
              25.08.2016 20:46

              У меня это обычный вариант)


            1. IgorGIV
              25.08.2016 21:41

              За скрин из «Бегущего по лезвию» особое спасибо! Мой самый любимый фильм! :)


  1. MAXSSS15
    25.08.2016 16:37

    Если все детальки есть в наличии, и охота возиться, то наверно есть смысл. Но если чего-то нет (а скорее всего — нет всего), то всё равно надо заказ с АлиЭкспресс ждать. И готовый плеер выйдет даже дешевле, чем покупать всё по частям. Тем более, что готовый можно купить сразу с поддержкой 4К и 3D, и с установленной и настроенной ОС.


  1. Buzzzzer
    25.08.2016 16:37

    Openelec умер судя по всему. Обновлений уже давно не было. Основная часть разработчиков форкнулась в libreelec, и теперь все самое свежее там.


  1. VecH
    25.08.2016 16:37

    1. Что за пунктир на схеме подключения IR приемника?
    2. Почему выбрал GPIO18 для IR приемника, можно ли его сменить на другой и в каком файле конфигурации это исправлять?


    1. DataArt
      25.08.2016 17:25

      1. При таком включении появляется возможность пробуждения платы из спящего режима. Подробнее в тексте. И вывод тот поменять нельзя.
      2. Это дефолт драйвера. Его можно поменять, передав драйверу параметр gpio_in_pin, это можно сделать добавив чуть другую строку в файле /flash/config.txt. Нужно через запятую передать параметр, вот так:
      dtoverlay=lirc-rpi,gpio_in_pin=10


      1. VecH
        25.08.2016 17:55

        Это скрытая функция малины для вывода из спящего режима?
        то есть если я его shutdown -h now
        то при таком подключении IR приемника смогу пробудить малину?!

        или спящий подразумевает что то еще? можете подробнее пояснить


        1. DataArt
          25.08.2016 18:41

          Да, вы все верно поняли, это пробуждение из halt. IR-приемник способен пробудить при таком включении. Это возможность реализована в бутлоадере.


          1. VecH
            25.08.2016 19:08

            Уже нравится, а если она включена, тогда что будет при выключении с IRDA? обесточивание или нормальный shutdown?


            1. DataArt
              26.08.2016 13:12

              Чтобы реализовать выключение, нужно средствами OpenElec назначить кнопку KEY_POWER. Получив эту команду, OpenElec «захалтит» плату. А все что происходит на пине для включения, когда плата уже включена — просто нигде ничем не используется.


  1. winnipeg
    25.08.2016 16:37

    А как же https://osmc.tv/? У самого нечно подобное. Диск просто монтирую в /home. С пультом там тоже еще есть отдельная история про hdmi-cec.


  1. stardust1
    25.08.2016 16:37

    Openelec вроде уже мёртв. Почти вся команда в Libreelec.


  1. andrey_aksamentov
    25.08.2016 16:38

    «И понял, что громкость на телевизоре недостаточна — пришлось снова искать пульт, чтобы ее увеличить… Тут я подумал «А можно ли этот процесс как-то упростить?»

    ХМ, а что если хранить оба пульта в одном месте.


    1. dmitryredkin
      25.08.2016 18:19

      Что вы делаете на GT c таким отношением к жизни? :)


  1. sincosxy
    25.08.2016 16:38

    Сам использую RPI2, на борту OSMC. Сейчас доступны следующие «удобства»:
    -IPTV (simple IPTV, переключать каналы, действительно, не удобно, но проблем с фризами не замечал)
    -собственно, медиатека
    -торентокачалка (Transmission, очень удобный доступ через веб-интерфейс)
    -DC клиент (ncdc, к сожалению, управление только через консоль)
    -http-сервер Nginx (на нем крутится интерфейс управления домашними электроприборами)
    -HDMI-CEC поднялся сам, без плясок с бубном

    Все работает на удивление стабильно и шустро, причем, через вайфай свисток.


  1. Eugene_Burachevskiy
    26.08.2016 17:28

    Iconbit Toucan Stick 4K стоит на вторичном рынке дешевле чем расбери и в нем забавный пульт с гироскопом. И DLNA медиатеку c NAS-а использовать все же удобнее, чем ставить хард в этот плеер на малинке. Так что субьективно не вижу особего смысла в этой затее…

    Но как пример DIY устройства круто, спасибо за интересную статью :)


    1. neko_nya
      28.08.2016 13:04

      Есть у меня иконбит, но не стик, а Movie 4k, или как-то похоже. Так там Коди не поддерживает аппаратное ускорение. Малинка с включенным ускорением показывает лучше.


  1. neko_nya
    28.08.2016 13:09

    Два замечания:
    Первая малинка очень тормозит при работе с Коди. Самый неприятный баг, который я заметил — безумно долгая загрузка то ли телепрограммы, то ли самого плейлиста Torrent TV. Занимает несколько минут, причем в процессе извлечения каналов может перезагрузиться. Другая приставка так себя не вела.
    И вы в курсе, что за активацию аппаратного ускорения некоторых кодеков нужно заплатить денежку производителям малинки? Немного, но все равно нужно, иначе видео высокого разрешения не будет работать.