Nejjednodušší internetová rádio reproduktor „Kodi“ nebo záchrana „Malinového“ cihel

Nejjednodušší internetová rádio reproduktor „Kodi“ nebo záchrana „Malinového“ cihel

Hlavní předpoklady:

  1. Existuje stará nepoužívaná deska Raspberry Pi první generace;
  2. Deska leží na skříni jako mrtvá váha a není používána — deska „Cihel“;

Co bych chtěl získat:

  1. V určitém okamžiku (například podle nálady)
    deska přestane být „Cihla“ a do ní se vloží kouzelná paměťová karta;
  2. K desce se připojí Ethernet kabel a konektor od běžného domácího reproduktoru nebo sluchátek;
  3. Po připojení napájení bývalá „Cihla“ — zpívá

Hlavní myšlenka:

  1. Minimální množství pohybů pro jakékoli nastavení, v ideálním případě připojíme pouze „Ethernet“ kabel, napájení a reproduktory, a nic víc neděláme, od slova „úplně“;
  2. Bývalá „Cihla“ z krabice podporuje například 20 internetových rádiových stanic, jejichž přepínání do kolečka lze přiřadit na stisknutí kolečka myši nebo na určitý pin GPIO (připojit dva dráty a spojit je (můj sen od dětství));
  3. Ovládání probíhá rádiovým kanálem, a tímto rádiovým kanálem se může stát obyčejná rádiová myš;
  4. Vezmeme již hotový systém, distribuci sestavíme v „Yocto Project“
    t.j. jako obvykle nic neuděláme, protože vše už bylo uděláno.
    (stačí jen umístit externího pozorovatele na druhou stranu „Televizoru“);

Popis

Nejjednodušší Internet Rádio reproduktor „KODI“
Sestava je určena pro staré desky Raspberry Pi 1
(prachující se někde na skříni, ale které jsou ještě připraveny pracovat)

Ve výchozím nastavení se používá seznam m3u8 ze 12 internetových rádiových stanic.

Předpokládá se, že deska funguje bez HDMI výstupu, a její vypnutí stačí odpojením napájecího adaptéru ze zásuvky. A jako ultra moderní bezdrátový ovladač můžete použít svou super rádiovou myš (nebo připojit obyčejnou šedou s kabelem).

Při zapnutí se síťové rozhraní ve výchozím nastavení nastaví přes protokol DHCP a přehraje poslední zapamatovanou rádiovou stanici ze seznamu, ovládání hlasitosti přehrávání probíhá pomocí běžné myši:
(konečně si určete svou myš jako „šéfku ovládání“, a gratulujte jí, to si zasloužila)

  kolísko dopředu - zvýšení hlasitosti
  kolísko dozadu - snížení hlasitosti
  dlouhé stisknutí (3 sekundy a více) pravého tlačítka myši
                   - výběr další rádiové stanice
  dlouhé stisknutí (3 sekundy a více) levého tlačítka myši
                   - výběr předchozí rádiové stanice

Pro přidání vlastního seznamu internetových rádií
vždy můžete připojit HDMI kabel od televizoru
a využít standardní grafické rozhraní Kodi 17.6
(vypněte desku, připojte HDMI a zapněte napájecí adaptér)

Hlavní menu Kodi => „Doplňky“ => „Moje doplňky“
          => „Klienty PVR“ => „PVR IPTV Simple Client“

Původní implementace

(možná)
Původně, když jsem se rozhodl vytvořit „Internetové Rádio reproduktor“, plánoval jsem následující:

  • Minimalistická konzolová distribuce v Yocto Project;
  • Audiostream je přehráván přes GStreamer;
  • Síťové rozhraní je nastavováno pomocí DHCP;

A takové řešení má řadu výhod:

  1. Dostatečně rychlé (náběh do pracovního režimu od zapnutí napájení 30-40 sekund);
  2. Dostatečně spolehlivé (méně programů, méně bodů selhání);
  3. Konzolová distribuce je mnohem jednodušší převést do režimu pouze pro čtení
    tj. programy nic nezapisují do kořenového souborového systému
    (a souborový systém na SDHC médiu je podle mě prvním kandidátem na selhání);

Poznámka:

    V Yocto lze převést kořenový souborový systém (rootfs) do režimu pouze pro čtení poměrně jednoduše, změnou jednoho parametru během sestavování.  
  V základu Yocto nabízí dvě možnosti:  
  1) Práce souborového systému v běžném režimu čtení/zápis  
  (tak fungují všechny distribuce obecných účelů, například Ubuntu)  
  2) Práce souborového systému v režimu pouze pro čtení  
  (tak fungují specializované distribuce, například v routerech)  
  V režimu pouze pro čtení jsou všechny adresáře, do kterých se obvykle  
  zapisují data aplikací a služeb během chodu, montovány  
  do operační paměti (například adresář /var/log apod.)  
  Data jsou aktuální pouze pro aktuální relaci a po vypnutí  
  napájení se data ztrácejí.  
  Pokud v Yocto Project zařadíte při sestavování používání "read only",  
  pak bude vaše distribuce po sestavení nastavena pouze pro čtení,  
  ale vždy můžete přidat možnost dynamického přepnutí  
  z "read only" na "read/write", ale to už je úplně jiný příběh ...
    

A jeden hlavní nedostatek:

„Musí to být uděláno“, tj. musím strávit N večerů
(obvykle po práci, a to je nejméně efektivní čas, když mozek už nevydává žádné myšlenky, většinou spí)

A také, svůj předchozí článek na Habr jsem psal o multimediálním centru Kodi a Yocto projekt
a možnost pokračovat ve stejném duchu přemohla můj výzkumný vášnivý zájem. O tom v další kapitole.

Převod Kodi na internetovou rádiovou kolonku

Abych přidal požadovanou funkčnost, přidám do receptu pro sestavení distribuce popsaného v předchozím článku viz soubor berserk-image.bb

GUI_SETTINGS = "home/root/.kodi/userdata/guisettings.xml"

# konfigurace zahájení posledního vybraného TV kanálu (1-záznam 2-pozadí)
F1_LINE = "<startlast default="true">0<\/startlast>"
R1_LINE = "<startlast>1<\/startlast>"
# konfigurace výstupu zvuku, vždy připojen pouze analogový audio výstup
F2_LINE = "<audiodevice default="true">PI:HDMI<\/audiodevice>"
R2_LINE = "<audiodevice>PI:Analogue<\/audiodevice>"
# protože HDMI se ve výchozím nastavení nepoužívá, vypínám automatické aktualizace
# jinak by se mohlo stát, že napájení odejde, ale data zůstanou nezapsaná
F3_LINE = "<addonupdates default="true">0<\/addonupdates>"
R3_LINE = "<addonupdates>2<\/addonupdates>"


# metoda odpovídá za přidání konfigurace:
# která proměňuje "Chytrou televizi" na "obyčejnou internetovou rádiovou bednu"
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"
# protože HDMI výstup nemusí být používán,
# je nutné vypnout "úvodní pozdrav"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

Metody jsou určeny k modifikaci kořenového souborového systému před vytvořením obrazu distribuce ve formátu jednoho raw souboru, který se zapíše na kartu paměti příkazem dd

Dělá se to následujícím způsobem:
ROOTFS_POSTPROCESS_COMMAND += „add_radio_guisettings; off_kodi_welcome;“

Pokud to shrnu, v hlavním konfiguračním souboru Kodi 17.6 se mění „tři body“

  • Konfigurace spouštění posledního vybraného TV kanálu;
  • Konfigurace výstupu zvuku, vždy připojen pouze analogový audio výstup;
  • Vypnutí automatických aktualizací;
  • Poznámka:
        Jedná se o jedinou věc, se kterou jsem měl obtíže, 
        že jsem musel přitáhnout databázový soubor 
        ve formátu sqlite => TV29.db, ve kterém je uvedeno 
        aktuálně přehrávaný TV kanál 
        (protože ve výchozím nastavení není žádný kanál vybrán), 
        a to přes xml konfiguraci v Kodi neuděláte.
        

podrobnější sledování kroků pro každý bod:

1) Klikněte na ikonu „ozubeného kolečka“ v levém horním rohu obrazovky
a vyberte položku „Nastavení PVR a TV“ (obrázek televize se dvěma anténkami)
poté v levé části nabídky vyberte položku „Přehrávání“ a v centrální sekci „Obecné“
vyberte v rozbalovacím seznamu „Pokračovat z posledního kanálu při spuštění“
zvolte nastavení „Přední plán“

nebo více názorně:

      "Nastavení PVR a TV" 
       => "Přehrávání" 
       => "Pokračovat z posledního kanálu při spuštění" => "Na pozadí"

2) Klikněte na ikonu „ozubeného kola“ v levém horním rohu obrazovky a vyberte možnost:

       "Systémová nastavení"  
       => "Doplňky" => "Aktualizace" => "Nikdy nekontrolovat aktualizace"

3) Klikněte na ikonu „ozubeného kola“ v levém horním rohu obrazovky a vyberte možnost:

       "Systémová nastavení" 
       => "Zvuk" => "Výstupní zařízení" => "PI: Analogue"

Jak jsem dva roky špatně sledoval televizi.

Musím vám přiznat, že za dva roky jsem se tak ani nenaučil správně sledovat televizi.

Obvykle sleduji televizi v kuchyni. K televizi je připojena deska Raspberry Pi 2B, a na desce jsou ethernetové a HDMI konektory. Napájení desky se dodává přes běžný USB kabel, který je zapojen do USB portu televize, tedy ve skutečnosti zapnutí televize pomocí standardního dálkového ovladače dodává napájení i na desku Raspberry Pi, a vypnutí televize z ovladače také okamžitě přeruší napájení i z desky Raspberry Pi.

Ano, jsem si plně vědom, že to tak dělat nejde, protože kořenový souborový systém multimediálního centra Kodi (ext3) funguje v běžném režimu čtení/zápisu. Ale jsem líný člověk, a pro začátek jsem se rozhodl zkontrolovat, jak dlouho takto mohu systém vypínat, než přestane zcela nab bootovat, ale bohužel během dvou let se mi to tak nepodařilo (možná mi jen štěstí přálo, nevím).

A podle mého názoru, pokud tento režim vyhovoval mé televizi, bude vyhovovat i pro "obyčejnou internetovou rádio jednotku", a protože jsem násilně zakázal automatické aktualizace pluginů Kodi, pravděpodobnost selhání souborového systému se ještě sníží. Prozatím s tím problémy nemám.

Poznámka:

    Ale vždy si můžete pomocí jednoho yocto příkazu 
    IMAGE_FEATURES += "read-only-rootfs"

    a určité magie přepnout váš distribuci do režimu "read only"
    

Distribuce "internetové rádio jednotky", popsaná v článku, je běžná, a co je hlavní pro běžnou distribuci — to je krásné GUI. Podle mého názoru je velmi obtížné nebo skoro nemožné naučit běžného uživatele psát nějaké nejasné magické příkazy do terminálu, ani neví, co to slovo znamená. Ale GUI, to je prosím.

A to je pravděpodobně můj hlavní argument ve prospěch bezkonsolového distribuce. Teplé, útulné grafické uživatelské rozhraní Kodi, i když je vlastně zbytečné, ale existuje.
(Také jsem úplně zapomněl zmínit, že Kodi lze ovládat na dálku, například z telefonu, pokud si nainstalujete aplikaci „Yatse“, a pro někoho to může být plus.)

Konfigurace Kodi pro ovládání myší

a teď Raketa

VolumeUp
          VolumeDown
          ChannelDown
          ChannelDown
          ChannelUp
          

Konfigurace přepisuje globální události pro následující prvky:

  • otáčení kolečka myši dopředu
  • otáčení kolečka myši dozadu
  • stisknutí prostředního tlačítka myši
  • zpracování dlouhého stisknutí myši (3 sekundy a více),
    0 identifikátor pravého tlačítka, 1 identifikátor levého tlačítka

podrobnější informace o nastavení událostí myši:

kodi.wiki/view/Alternative_keymaps_for_mice
kodi.wiki/view/Action_IDs
kodi.wiki/view/Window_IDs

Co dělat, pokud kabelové připojení k vám nedorazilo

„Ale doma nemám žádné volné Ethernet porty (nebo jsem žádné nikdy neměl)“ — může vykřiknout část šťastných majitelů starých desek Raspberry Pi 1 (možná byla deska zakoupena na experimentování a tak skončila zapomenutá na skříni)

A protože deska nemá integrované Wifi, bez Ethernet připojení není příliš funkční.

Samozřejmě, možnost využití desky Raspberry Pi 1 bez Ethernetu existuje, ale bude to vyžadovat určité úsilí z vaší strany. Takové věci obvykle zajímají jen v rámci učení se něčemu novému, tj. to není uživatelsky přívětivá práce.

Takže se podívejme na hypotetickou možnost využití desky bez Ethernetu:

Můžete připojit externí USB — Wifi adaptér, vycházejíc z toho,
že adaptér by měl dobře fungovat pod Linuxem.

Poznámka:

    Bohužel část WiFi adaptérů nebude fungovat, 
    což není vlastností distribuce uvedené v tomto článku, 
    ale spíše problém konkrétních ovladačů WiFi adaptérů v jádru Linuxu. 
    Je třeba konstatovat, že v současnosti nemůžete jednoduše 
    jít do obchodu a koupit jakýkoli WiFi adaptér. Měli byste spíše vybrat WiFi 
    adaptér z méně problematického a dobře fungujícího seznamu pro Linux.

    Zkoumal jsem pouze následující modely:
    - WiFi adaptér na čipové sadě Atheros D-Link DWA-126 802.11n (AR9271)
    - WiFi adaptér NetGear WNDA3200
    - WiFi adaptér NetGear WNA1100
    - WiFi adaptér TP-Link TL-WN722N (AR9271)
    - WiFi adaptér TL-WN322G v3
    - WiFi adaptér TL-WN422G
    - Wifi adaptér Asus USB-N53 čipová sada Ralink RT3572 
    

Pokud již máte USB Wifi adaptér, můžete zkontrolovat, jak dobře funguje pod Linuxem, následujícím způsobem:

  • Nainstalujte nějakou běžnou distribuci Linuxu
    obecného určení, například „Ubuntu Desktop“
  • Spusťte systém
  • Připojte váš Wifi USB adaptér
  • Spusťte správce sítě a pokuste se připojit k vaší WiFi přístupové bodu
  • Pokud vše funguje dobře a vaše internetové připojení je stabilní, znamená to, že váš adaptér je dobře podporován a můžete pokračovat v práci na připojení tohoto adaptéru ve specializované distribuci a možná s jinými verzemi jádra.
    (pokud ne, tak ne, bohužel — lepší ani nezkoušet)

Podpora externího Wifi adaptéru v „Raspberry PI“

Pro správnou funkci WiFi adaptéru v Linuxu potřebujeme dvě věci:
1) Podpora WiFi adaptéru jádrem Linuxu
2) Disponování jádrového modulu pro konkrétní Wifi adaptér v systému

Vezměme si například adaptér TP-Link TL-WN722N. Má prostě vynikající anténu.
Zjistíme čipovou sadu, na které deska pracuje — u mě je to „AR9271“. poznámka:

    Co je zajímavé, je, že pro stejný model 
    stejného výrobce může čipová sada Wifi lišit. 
    Například jsem se setkal s tím, že pro TL-WN722N verze 2, 
    se již používá jiná čipová sada Realtek RTL8188, a ta již 
    špatně fungovala pod Linuxem (v té době), bohužel taková je realita, 
    tj. někdy je třeba také dávat pozor na malé číslice 
    verze na zadní (tmavé) straně adaptéru.    
    

Nyní najdeme název parametru v konfiguraci jádra, který se vztahuje na ovladač čipové sady AR9271, je nejlepší hledat kombinaci slov „AR9271 cateee.net“
     kde «cateee.net» — skvělá stránka s popisem konfigurací modulů jádra Linux

Hned najdeme název konfigurace jádra — CONFIG_ATH9K_HTC
a název potřebného modulu jádra ath9k_htc

a dále stačí uvést název potřebného modulu v souboru fragmentu konfigurace
Linux jádra => recipes-kernel/linux/files/rbpi.cfg, přidejte řádek:
CONFIG_ATH9K_HTC=m

Tímto způsobem můžete připojit jakékoliv dodatečné zařízení k vašemu systému (pokud je samozřejmě podporováno v Linuxovém jádře)

Co dělat, pokud jste hackeři - konstruktéři

A vytváříte úžasné věci, třeba jako zde nebo jste student a sníte o vytvoření něčeho podobného.

Pak můžete vzít nějaký dotykový displej pro RPI na aliexpress, tam také objednat vhodnou akumulátorovou baterii, připojit to vše k desce Raspberry Pi 1, 2 nebo 3 (lépe k 3, protože má zabudované Wifi), vybrat téma grafického rozhraní v Kodi, které je určeno pro dotykovou obrazovku a voilà => můžete mít jednoduchý audio přehrávač. Samozřejmě bude dost objemný, ale bude váš.

  Poznámka:
  A abyste sestavili multimediální centrum Kodi pro nejlevnější desku 
  Raspberry Pi Zero Wifi v yocto, stačí změnit dva řádky:

  konfigurační soubor => build/conf/local.conf
      MACHINE = 'raspberrypi0-wifi'

  recept pro sestavení Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 
                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}"

  Pokud vám bude reagování GUI Kodi 17.6 
  kvůli jednomu procesorovému jádru v Zero připadat 
  záhadné, můžete udělat trik a sestavit starší, 
  ale velmi rychlou verzi, například Kodi 15.2, ta je v tomto ohledu více 
  "přátelská" (někdy starší verze všechno vyřeší)

Bohužel desku nemám, takže to nemohu ověřit, ale podle mých pocitů by to mělo fungovat.

Krátký návod na sestavení

    1) Nainstalujte závislosti Yocto Project (například v 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) Stáhněte a nainstalujte Repo:
        mkdir ~/bin
        curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
        chmod a+x ~/bin/repo

    3) Načtěte projekt z 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) Sestavte projekt:
        ./shell.sh
        bitbake berserk-image
        
    totéž lze také sestavit pro desky Raspberry Pi 3B Plus, 3B a 2B:
    repo init -u https://github.com/berserktv/bs-manifest 
              -m raspberry/rocko/radio-0.2.8.xml
    

podrobnější pokyny pro sestavení
a zápis na microSDHC kartu viz. v předchozím článku

P.S.

Samozřejmě, že myšlenka internetového rádiového reproduktoru je typická, je všem známá a na Habr najdete spoustu článků na toto téma, například zde

A ještě můžete mít pocit, že jsem jen přizpůsobil požadavky hotovému řešení. Na to mohu říct, že ne, opravdu ne.

Příběh pana Ervi

    Chcete-li věřit, nebo ne, stalo se to takto:

    Naše kancelář hraničí s firmou na výrobu různých zvukových
    zařízení, a jednoho dne přistoupil ředitel této firmy, nazvěme ho pan "Ervi"
    k našemu zástupci ředitele pobočky panu "Arseniovi"
    a zeptal se ho, jak složité je připojit Raspberry Pi
    k přehrávání zvukového streamu, tj. deska je připojena k síti
    a reproduktorům, a "zní charakteristický zvuk".

    Po tom pan Arseni přišel k zástupci mého
    šéfa - panu "Borisovi" a přeposlal mu tuto otázku,
    no a já, jako náhodný pozorovatel, si tuto myšlenku zapamatoval
    a nazval ji "Úkol tří šéfů".

    Chtěli jsme to udělat dobře,
    a nakonec to dopadlo tak, jak citace - "Ale pan Ervi, jak je jeho zvykem, pomohl."

    Po nějaké době jsem se pana "Borise" zeptal
    na jeho názor ohledně napsání krátkého článku na toto téma
    na "Habr", na což "Boris" odpověděl, že změna
    "tří položek menu" v Kodi, zvlášť nepřináší žádné
    nové informace a nestojí za samostatné zmínění.
    Samozřejmě s ním zcela souhlasím a proto mu neřeknu,
    že jsem o tom něco napsal.

    Článek je napsán výhradně pro desku "Raspberry Pi 1"
    zapůjčenou od pana "Borise" na dobu experimentu,
    shodou okolností se veškeré ostatní desky "Raspberry Pi 1" shodují.
    

Ať máte co nejvíce různých a dobrých sestavení, a ať pro vás v tomto roce i bývalá cihla - zpívá.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster