Den enklaste internetradiohögtalaren «Kodi» eller rÀddningen av «Nostalgiska» tegelstenen

Den enklaste internetradiohögtalaren «Kodi» eller rÀddningen av «Nostalgiska» tegelstenen

GrundlÀggande förutsÀttningar:

  1. Det finns ett gammalt oanvÀnt kretskort av Raspberry Pi första generationen;
  2. Kretskortet ligger pĂ„ hyllan som dödvikt och anvĂ€nds inte — kortet «Tegelsten»;

Vad man skulle vilja uppnÄ:

  1. Vid en viss tidpunkt (till exempel beroende pÄ humöret)
    slutar kortet att vara en «Tegelsten», och det sÀtts in ett magiskt minneskort;
  2. Ett Ethernet-kabel ansluts till kortet samt kontakt frÄn en vanlig hushÄllshögtalare eller hörlurar;
  3. Efter att strömmen ansluts blir den tidigare «Tegelsten» — sjungande

HuvudtankegÄng:

  1. Minsta möjliga rörelser för nÄgon instÀllning, i det allra mest perfekta fallet, kopplar vi bara Ethernet-kabeln, strömmen och högtalarna, och gör ingenting mer, i ordets mening «alls»;
  2. Den tidigare «Tegelsten» kommer ur boxen att stödja till exempel 20 internetradiostationer, och vÀxlingen mellan dem kan kopplas till att trycka pÄ musens scrollhjul eller en viss GPIO-pin (koppla in tvÄ ledningar och kortsluta dem (min barndomsdröm));
  3. Styrningen sker via radiofrekvens, och denna radiofrekvens kan bli en vanlig radiomus;
  4. Ta ett redan fÀrdigt system, distribuera det i «Yocto Project»
    dvs. som vanligt kommer vi ingenting att göra, eftersom allt redan Àr gjort.
    (det rÀcker med att placera en extern observatör pÄ andra sidan «TV:n»);

Beskrivning

Den enklaste Internetradiohögtalaren «KODI»
Byggsatsen Àr avsedd för gamla Raspberry Pi 1-kort
(som samlar damm nÄgonstans pÄ hyllan, men som fortfarande Àr redo att arbeta)

Som standard anvÀnds en lista med m3u8 frÄn 12 internetradiostationer.

Det förvÀntas att kortet fungerar utan HDMI-utgÄng, och för att stÀnga av det rÀcker det att dra ur strömadaptern ur vÀgguttaget. Och som en ultramodern trÄdlös fjÀrrkontroll kan du anvÀnda din supersnabba radiomus (eller koppla in en vanlig med sladd).

Vid aktivering konfigureras nÀtverksgrÀnssnittet som standard via DHCP-protokollet och spelar upp den senaste sparade radiostationen frÄn listan, volymkontrollen för uppspelning görs med en vanlig mus:
(utse Àntligen din mus som «chefen för styrningen», och gratulera den, den förtjÀnar det)

  hjulet framÄt - öka volymen
  hjulet bakÄt - sÀnka volymen
  lÄngtryck (3 sekunder eller mer) pÄ höger musknapp
                   - vÀlj nÀsta radiostation
  lÄngtryck (3 sekunder eller mer) pÄ vÀnster musknapp
                   - vÀlj föregÄende radiostation

För att lÀgga till din egen lista med internetradiostationer
kan du alltid ansluta en HDMI-kabel frÄn TV:n
och anvÀnda den inbyggda grafiska grÀnssnittet Kodi 17.6
(stÀng av kretskortet, anslut HDMI och slÄ pÄ strömadaptern)

Huvudmeny Kodi => "TillÀgg" => "Mina tillÀgg"
          => "PVR-klienter" => "PVR IPTV Simple Client"

Initial implementation

(möjlig)
FrÄn början, nÀr jag beslutade att göra "Internet Radio-högtalaren", planerade jag följande:

  • Minimalistisk konsol-distribution i Yocto Project;
  • Ljudström spelas upp via GStreamer;
  • NĂ€tverksgrĂ€nssnittet konfigureras via DHCP;

Och en sÄdan lösning har flera fördelar:

  1. TillrÀckligt snabbt (upp till driftlÀge frÄn strömtillförsel pÄ 30-40 sekunder);
  2. TillrÀckligt pÄlitligt (fÀrre program, fÀrre felpunkter);
  3. Konsol-distributionen Àr mycket enklare att överföra till skrivskyddat lÀge
    dvs. programmen skriver ingenting till det grundlÀggande filsystemet
    (och filsystemet pÄ SDHC-minnet Àr, enligt min Äsikt, förstahandskandidaten för fel);

AnmÀrkning:

    I Yocto kan den rotfilssystemet (rootfs) stÀllas in pÄ skrivskyddad anvÀndning ganska enkelt genom att Àndra en parameter under byggprocessen.  Som standard erbjuder Yocto tvÄ alternativ: 1) Filssystemets drift i normal lÀge för lÀsning/skrivning (sÄsom alla allmÀnna distributioner, till exempel Ubuntu) 2) Filssystemets drift i skrivskyddat lÀge (sÄsom specialiserade distributioner, till exempel i routrar).  I skrivskyddat lÀge monteras alla kataloger som normalt anvÀnds för att lagra data frÄn program och tjÀnster under drift i RAM-minnet (till exempel katalogen /var/log osv.). Data Àr endast aktuella för den aktuella arbetssessionen och gÄr förlorade efter strömavbrott.  Om du anger i Yocto-projektet att du vill anvÀnda "read only" under byggprocessen, kommer din distribution efter bygget att vara instÀlld pÄ skrivskyddat lÀge, men du kan alltid lÀgga till möjligheten för dynamisk vÀxling frÄn "read only" till "read/write", men det Àr redan en helt annan historia...
    

Och en huvudsaklig nackdel:

"Det mÄste göras" alltsÄ mÄste jag spendera ett antal kvÀllar.
(vanligtvis efter arbete, och det Àr den mest ineffektiva tiden, vid den tiden tÀnker hjÀrnan vanligtvis inte, den sover oftast)

Och dessutom skrev jag min tidigare artikel pÄ Habr om mediecenter Kodi och Yocto projekt
och möjligheten att fortsÀtta i samma stil övervann min forskningsiver. Om detta i nÀsta kapitel.

Att omvandla Kodi till en internet-radiokatalog

För att tillföra den funktionalitet jag behöver, kommer jag att lÀgga till ytterligare en metod i receptet för att bygga den distribution som beskrivs i föregÄende artikeln se filen berserk-image.bb

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

# konfiguration av att starta den senaste valda TV-kanalen (1-bakgrund 2-framplan)
F1_LINE = "0"
R1_LINE = "1"
# konfiguration av ljudutgÄng, alltid ansluten endast analog ljudutgÄng
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# eftersom HDMI som standard inte anvÀnds stÀnger jag av automatisk uppdatering
# annars kan det hÀnda att strömmen försvinner men data förblir oskrivna
F3_LINE = "0"
R3_LINE = "2"


# metoden ansvarar för att lÀgga till konfiguration:
# som förvandlar "Smart TV" till "en enkel internet-radiohögtalare"
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"
# eftersom HDMI-utgÄng kanske inte anvÀnds,
# mÄste vi stÀnga av "startskÀrmen"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

Metoderna Àr avsedda för att modifiera rotsystemet innan skapandet av bildfilen i form av en raw-fil som skrivs till minneskortet med kommandot dd

Det görs pÄ följande sÀtt:
ROOTFS_POSTPROCESS_COMMAND += "add_radio_guisettings; off_kodi_welcome;"

Kort sagt, i huvudkonfigurationsfilen för Kodi 17.6 Àndras "tre punkter"

  • Konfiguration av att starta den senaste valda TV-kanalen;
  • Konfiguration av ljudutgĂ„ng, alltid ansluten endast analog ljudutgĂ„ng;
  • StĂ€ng av automatisk uppdatering;
  • AnmĂ€rkning:
        Det enda jag hade problem med var att jag ocksÄ var tvungen att hÀmta databasen i sqlite-format => TV29.db, dÀr den aktuella TV-kanalen som spelas anges (eftersom ingen kanal vÀljs som standard), och detta kan inte göras genom xml-konfiguration i Kodi.
        

mer detaljerad steg-för-steg för varje punkt:

1) Klicka pÄ kugghjulsikonen i övre vÀnstra hörnet av skÀrmen
och vÀlj "InstÀllningar PVR och TV" (bild pÄ en TV med tvÄ horn)
gÄ dÀrefter till den vÀnstra delen av menyn, vÀlj "Uppspelning", och i den centrala sektionen "AllmÀnt"
ange i rullgardinsmenyn "FortsÀtt frÄn senaste kanalen vid start"
vÀlj instÀllningen "Framplan"

eller mer illustrativt:

      "InstÀllningar för PVR och TV" 
       => "Uppspelning" 
       => "FortsÀtt pÄ senaste kanalen vid start" => "Förgrund"

2) Tryck pÄ "kugghjulsikonen" i det övre vÀnstra hörnet av skÀrmen och vÀlj:

       "SysteminstÀllningar"  
       => "TillÀgg" => "Uppdateringar" => "Kontrollera aldrig uppdateringar"

3) Tryck pÄ "kugghjulsikonen" i det övre vÀnstra hörnet av skÀrmen och vÀlj:

       "SysteminstÀllningar" 
       => "Ljud" => "Utmatningsenhet" => "PI: Analogue"

Hur jag under tvÄ Är har sett pÄ TV fel.

Jag mÄste erkÀnna att jag under tvÄ Är inte har lÀrt mig att se pÄ TV pÄ rÀtt sÀtt.

Vanligtvis ser jag pÄ TV i köket. Till TV:n Àr ett Raspberry Pi 2B-kort anslutet, samt Ethernet- och HDMI-portar. Strömmen till kortet försörjs via en vanlig USB-kabel, som Àr ansluten till USB-porten pÄ TV:n, det vill sÀga att nÀr TV:n slÄs pÄ med den vanliga fjÀrrkontrollen, sÄ fÄr Àven Raspberry Pi ström, och nÀr TV:n stÀngs av med fjÀrrkontrollen, sÄ stÀngs strömmen av Àven till Raspberry Pi.

Ja, jag Àr vÀl medveten om att man inte bör göra sÄ, eftersom den root-filsystemet för mediecentret Kodi (ext3) fungerar i vanlig lÀs-/skrivlÀge. Men jag Àr lat, och först bestÀmde jag mig för att kolla hur lÀnge jag kan stÀnga av systemet innan det helt slutar att starta, men tyvÀrr har jag inte lyckats med det under de tvÄ Är jag har hÄllit pÄ (kanske har jag bara haft tur, jag vet inte).

Och enligt min Äsikt, om ett sÄnt lÀge har fungerat för min TV, sÄ borde det ocksÄ fungera för en "vanlig internet radio högtalare", och eftersom jag tvingat av den automatiska uppdateringen av Kodi-tillÀgg, sÄ minskar Àven risken för filsystemfel. Just nu ser jag inga problem med det.

AnmÀrkning:

    Men om ni sÄ önskar kan ni med en enda yocto-kommandon 
    IMAGE_FEATURES += "read-only-rootfs"

    och viss magi överföra er distribution till "read-only"-lÀge.
    

Distributionen av "internet radio högtalare" som beskrivs i artikeln Ă€r av hushĂ„llsart, och vad som Ă€r viktigt för en hushĂ„llsdistribution — det Ă€r en vacker GUI. Enligt min Ă„sikt Ă€r det mycket svĂ„rt eller nĂ€stan omöjligt att lĂ€ra en vanlig anvĂ€ndare att skriva nĂ„gra oklara magiska kommandon i konsolen, de vet knappt vad ett sĂ„dant ord betyder. Men GUI, det Ă€r en annan sak.

Och det hÀr Àr förmodligen mitt frÀmsta argument för att inte anvÀnda en konsolbaserad distribution. Det mjuka och anvÀndarvÀnliga grafiska grÀnssnittet i Kodi behövs kanske inte, men det finns dÀr.
(Jag glömde helt att nÀmna att Kodi kan styras pÄ distans, till exempel via en smartphone genom att installera appen "Yatse", och för vissa kan detta vara en fördel).

Konfiguration av Kodi för muskontroll.

Och nu Raketen.

VolumeUp
          VolumeDown
          ChannelDown
          ChannelDown
          ChannelUp
          

Konfigurationen ÄsidosÀtter allmÀnna (global) hÀndelser för följande element:

  • skrolla musens hjul framĂ„t
  • skrolla musens hjul bakĂ„t
  • tryck pĂ„ musens mittknapp
  • behandling av lĂ„ngtryck pĂ„ musen (3 sekunder eller mer),
    0 identifierar höger knapp, 1 identifierar vÀnster knapp

mer detaljerad information om konfiguration av musens hÀndelser:

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

Vad göra om kabelsystemet inte kom till dig

"Men jag har inga lediga Ethernet-portar hemma (eller har aldrig haft)" – kanske utbrister nĂ„gra lyckliga Ă€gare av gamla Raspberry Pi 1-kort (kanske kortet köptes för forskning och har legat pĂ„ hyllan).

Och eftersom kortet inte har inbyggt Wifi, sÄ Àr det inte sÀrskilt funktionellt utan Ethernet-anslutning.

SjÀlvklart finns det möjlighet att anvÀnda Raspberry Pi 1 utan Ethernet, men det kommer att krÀva viss anstrÀngning frÄn din sida. Vanligtvis Àr sÄdana saker intressanta att utföra bara inom ramen för att lÀra sig nÄgot nytt, det vill sÀga, det Àr inte anvÀndarens jobb.

SÄ lÄt oss övervÀga ett hypotetiskt scenario dÀr kortet anvÀnds utan Ethernet:

Du kan ansluta en extern USB-Wifi-adapter med den tanken att
adaptern bör fungera bra under Linux.

AnmÀrkning:

    TyvÀrr kommer vissa WiFi-adapter att fungera dÄligt, 
    detta Àr inte ett sÀrdrag hos den distribution som presenteras i denna artikel, 
    utan snarare ett problem med specifika WiFi-adapterdrivrutiner i Linux-kÀrnan. 
    Man kan konstatera att just nu kan du inte bara 
    gÄ till affÀren och köpa vilken WiFi-adapter som helst. Snarare mÄste du vÀlja en WiFi 
    adapter frÄn en lista med mindre problematiska och vÀldefinierade modeller som fungerar bra med Linux.

    Jag har endast testat följande modeller:
    - WiFi-adapter med Atheros D-Link DWA-126 802.11n (AR9271)
    - WiFi-adapter NetGear WNDA3200
    - WiFi-adapter NetGear WNA1100
    - WiFi-adapter TP-Link TL-WN722N (AR9271)
    - WiFi-adapter TL-WN322G v3
    - WiFi-adapter TL-WN422G
    - WiFi-adapter Asus USB-N53 med Ralink RT3572 chipsets 
    

Om du redan har en USB WiFi-adapter kan du kontrollera om den fungerar vÀl med Linux genom att göra följande:

  • Installera en allmĂ€nt brukad Linux-distribution
    , till exempel "Ubuntu Desktop"
  • Starta systemet
  • Anslut din USB WiFi-adapter
  • Öppna nĂ€tverksadministratören och försök koppla upp dig till din WiFi-accesspunkt
  • Om allt fungerar bra och din internetanslutning Ă€r stabil, betyder det att din adapter stöds vĂ€l och du kan fortsĂ€tta med att ansluta denna adapter i den specialiserade distributionen och eventuellt med andra kĂ€rnversioner.
    (om det inte funkar, sĂ„ funkar det inte, tyvĂ€rr — det Ă€r bĂ€st att inte ens försöka)

Stöd för externa WiFi-adapter med "Raspberry PI"

För att WiFi-adaptern ska fungera korrekt i Linux behöver vi tvÄ saker:
1) Stöd frÄn Linux-kÀrnan för den specifika WiFi-adaptern
2) NÀrvaro av en kÀrnmodul i systemet för den specifika WiFi-adaptern

LÄt oss ta adaptern TP-Link TL-WN722N som exempel. Den har en utmÀrkt antenn.
LĂ„t oss leta upp chipsetet som kortet anvĂ€nder — i mitt fall Ă€r det "AR9271", notering:

    Det intressanta Àr att för en och samma modell 
    frÄn samma tillverkare kan WiFi-chipsetet variera.
    Jag har till exempel stött pÄ att TL-WN722N version 2 
    anvÀnder redan ett annat chipset, Realtek RTL8188, och det fungerade 
    dÄligt med Linux (vid den tidpunkten), tyvÀrr sÄ Àr det sÄ, 
    dvs. ibland mÄste man ocksÄ kika pÄ de smÄ siffrorna 
    i versionsnummer pÄ baksidan (den mörka) av adaptern.    
    

Nu ska vi hitta namnet pÄ parametern i kÀrnkonfigurationen som Àr ansvarig för drivrutinen för AR9271 chipsetet, det Àr bÀst att söka efter kombinationen av orden "AR9271 cateee.net"
     dĂ€r «cateee.net» — en fantastisk webbplats med beskrivningar av konfigurationer av Linux-kĂ€rnmoduler

Vi börjar med att hitta namnet pĂ„ kĂ€rnkonfigurationen — CONFIG_ATH9K_HTC
och namnet pÄ den modul vi behöver ath9k_htc

och dÀrefter rÀcker det att ange namnet pÄ den modulen i konfigurationsfragmentfilen
Linux kÀrna => recipes-kernel/linux/files/rbpi.cfg, lÀgg till raden:
CONFIG_ATH9K_HTC=m

PÄ sÄ sÀtt kan du sedan ansluta vilken ytterligare hÄrdvara som helst till ditt system (om den sjÀlvklart redan stöds i Linux-kÀrnan)

Vad ska du göra om du Ă€r en hacker — konstruktör

Och bygger fantastiska saker, till exempel sÄdana som hÀr eller om du Àr student och drömmer om att skapa nÄgot liknande.

DÄ kan du snabbt ta nÄgon typ av pekskÀrm för RPI frÄn aliexpress, ocksÄ bestÀlla ett passande batteri, koppla allt detta till Raspberry Pi 1, 2 eller 3 (bÀttre till 3, eftersom den har inbyggd Wifi), vÀlja ett tema för den grafiska anvÀndargrÀnssnittet i Kodi som Àr designat för pekskÀrm, och vips => kan du fÄ en enkel ljudspelare. SjÀlvklart kommer den att vara ganska skrymmande, men den kommer att vara din.

  Obs:
  För att bygga en multimedia-center Kodi för den mest budgetvÀnliga kortet
  Raspberry Pi Zero Wifi i yocto rÀcker det med att Àndra tvÄ rader:

  konfigurationsfil => build/conf/local.conf
      MASKIN = 'raspberrypi0-wifi'

  recept för att bygga Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MASKIN',
                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}"

  Om responsen i GUI Kodi 17.6
  pÄ grund av en processorkÀrna i Zero verkar
  mystisk för dig, kan du göra en fin trick och bygga en Àldre,
  men mycket snabb version, till exempel Kodi 15.2, den Àr mer
  "vÀnlig" (ibland löser legacy allt)

TyvÀrr har jag inte kortet, sÄ jag kan inte kontrollera, men efter mina kÀnslor borde det fungera.

Kort instruktion för byggande

    1) Installera Yocto Project-beroenden (till exempel i 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) Ladda ner och installera Repo:
        mkdir ~\/bin
        curl http:\/\/commondatastorage.googleapis.com\/git-repo-downloads\/repo > ~\/bin\/repo
        chmod a+x ~\/bin\/repo

    3) Ladda ner projektet frÄn 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) Bygg projektet:
        .\/shell.sh
        bitbake berserk-image
        
    samma sak kan ocksÄ byggas för Raspberry Pi 3B Plus, 3B och 2B:
    repo init -u https:\/\/github.com\/berserktv\/bs-manifest 
              -m raspberry\/rocko\/radio-0.2.8.xml
    

en mer detaljerad bygginstruktion
och registrering pÄ microSDHC-kortet. i den tidigare artikeln

Postscript

SjÀlvklart Àr idén med en internet-radiohögtalare typisk, den Àr allmÀnt kÀnd och pÄ Habr hittar du mÄnga artiklar om detta Àmne, till exempel hÀr

Och du kan ocksÄ tÀnka att jag bara anpassade kraven till den fÀrdiga lösningen. Till det kan jag svara att nej, Àrligt talat.

Historien om Mr. Ervi

    Trots att du tror eller inte, sÄ hÀr var det:

    VÄrt kontor grÀnsar till ett företag som producerar ljudutrustning, och en dag kom chefen för detta företag, lÄt oss kalla honom herr "Ervi", fram till vÄr bitrÀdande filialchef, herr "Arsenij", och frÄgade honom hur svÄrt det Àr att fÄ en Raspberry Pi-kort att spela upp ljudström, det vill sÀga att kortet ansluts till nÀtverket och högtalarna, och "ljudet hörs.".

    Efter detta gick herr Arsenij till min chef, herr "Boris", och vidarebefordrade frÄgan till honom, och jag, som en oberoende observatör, rÄkade komma ihÄg denna idé och kallade den "Tre chefers uppgift".

    I allmÀnhet ville man vÀl, men det blev, som citatet sÀger - "Men herr Ervi hjÀlpte, som alltid."

    Snart frÄgade jag herr "Boris" om hans Äsikt angÄende att skriva en kort notering om detta Àmne pÄ "Habr", varpÄ "Boris" svarade att Àndringen av "tre menypunkter" i Kodi, inte tillförde nÄgon ny information och inte förtjÀnar sÀrskild uppmÀrksamhet. SjÀlvklart hÄller jag helt med honom och dÀrför kommer jag inte att berÀtta för honom att jag skrivit nÄgot om detta.

    Artikeln Àr skriven uteslutande för "Raspberry Pi 1", lÄnad frÄn herr "Boris" under experimentet, och sammantrÀffandet med andra "Raspberry Pi 1"-kort Àr slumpmÀssigt.
    

MÄ du fÄ mÄnga bra och olika installationer, och mÄ till och med en gammal tegelsten sjunga för dig i Är.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster