
Основни предпоставки:
- Има стара неизползвана платка Raspberry Pi от първо поколение;
- Платката лежи на шкафа като мъртво тегло и не се използва — платка "Кирпич";
Какво бих искал да получа:
- В определен момент (например по настроение)
платката да спре да е "Кирпич" и в нея да бъде поставена вълшебна карта с памет; - Към платката се свързва Ethernet кабел и щекер от обикновен битов колонка или слушалки;
- След подаване на захранване, бившият "Кирпич" — пее
Основна идея:
- Минимално количество движения за каквато и да е настройка, в най-добрия случай, просто свързваме "Ethernet" кабела, захранването и колонките, и повече не правим абсолютно нищо; "въобще";
- Бившият "Кирпич" от кутията поддържа например 20 интернет радиостанции, превключването между които може да бъде назначено на завъртането на колелото на мишката или на определен pin GPIO (да свържем два проводника и да ги замкнем (мечтата ми от детството));
- Управлението се осъществява по радио канал и този радио канал може да бъде обикновена радио мишка;
- Да вземем готова система, дистрибутив да бъде събрана в "Yocto Project"
т.е. както обикновено няма да правим нищо, тъй като всичко вече е направено.
(достатъчно е само да поставим външен наблюдател от другата страна "Телевизора");
Описание
Простата интернет радио колонка "KODI"
Сглобката е предназначена за стари платки Raspberry Pi 1
(покрития с прах, някъде на шкафа, но които са готови да работят отново)
По подразбиране се използва списък m3u8 с 12 интернет радиостанции.
Предполага се, че платката работи без HDMI изход и за да се изключи, е достатъчно да се извади адаптера от контакта. А за ултрасовременен безжичен контролер можете да използвате своята супер радио мишка (или да свържете обикновена с кабел).
При включване мрежовият интерфейс по подразбиране се настройва чрез DHCP протокол и се възпроизвежда последната запомнена радиостанция от списъка, управлението на силата на звука при възпроизвеждане се осъществява с обикновена мишка:
(накрая задайте своята мишка "шефка на управлението" и я поздравете, тя го заслужава)
колело напред - увеличение на звука
колело назад - намаляване на звука
дълго натискане (3 секунди и повече) на десния бутон на мишката
- избор на следваща радиостанция
дълго натискане (3 секунди и повече) на левия бутон на мишката
- избор на предишна радиостанция
За да добавите собствен списък с интернет радиостанции
винаги можете да свържете HDMI кабел от телевизора
и да се възползвате от стандартния графичен интерфейс Kodi 17.6
(изключете платката, свържете HDMI и включете адаптера за захранване)Основно меню Kodi => «Добавки» => «Моите добавки»
=> «Клиенти PVR» => «PVR IPTV Simple Client»
Първоначална реализация
(възможна)
Първоначално, когато реших да направя «Интернет радио колонка», планирах следното:
- Минималистичен конзолен дистрибутив в Yocto Project;
- Аудио поток се проиграва чрез GStreamer;
- Мрежовият интерфейс се настройва по DHCP;
И такова решение има редица предимства:
- Достатъчно бързо (вход в работен режим след подаване на захранване 30-40 секунди);
- Достатъчно надеждно (по-малко програми, по-малко точки на отказ);
- Конзолният дистрибутив е много по-лесен за превод в режим само за четене
т.е. програмите не записват нищо в кореновата файловата система
(и файловата система на носителя SDHC е на мое мнение първият кандидат за отказ);
Бележка:
В Yocto за превръщането на кореновата файловата система (rootfs) в режим само за четене може да се направи доста просто, като се промени един параметър по време на сборката. Yocto предлага два варианта от кутията: 1) Работа на файловата система в нормален режим четене/запис (така работят всички дистрибуции за общо назначение, например Ubuntu) 2) Работа на файловата система в режим само за четене (така работят специализирани дистрибуции, например в маршрутизатори). В режим само за четене всички директории, в които обикновено се записват данни от приложения и услуги по време на работа, се монтират в оперативната памет (например директорията /var/log и т.н.). Данните са актуални само за текущата сесия на работа и след загуба на захранване данните се губят. Ако в Yocto Project посочите при сборка да използва "read only", то след сборката вашата дистрибуция ще бъде настроена в режим само за четене, но винаги можете да добавите възможност за динамично превключване от "read only" в "read/write", но това е съвсем друга история ...
И един основен недостатък:
«Трябва да го направя», т.е. трябва да похарча N брой вечери.
(обикновено след работа, и това е най-неефективното време, по това време мозъкът вече не мисли, обикновено спи)
И още, предишната си статия на Хабра написах за мултимедийния център. проект
и възможността да продължа в същия дух пребори изследователския ми устрем. За това в следващата глава.
Превръщане на Kodi в интернет радио колона
За да добавя нужната функционалност, ще добавя още един метод в рецептата за сборка на дистрибуцията, описана в предишната вж. файл berserk-image.bb
GUI_SETTINGS = "home/root/.kodi/userdata/guisettings.xml"
# конфигурация стартиране на последния избран ТВ канал (1-фон 2-преден план)
F1_LINE = "0"
R1_LINE = "1"
# конфигурация за звуковатаoutput, винаги свързано е само аналоговият аудио изход
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# тъй като HDMI по подразбиране не се използва, изключвам автоматичното обновление
# за да не се получи така, че захранването да е изключило, а данните да останат незаписани
F3_LINE = "0"
R3_LINE = "2"
# методът отговаря за добавянето на конфигурацията:
# която превръща "Умен телевизор" в "обикновена Интернет Радио колонка"
add_radio_guisettings() {
sed -i "s|${F1_LINE}|${R1_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
sed -i "s|${F2_LINE}|${R2_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
sed -i "s|${F3_LINE}|${R3_LINE}|" ${IMAGE_ROOTFS}/${GUI_SETTINGS}
}
FIND_STR = "touch ./tmp/.FIRST_RUN."
SCRIPT_FIRST_RUN = "etc/init.d/first-run.sh"
# тъй като HDMI изходът може да не се използва,
# необходимо е да се изключи "стартовото приветствие"
off_kodi_welcome() {
sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}
Методите са предназначени за модифициране на кореновата файлова система преди формирането на образа на дистрибутива под формата на един raw файл, който се записва на картата памет с команда dd
Това става по следния начин:
ROOTFS_POSTPROCESS_COMMAND += «add_radio_guisettings; off_kodi_welcome;»
Накратко, в основния конфигурационен файл на Kodi 17.6 се променят «три точки»
- Конфигурация за стартиране на последния избран ТВ канал;
- Конфигурация за звуковата output, винаги свързано е само аналоговият аудио изход;
- Изключване на автоматичното обновление;
- Бележка:
Единственото, с което имах трудности, е, че трябваше да допълня файла с базата данни в формат sqlite => TV29.db, където е записан текущият възпроизвеждан ТВ канал (тъй като по подразбиране няма избран канал), а с xml конфигурацията в Kodi това не може да се направи.
по-подробна последователност от действия за всяка точка:
1) Натиснете върху иконата «зъбно колело» в горния ляв ъгъл на екрана
и изберете опцията «Настройки PVR и ТВ» (изображение на телевизор с две антенки)
след това в лявата част на менюто изберете опцията «Възпроизвеждане», а в централната секция «Общи»
посочете в падащото меню «Продължи от последния канал при стартиране»
избирайки настройката «Преден план»
или по-ясно:
"Настройки PVR и ТВ"
=> "Възпроизвеждане"
=> "Продължи от последния канал при стартиране" => "На преден план"
2) Натиснете иконата "зъбно колело" в горния ляв ъгъл на екрана и изберете:
"Системни настройки"
=> "Добавки" => "Актуализации" => "Никога не проверявай актуализации"
3) Натиснете иконата "зъбно колело" в горния ляв ъгъл на екрана и изберете:
"Системни настройки"
=> "Аудио" => "Устройство за възпроизвеждане на звук" => "PI: Аналогово"
Как през последните две години неправилно гледах телевизия.
Трябва да ви призная, че през последните две години не успях да науча как да гледам телевизия правилно.
Обикновено гледам телевизия в кухнята. Към телевизора е свързана дъска Raspberry Pi 2B, а към дъската - Ethernet и HDMI портове. Захранването на дъската се подава чрез обикновен USB кабел, който е включен в USB порта на телевизора, т.е. по същество, включването на телевизора с оригиналното дистанционно управление, подава захранване и на дъската Raspberry Pi, а изключването на телевизора с дистанционното, също така веднага спира захранването и на дъската Raspberry Pi.
Да, осъзнавам, че така не бива да се прави, защото коренната файлова система на медийните центрове Kodi (ext3) функционира в обичаен режим четене/запис. Но съм един мързелив човек и за начало реших да проверя колко дълго мога да изключвам системата, преди да спре да зарежда изцяло, но за съжаление през две години не успях да го направя (може би просто имах късмет, не знам).
И според мен, ако такъв режим е подходящ за телевизора ми, той ще бъде полезен и за 'обикновен интернет радио колонка', а тъй като принудително изключих автоматичното обновление на плъгините Kodi, вероятността за неуспех на файловата система ще бъде още по-малка. В момента нямам проблеми с това.
Бележка:
Но вие винаги можете, при желание, с една команда на yocto
IMAGE_FEATURES += "read-only-rootfs"
и малко магия да превърнете вашия дистрибутив в режим "read only"
Дистрибутивът на «интернет радио колонка», описан в статията, е битов, а важното за битовия дистрибутив е красивият GUI. Според мен е много трудно или почти невъзможно да научиш обикновения потребител да въвежда някакви неразбираеми магически команди в конзолата, да не говорим, че той дори не знае такова слово. Но GUI, ето, това е.
И това е, може би, моят основен аргумент в полза на неконзолно разпространение. Топлият лампов интерфейс на Kodi, да, той не е особено необходим, но съществува.
(Също така съвсем забравих да спомена, че Kodi може да се управлява дистанционно, например от смартфон, като инсталирате приложението „Yatse“, и за някого това може да е предимство)
Конфигурация на Kodi за управление с мишка
а сега Ракета
VolumeUp
VolumeDown
ChannelDown
ChannelDown
ChannelUp
<!--
Конфигурацията преназначава общите (global) събития за следните елементи:
- превъртане на колелото на мишката напред
- превъртане на колелото на мишката назад
- натискане на средния бутон на мишката
- обработка на продължително натискане на мишката (3 секунди и повече),
0 идентификатор на десния бутон, 1 идентификатор на левия бутон
по-подробна информация за настройките на мишешките събития:
Какво да направите, ако кабелната система не е дошла при вас
„Но у нас няма свободни Ethernet портове (или никога не е имало)“ — може да възкликне част от щастливите притежатели на стари платки Raspberry Pi 1 (възможно е платката да е закупена за изследване и така и да е останала на шкафа)
А тъй като на платката няма вграден Wifi, без Ethernet свързване, тя не е много функционална.
Разбира се, че съществува възможност за използване на платката Raspberry Pi 1 без Ethernet, но тя ще изисква от вас определени усилия. Обикновено такива неща са интересни само в рамките на изучаване на нещо ново, т.е. това не е работа за крайния потребител.
И така, нека разгледаме хипотетичен вариант за използване на платката без Ethernet:
Може да свържете външен USB — Wifi адаптер, имайки предвид,
че адаптерът трябва да работи добре под Linux
Бележка:
За съжаление, част от WiFi адаптерите няма да работят, това не е особеност на дистрибутива, представен в тази статия, а по-скоро проблем на конкретните драйвери на WiFi адаптерите в ядрото на Linux. Можем да констатираме, че в момента не можете просто да отидете в магазина и да купите всеки WiFi адаптер. Вместо това трябва да подберете WiFi адаптер от списък с по-малко проблематични и добре работещи под Linux. Проверих само следните модели: - WiFi адаптер с чипсет Atheros D-Link DWA-126 802.11n (AR9271) - WiFi адаптер NetGear WNDA3200 - WiFi адаптер NetGear WNA1100 - WiFi адаптер TP-Link TL-WN722N (AR9271) - WiFi адаптер TL-WN322G v3 - WiFi адаптер TL-WN422G - Wifi адаптер Asus USB-N53 чипсет Ralink RT3572
Ако вече разполагате с usb Wifi адаптер, можете да проверите как работи под Linux, следвайки следните стъпки:
- Инсталирайте някакъв широко разпространен Linux дистрибутив
, например «Ubuntu Desktop» - Заредете системата
- Свържете своя Wifi usb адаптер
- Стартирайте мрежовия мениджър и опитайте да се свържете с вашата WiFi точка за достъп
- Ако всичко работи добре и интернет свързаността ви е стабилна, значи вашият адаптер е добре поддържан и можете да продължите с работата по свързването на този адаптер в специализирания дистрибутив и възможно с други версии на ядрото
(ако не, то не, уви — най-добре е даже и да не опитвате)
Поддръжка на външен Wifi адаптер в «Raspberry PI»
За коректната работа на WiFi адаптера в Linux: ще ни трябват две неща:
1) Поддържа ли Linux ядрото определен Wifi адаптер
2) Има ли в системата модул на ядрото за определен Wifi адаптер
Вземем за пример адаптера TP-Link TL-WN722N. Той има просто великолепна антена.
Нека намерим чипсета, на който платката работи — при мен е «AR9271», забележка:
интересното е, че за един и същи модел на един и същи производител, чипсетът на Wifi може да се различава. Например, срещал съм случаи, в които за TL-WN722N версия 2, вече се използва друг чипсет Realtek RTL8188, а той не работеше добре под Linux (по онова време), за съжаление така стоят нещата, т.е. понякога трябва да се вглеждате и в малките цифри на версията от задната (тъмна) страна на адаптера.
Сега да намерим името на параметъра в конфигурацията на ядрото, отговарящ за драйвера на чипсета AR9271, най-добре е да потърсим комбинацията от думи «AR9271 cateee.net»
където «cateee.net» — чудесен сайт с описание на конфигурации на модули от ядрото на Linux
Намираме веднага името на конфигурацията на ядрото — CONFIG_ATH9K_HTC
и името на необходимия ни модул на ядрото ath9k_htc
и след това е достатъчно да посочите името на необходимия модул в файла за фрагмента на конфигурацията
ядрото на Linux => recipes-kernel/linux/files/rbpi.cfg, добавете реда:
CONFIG_ATH9K_HTC=m
По този начин в бъдеще можете да свържете всякакво допълнително оборудване към вашата система (ако, разбира се, то вече се поддържа в ядрото на Linux)
Какво да правите, ако вие сте хабра гик — конструктор
и създавате страхотни неща, например неща като или вие сте студент и мечтаете да създадете нещо подобно.
На практика можете да вземете някакъв Touch Screen екран за RPI от aliexpress, да поръчате подходяща акумулаторна батерия, да свържете всичко това към платката Raspberry Pi 1, 2 или 3 (по-добре към 3, тъй като тя има вградена Wifi), да изберете тема за оформление на графическия интерфейс в Kodi, предназначена за сензорен екран и вуаля => вие може да получите прост аудиоплейър. Разбира се, той ще бъде доста обемист, но той ще бъде ваш.
Забележка:
A за да съберете мултимедиен център Kodi за най-бюджетната платка
Raspberry Pi Zero Wifi в yocto, ви е достатъчно да промените две реда:
конфигурационен файл => build/conf/local.conf
MACHINE = 'raspberrypi0-wifi'
рецепта за изграждане на Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE',
'raspberrypi0-wifi', '${BS_RPI}', '', d)}"
Ако отзивчивостта на GUI Kodi 17.6 заради едно процесорно ядро в Zero ви се струва загадъчна, можете да направите финт и да съберете по-стара, но много бърза версия, например Kodi 15.2, тя в това отношение е по- "приятелска" (понякога наследството решава всичко)
За съжаление нямам платка, така че не мога да проверя, но по моите усещания това трябва да проработи.
Кратка инструкция за сборка
1) Инсталирайте зависимостите на Yocto Project (например в Ubuntu):
sudo apt-get install -y --no-install-suggests --no-install-recommends
gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential
chrpath socat cpio python python3 python3-pip python3-pexpect
xz-utils debianutils iputils-ping python3-git python3-jinja2
libegl1-mesa libsdl1.2-dev xterm
2) Скачайте и инсталирайте Repo:
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
3) Изтеглете проекта от github:
PATH=${PATH}:~/bin
mkdir radio
cd radio
repo init -u https://github.com/berserktv/bs-manifest
-m raspberry/rocko/radio-rpi-0.2.8.xml
repo sync
4) Компилирайте проекта:
./shell.sh
bitbake berserk-image
можете да компилирате същото и за платките Raspberry Pi 3B Plus, 3B и 2B:
repo init -u https://github.com/berserktv/bs-manifest
-m raspberry/rocko/radio-0.2.8.xml
по-подробна инструкция за компилиране
и запис на microSDHC карта см.
Постскриптум
Разбира се, идеята за интернет радио колонки е стандартна, тя е известна на всички и на Хабра ще намерите много статии по този въпрос, например
И още можете да помислите, че просто съм нагласил изискванията към готовото решение. На това мога да отговоря, че не, честно-честно.
Историята на мистър Ерви
Искате да вярвате или не, но историята е следната:
Нашият офис граничи с фирма, която произвежда различно звуково
оборудване, и веднъж директорът на тази фирма, да го наречем мистер "Ерви"
се обърна към нашия заместник-директор на клона мистер "Арсений"
и го попита колко сложно е да се настрои Raspberry Pi
да възпроизвежда звуков поток, т.е. платката да се свърже с мрежата
и колоните, и "да се чуе характерният звук".
След това мистер Арсений се обърна към заместника на моя
шеф - мистер "Борис" и пренасочи въпроса към него,
а аз, като случаен наблюдател, случайно запомних тази идея
и я нарекох "Задача на тримата началници".
В крайна сметка искахме да е по-добре,
а се получи, цитата - "Но мистер Ерви, както винаги, помогна."
След известно време попитах мистер "Борис"
за мнението му относно написването на малка бележка по този въпрос
в "Хабра", на което "Борис" отговори, че промяната
на "трите пункта в менюто" в Kodi особено не добавя никаква
нова информация и не заслужава отделно споменаване.
Разбира се, напълно съм съгласен с него и затова няма да му разкажа,
че съм написал нещо по този въпрос.
Статията е написана изключително за платката "Raspberry Pi 1"
взета от мистер "Борис" за времето на експеримента,
съвпаденията с другите платки "Raspberry Pi 1" са случайни.
Пожелавам ви повече добри и разнообразни сборки, и нека дори старият ви кирпич да пее тази година.
Източник: habr.com
