<
  • Главная
Статьи

Медіаплеєр з вмісту комори

  1. підбираємо деталі
  2. Ставимо OpenElec, пробуємо
  3. Підключаємо ІК-пульт
  4. Збираємо девайс серйозніше
  5. налаштовуємо

Одним прекрасним п'ятничним вечором я вирішив подивитися вдома фільм: включив ноутбук, підключив HDMI-кабель через перехідник з DisplayPort, взяв пульт, включив телевізор, запустив відтворення на ноутбуці. І зрозумів, що гучність на телевізорі недостатня - довелося знову шукати пульт, щоб її збільшити ... Тут я подумав «А чи можна цей процес якось спростити?»

Суботній ранок видався вкрай плідним. Я вирішив зробити власний мережевий мультимедіа-програвач, причому такий, яким його уявляю я. Майже всі деталі були взяті з комори, серце плеєра - Raspberry Pi. Детальніше, що у нього всередині, і як зібрати аналогічний пристрій, дивіться під катом.

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

підбираємо деталі

Перш за все хотілося б просто спробувати і зрозуміти доцільність виготовлення кінцевого пристрою. Тому для початку ми візьмемо мінімум деталей і випробуємо потенційний медіаплеєр в роботі. Йдемо в комору і буквально відкопуємо потрібні нам деталі:

  1. Комп'ютер з HDMI-виходом. Старенький Raspberry Pi 1 цілком підходить для наших цілей, так само можна використовувати Raspberry Pi 2.
  2. Блок живлення для плати - підійде microUSB-зарядка від старого телефону. «На спробувати» можна взяти будь-яку, але бажано взяти джерело забезпечує вихідний струм 1А (одного ампера за очі вистачить і для Pi 2, см. https://www.raspberrypi.org/help/faqs/#powerReqs );
  3. microSD-картка на 4 ГБ або більше.
  4. USB-мишка і / або клавіатура (можна бездротові) і, опціонально, приймач інфрачервоного сигналу TSOP4836 або аналогічний.
  5. USB Wi-Fi-адаптер або можливість підключити Ethernet-кабель з інтернетом в плату.

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

На цьому етапі ми запустимо OpenElec в мінімально можливий у вигляді. Ледве подумавши про ПО для свого мультимедіа-програвача, я згадав XBMC, пізніше перейменований в Kodi . Але бажання ставити якусь операційну систему, а потім налаштовувати Kodi не було. Тому я вирішив погуглити і знайшов цю збірку операційної системи GNU / Linux, поверх якої Kodi вже встановлено. Називається ця збірка OpenElec, це проект з відкритими початковими кодами. Його офіційний сайт - http://openelec.tv/

Отже, качаємо інсталяційний образ з офіційного сайту - http://openelec.tv/get-openelec Вибираємо бажану версію і платформу, на якій будемо її запускати (в моєму випадку 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: https://sourceforge.net/projects/win32diskimager/ . Утиліта має графічний інтерфейс - вибираєте файл, картку пам'яті і натискаєте '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 - на обох платах ці висновки розташовані в одному і тому ж місці роз'єму плати:

Для це потрібно з'єднати приймач з другим виводом 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-роз'ємами, один з них я і підключив безпосередньо до блоку живлення, розпаяно відповідь 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, і яскравість світіння сегментів була б нерівномірної через активностей операційної системи). Але це вже тема для окремої статті, та й до того ж подібні плати можуть кардинально відрізнятися, тому тут надамо право проявити свій творчий потенціал читачеві. Можете вивчити вихідні коди реалізації для моєї плати - https://github.com/Nikolay-Kha/seven-segment-clock . У найпростішому випадком можна просто перерізати доріжки, що йдуть до ІК-приймача, і припаятися до нього безпосередньо трьома проводами. Зазначу лише, що для підключення до 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) qq 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, і ви можете самостійно модифікувати / доповнювати її як вам завгодно. Також можна вирішувати якісь завдання домашньої автоматизації, використовую всі той же пристрій.

І наостанок відео виступу автора статті, що розповідає про пристрій:

Всім приємного перегляду.

Тут я подумав «А чи можна цей процес якось спростити?
Ви ж включили SSH під час першого налаштування?
Do you want to continue?
Yes / No?


Новости
  • Виртуальный хостинг

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

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью