Den enkleste internet radiohøjttaler «Kodi» eller redningen af den «Himbeer» mursten

Den enkleste internet radiohøjttaler «Kodi» eller redningen af den «Himbeer» mursten

Grundlæggende forudsætninger:

  1. Der er et gammelt, ubrugt Raspberry Pi printkort af første generation;
  2. Printkortet ligger på hylden som død vægt og er ikke i brug — printkortet er en 'Mursten';

Hvad man gerne vil opnå:

  1. På et bestemt tidspunkt (f.eks. afhængig af humør)
    stopper printkortet med at være en 'Mursten', og der indsættes et magisk microSD-kort;
  2. Der tilsluttes et Ethernet-kabel og stikket fra en almindelig husholdningshøjttaler eller hovedtelefoner;
  3. Når strømmen tændes, er den tidligere 'Mursten' — synger

Hovedideen:

  1. Minimalt antal bevægelser for at foretage nogen indstillinger; i det ideelle tilfælde tilslutter vi kun 'Ethernet'-kablet, strøm og højttalere, og gør ikke mere, overhovedet 'slet ikke';
  2. Den tidligere 'Mursten' understøtter f.eks. 20 internet radiostationer fra kassen, hvor skift af stationer kan navigeres ved at rulle med musen eller ved hjælp af en bestemt GPIO pin (tilslut to ledninger og kortslut dem (min barndomsdrøm));
  3. Kontrollen sker via en radio kanal, og denne radio kanal kan være en almindelig radiomus;
  4. Tag et allerede færdigt system, saml distributionen i 'Yocto Project'
    dvs. som sædvanligt skal vi ikke gøre noget, da alt allerede er gjort.
    (det er kun nødvendigt at placere en ekstern observatør på den anden side 'af TV'et');

Description

Den enkleste Internet Radio højttaler 'KODI'
Samlingen er beregnet til gamle Raspberry Pi 1 kort
(som samler støv et eller andet sted på hylden, men som stadig er klar til at arbejde)

Som standard bruges en m3u8 liste med 12 internet radiostationer.

Det antages, at printkortet fungerer uden HDMI-udgang, og for at slukke det, er det tilstrækkeligt at tage strømadapteren ud af stikkontakten. Og som ultra moderne trådløs fjernbetjening, kan du bruge din super radiomus (eller tilslutte en almindelig mus med ledning).

Når der tændes, konfigureres netværksinterfacet som standard via DHCP-protokollen, og den sidst huskede radiostation fra listen afspilles; volumenjustering foregår med en almindelig mus:
(udnævnt endelig din mus til 'styringsleder', og tillykke med det, den har fortjent det)

  hjul frem - øg lydstyrken
  hjul tilbage - nedsæt lydstyrken
  langvarigt tryk (3 sekunder eller mere) på højre musetast
                   - vælg næste radiostation
  langvarigt tryk (3 sekunder eller mere) på venstre musetast
                   - vælg forrige radiostation

For at tilføje din egen liste over internetradiostationer
kan du altid tilslutte et HDMI-kabel fra fjernsynet
og bruge det indbyggede grafiske interface Kodi 17.6
(sluk for enheden, tilslut HDMI og tænd for strømadapteren)

Hovedmenuen Kodi => «Tilføjelser» => «Mine tilføjelser»
          => «PVR-klienter» => «PVR IPTV Simple Client»

Den oprindelige implementering

(mulig)
I begyndelsen, da jeg besluttede mig for at lave en «Internet Radio-højttaler», planlagde jeg følgende:

  • Minimalistisk konsoldistribution i Yocto Project;
  • Audio-streaming afspilles via GStreamer;
  • Netværksgrænsefladen konfigureres via DHCP;

Og en sådan løsning har flere fordele:

  1. Ret hurtig (opstartstid fra tilslutning af strøm 30-40 sek);
  2. Ret pålidelig (færre programmer, færre fejlpunkter);
  3. Konsoldistributionen er meget lettere at ændre til skrivebeskyttet tilstand
    dvs. programmerne skriver ikke noget i det rodfilsystem
    (og rodfilssystemet på SDHC-mediet er efter min mening den første kandidat til fejl);

Bemærk:

    I Yocto kan rodroot-filsystem (rootfs) nemt skiftes til skrivebeskyttet tilstand ved blot at ændre en enkelt parameter under bygningen. 

Out of the box tilbyder Yocto to muligheder: 
1) Filsystemet fungerer i normal læse/skrive tilstand 
(som alle generelle distributioner, f.eks. Ubuntu) 
2) Filsystemet fungerer i skrivebeskyttet tilstand 
(som specialiserede distributioner, f.eks. i routere) 

I skrivebeskyttet tilstand bliver alle kataloger, hvor der normalt skrives data fra applikationer og tjenester under drift, monteret i RAM (f.eks. kataloget /var/log osv.) 
Data er kun aktuelle for den nuværende driftssession, og efter strømafbrydelse går data tabt. 

Hvis du i Yocto Project angiver at bruge "read only" under bygningen, vil din distribution efter bygning være indstillet til skrivebeskyttet, 
men du kan altid tilføje muligheden for dynamisk at skifte fra "read only" til "read/write", men det er en helt anden historie ...
    

Og en hovedulempen:

"Det skal gøres" dvs. jeg skal bruge N antal aftener
(normalt efter arbejde, og det er den mest ineffektive tid, på dette tidspunkt tænker hjernen ikke, den sover normalt)

Og desuden, min tidligere artikel på Habr handlede om multimediacentret Kodi og Yocto projekt
og muligheden for at fortsætte i samme spor overmandede min forskeriver. Mere om dette i næste kapitel.

At forvandle Kodi til en internet radiokolonne

For at tilføje den ønskede funktionalitet vil jeg tilføje en metode i opskriften til at bygge distributionen beskrevet i den foregående artikel se filen berserk-image.bb

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

# konfiguration af opstart af den sidst valgte tv-kanal (1-baggrund 2-forgrund)
F1_LINE = "0"
R1_LINE = "1"
# konfiguration af lydoutput, altid kun den analoge audiooutput er tilsluttet
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# da HDMI ikke er anvendt som standard, deaktiverer jeg automatisk opdatering
# ellers kan det være, at strømmen er gået, men dataene er ikke gemt
F3_LINE = "0"
R3_LINE = "2"


# metoden tilføjer konfigurationen:
# som forvandler "Smart tv" til "simpel internet radio højtaler"
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"
# da HDMI output muligvis ikke bruges,
# er det nødvendigt at deaktivere "startskærm"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

Metoderne er beregnet til at modificere det rod-fil-system før oprettelsen af distributionens billede i form af en enkelt raw-fil, som skrives til SD-kortet via kommandoen dd

Dette gøres som følger:
ROOTFS_POSTPROCESS_COMMAND += "add_radio_guisettings; off_kodi_welcome;"

Kort sagt, i den vigtigste konfigurationsfil for Kodi 17.6 ændres "tre punkter"

  • Konfiguration af opstart af den sidst valgte tv-kanal;
  • Konfiguration af lydoutput, altid kun den analoge audio output er tilsluttet;
  • Deaktivering af automatisk opdatering;
  • Bemærk:
        Det eneste, jeg havde problemer med, var,
        at jeg også måtte trække databasen ind
        i sqlite-format => TV29.db, som angiver
        den nuværende afspillede tv-kanal
        (da ingen kanaler er valgt som standard),
        og dette kan ikke gøres gennem xml konfiguration i Kodi.
        

mere detaljeret rækkefølge af handlinger for hvert punkt:

1) Tryk på "gear"-ikonet i øverste venstre hjørne af skærmen
og vælg "PVR og tv-indstillinger" (billede af tv med to anteller)
derefter i venstre del af menuen, vælg "Afspilning", og i den centrale sektion "Generelt"
angiv i dropdown-listen "Fortsæt fra den sidste kanal ved opstart"
ved at vælge indstillingen "Forgrund"

eller mere visuelt:

      "Indstillinger for PVR og TV" 
       => "Afspilning" 
       => "Fortsæt med sidste kanal ved opstart" => "Forgrund"

2) Tryk på "gear" ikonet i øverste venstre hjørne af skærmen og vælg:

       "Systemindstillinger"  
       => "Tilføjelser" => "Opdateringer" => "Tjek aldrig for opdateringer"

3) Tryk på "gear" ikonet i øverste venstre hjørne af skærmen og vælg:

       "Systemindstillinger" 
       => "Lyd" => "Lydenhed" => "PI: Analogue"

Hvordan jeg i to år har set TV forkert.

Jeg må indrømme, at jeg i løbet af to år ikke har lært at se TV korrekt.

Normalt ser jeg TV i køkkenet. Til TV'et er der tilsluttet et Raspberry Pi 2B, og til boardet er der Ethernet- og HDMI-porte. Strømmen til boardet leveres gennem et almindeligt USB-kabel, der er tilsluttet USB-porten på TV'et, hvilket betyder, at tænding af TV'et med den originale fjernbetjening også tænder for Raspberry Pi, og når man slukker for TV'et med fjernbetjeningen, slukker det samtidig for strømmen til Raspberry Pi.

Ja, jeg er fuldt ud klar over, at det ikke er ideelt, fordi rodfilssystemet for mediecentret Kodi (ext3) fungerer i almindelig læse/skrive-tilstand. Men jeg er en lat person, og for at starte med besluttede jeg at teste, hvor længe systemet kunne slukkes, indtil det helt holdt op med at starte, men desværre har jeg ikke været i stand til at gøre det i løbet af de to år (måske har jeg bare været heldig, ved ikke).

Og efter min mening, hvis denne tilstand har været passende for mit TV, så vil det også fungere for "simple internet radio højttalere", og da jeg har tvunget automatic opdatering af Kodi-plugins til at være deaktiveret, bliver sandsynligheden for et filsystemfejl endnu mindre. Indtil videre ser jeg ikke nogen problemer med dette.

Bemærk:

    Men hvis du ønsker det, kan du med en yocto-kommando 
    IMAGE_FEATURES += "read-only-rootfs"

    og lidt magi ændre dit distribution til "read only" tilstand.
    

Distributionen af "internet radio højttalere", som beskrives i artiklen, er hjemmebrug, og hvad der er vigtigt for en hjemmebrugs distribution — det er et flot GUI. Efter min opfattelse er det meget svært eller næsten umuligt at lære en almindelig bruger at indtaste nogle uforståelige magiske kommandoer i terminalen, de kender ikke engang det ord. Men GUI, det går fint.

Og det er vist min vigtigste argumentation for ikke at vælge en konsolbaseret distribution. Det varme, hyggelige grafiske brugerinterface i Kodi er måske ikke nødvendigt, men det er der.
(Jeg glemte helt at nævne, at Kodi kan styres på afstand, for eksempel fra en smartphone ved at installere appen 'Yatse', og måske for nogen vil det være et plus.)

Konfiguration af Kodi til musestyring

og nu Raket

VolumeUp
          VolumeDown
          ChannelDown
          ChannelDown
          ChannelUp
          

Konfigurationen omdefinerer globale begivenheder for følgende elementer:

  • rulning af musens hjul fremad
  • rulning af musens hjul bagud
  • tryk på musens midterknap
  • behandling af langt tryk på musen (3 sekunder eller mere),
    0 identificerer højre knap, 1 identificerer venstre knap

mere detaljeret information om indstilling af musens begivenheder:

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

Hvad skal du gøre, hvis kabelsystemet ikke er kommet til dig

„Men jeg har ikke nogen ledige Ethernet-porte derhjemme (eller har aldrig haft nogle)”, kan en del af de lykkelige ejere af gamle Raspberry Pi 1 kort udbringe (måske blev kortet købt til forskning og har bare ligget i skabet).

Og da kortet ikke har indbygget Wifi, så uden Ethernet-forbindelse er det ikke særlig funktionelt.

Selvfølgelig er der mulighed for at bruge Raspberry Pi 1 uden Ethernet, men det vil kræve en del indsats fra din side. Normalt udfører man sådanne ting kun i forbindelse med at lære noget nyt, altså det er ikke brugerarbejde.

Lad os se på et hypotetisk tilfælde af at bruge kortet uden Ethernet:

Du kan tilslutte en ekstern USB - Wifi-adapter, baseret på den overvejelse,
at adapteren skal fungere godt under Linux.

Bemærk:

    Desværre vil nogle WiFi-adaptere ikke fungere. Dette er ikke en funktion af den distribution, der er præsenteret i denne artikel, men snarere et problem med specifikke drivere til WiFi-adaptere i Linux-kernen. Man må konstatere, at man i øjeblikket ikke bare kan gå i butikken og købe hvilken som helst WiFi-adapter. Du skal derimod vælge en WiFi-adapter fra en liste over mindre problematiske og velarbejdende modeller under Linux.

Jeg har kun testet følgende modeller:
- WiFi-adapter med Atheros D-Link DWA-126 802.11n (AR9271) chipset
- 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 chipset 
    

Hvis du allerede har en USB WiFi-adapter, kan du teste, om den fungerer godt under Linux på følgende måde:

  • Installer en populær Linux-distribution
    , for eksempel "Ubuntu Desktop"
  • Start systemet
  • Tilslut din WiFi USB-adapter
  • Åbn netværksadministratoren, og prøv at oprette forbindelse til dit WiFi-adgangspunkt
  • Hvis alt fungerer godt, og din internetforbindelse er stabil, så er din adapter godt understøttet, og du kan fortsætte med at arbejde på at tilslutte denne adapter til en specialiseret distribution og muligvis også med andre kerne-versioner.
    (hvis ikke, så er det desværre bedre at lade være)

Understøttelse af ekstern WiFi-adapter på "Raspberry PI"

For at WiFi-adapteren fungerer korrekt under Linux, skal vi have to ting:
1) Understøttelse af den specifikke WiFi-adapter i Linux-kernen
2) Tilgængelighed af en kerne-modul for den specifikke WiFi-adapter i systemet

Lad os tage adapteren TP-Link TL-WN722N som eksempel. Den har en fantastisk antenne.
Lad os finde chipset, som kortet arbejder på — mit er "AR9271", bemærk:

    det interessante er, at for den samme model fra den samme producent kan WiFi-chipset variere. Jeg har for eksempel oplevet, at TL-WN722N version 2 bruger et andet chipset, Realtek RTL8188, som havde dårlig støtte for Linux (på det tidspunkt), desværre er det sådan, så man skal nogle gange være opmærksom på de små tal på bagsiden (den mørke) af adapteren.    
    

Lad os nu finde navnet på parameteren i kernekonfigurationen, der svarer til driveren for AR9271 chipset, det er bedst at søge efter kombinationen af ordene "AR9271 cateee.net".
     hvor «cateee.net» er en fantastisk side med beskrivelse af konfigurationer af Linux-kernelmoduler

Først finder vi navnet på kernens konfiguration — CONFIG_ATH9K_HTC
og navnet på det ønskede kernelmodul ath9k_htc

og derefter er det nok bare at angive navnet på det ønskede modul i konfigurationsfragmentfilen
Linux-kernen => recipes-kernel/linux/files/rbpi.cfg, tilføj linjen:
CONFIG_ATH9K_HTC=m

På den måde kan du i fremtiden tilslutte hårdvarer til dit system (hvis den selvfølgelig allerede understøttes i Linux-kernen)

Hvad skal du gøre, hvis du er en habra geek — en konstruktør

Og laver fantastiske ting, som for eksempel her eller du er studerende og drømmer om at skabe noget lignende.

Så kan du hurtigt tage en eller anden Touch Screen skærm til RPI fra aliexpress, bestille et passende batteri der, tilslutte det hele til Raspberry Pi 1, 2 eller 3 (bedst til 3, da den har indbygget Wifi), vælge et grafisk interface-tema i Kodi, der er designet til touchscreens, og vupti => du kan få en simpel audioafspiller. Selvfølgelig bliver den noget klodset, men den vil være din.

  Bemærk: 
  A for at samle et Kodi multimediecenter til den billigste plade 
  Raspberry Pi Zero Wifi i yocto, er det nok at ændre to linjer:

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

  opskriften til at bygge Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 
                            'raspberrypi0-wifi', '${BS_RPI}', '', d)}"

  Hvis responsen fra Kodi 17.6 GUI 
  på grund af et enkelt CPU-kerne i Zero virker 
  mystisk, kan du gøre et trick og samle en ældre, 
  men meget hurtigere version, som for eksempel Kodi 15.2, den er i denne henseende mere 
  "brugervenlig" (nogle gange løser legacy det hele)

Desværre har jeg ikke pladen, så jeg kan ikke teste det, men efter min fornemmelse bør det fungere.

Kort vejledning til samling

    1) Installer afhængighederne til Yocto Project (for eksempel 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) Download og installer Repo:
        mkdir ~\/bin
        curl http:\/\/commondatastorage.googleapis.com\/git-repo-downloads\/repo > ~\/bin\/repo
        chmod a+x ~\/bin\/repo

    3) Hent projektet fra 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) Byg projektet:
        .\/shell.sh
        bitbake berserk-image
        
    det samme kan også bygges til Raspberry Pi 3B Plus, 3B og 2B:
    repo init -u https:\/\/github.com\/berserktv\/bs-manifest 
              -m raspberry\/rocko\/radio-0.2.8.xml
    

mere detaljeret vejledning til bygning
og brænding til microSDHC kort sm. i den tidligere artikel

Postskriptum

Selvfølgelig er ideen med internetradiohøjttalere typisk, den er velkendt, og du vil finde mange artikler om dette emne på Habr, for eksempel her

Og du kan også tænke, at jeg bare har tilpasset kravene til den færdige løsning. Til det kan jeg svare, at nej, helt ærligt.

Historien om Mr. Ervi

    Tro det eller ej, men sådan gik det til:

    Vores kontor grænser op til en virksomhed, der fremstiller forskellige lydudstyr, og en dag henvendte direktøren for denne virksomhed, lad os kalde ham mister "Ervy", sig til vores vice direktør for filialen, mister "Arsenij", og spurgte ham, hvor svært det ville være at tilslutte en Raspberry Pi til at afspille lydstrømme, det vil sige at kortet tilsluttes nettet og højttalerne, og "man hører en karakteristisk lyd".

    Efter dette gik mister Arsenij hen til min chefs stedfortræder - mister "Boris" - og videregav spørgsmålet til ham, og jeg, som en tilfældig observatør, huskede denne idé og kaldte den "Tre lederes udfordring".

    Som sagt, ønskede man det bedste, men det blev, citat - "Men mister Ervy hjalp, som altid."

    Efter nogen tid spurgte jeg mister "Boris" om hans mening om at skrive en lille note om dette emne på "Habr", hvortil "Boris" svarede, at ændringen af "tre menupunkter" i Kodi ikke indfører nogen ny information og ikke fortjener særlig omtale. Selvfølgelig er jeg helt enig med ham, og derfor vil jeg ikke fortælle ham, at jeg har skrevet noget om det.

    Artiklen er udelukkende skrevet til kortet "Raspberry Pi 1", lånt fra mister "Boris" under eksperimentet, og sammenfald med andre "Raspberry Pi 1"-kort er tilfældigt.
    

Må du få mange gode og forskellige builds, og lad det endda være, at selv en tidligere mursten synger for dig i år.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster