La semplice cassa radio internet «Kodi» o la salvezza del «Mattoncino»

La semplice cassa radio internet «Kodi» o la salvezza del «Mattoncino»

Presupposti principali:

  1. C'è una vecchia scheda Raspberry Pi di prima generazione inutilizzata;
  2. La scheda giace sopra un mobile come un peso morto e non viene utilizzata — è la scheda «Mattoncino»;

Cosa si vorrebbe ottenere:

  1. Ad un certo punto (ad esempio in base all'umore)
    la scheda smette di essere un «Mattoncino» e viene inserita una magica scheda di memoria;
  2. Alla scheda viene collegato un cavo Ethernet e un connettore da una normale cassa o cuffie;
  3. Dopo l'accensione, l'ex «Mattoncino» — canta

L'idea principale:

  1. Minimo sforzo per qualsiasi configurazione, nel caso ideale, colleghiamo solo il cavo «Ethernet», l'alimentazione e le casse, e non facciamo altro, per niente «affatto»;
  2. L'ex «Mattoncino» supporta ad esempio 20 stazioni radio internet out-of-the-box, e il cambio tra di esse può essere assegnato alla rotellina del mouse o a un pin GPIO specifico (collegando due fili e chiudendoli (il mio sogno fin da bambino));
  3. Il controllo avviene tramite un canale radio, e questo canale può diventare un normale mouse radio.
  4. Prendi un sistema già pronto, distribuzione assemblata in «Yocto Project»
    cioè, come al solito non dovremo fare nulla, poiché è tutto già fatto.
    (è sufficiente solo posizionare un osservatore esterno dall'altra parte «Televisore»);

Descrizione

Semplice cassa radio Internet «KODI»
L'assemblaggio è destinato a vecchie schede Raspberry Pi 1
(che si trovano a prendere polvere da qualche parte sullo scaffale, ma pronte a lavorare ancora)

Per impostazione predefinita, viene utilizzato un elenco m3u8 di 12 stazioni radio Internet.

Si assume che la scheda funzioni senza uscita HDMI, e per spegnerla è sufficiente staccare l'adattatore di alimentazione dalla presa. Come telecomando ultra moderno, puoi utilizzare il tuo super mouse radio (o collegare un semplice mouse grigio con cavo).

All'accensione, l'interfaccia di rete è configurata per impostazione predefinita tramite protocollo DHCP e viene riprodotta l'ultima stazione radio memorizzata nell'elenco; il controllo del volume di riproduzione è gestito tramite un mouse normale:
(dai finalmente il tuo mouse il titolo di «capo della gestione», e congratulati con lui, se lo merita)

  rotella avanti - aumento del volume
  rotella indietro - diminuzione del volume
  pressione prolungata (3 secondi o più) sul tasto destro del mouse
                   - selezione della stazione radio successiva
  pressione prolungata (3 secondi o più) sul tasto sinistro del mouse
                   - selezione della stazione radio precedente

Per aggiungere la propria lista di stazioni radio Internet
puoi sempre collegare un cavo HDMI dalla TV
e utilizzare l'interfaccia grafica standard di Kodi 17.6
(spegni la scheda, collega l'HDMI e accendi l'adattatore di alimentazione)

Menu principale di Kodi => «Add-ons» => «I miei add-ons»
          => «Client PVR» => «PVR IPTV Simple Client»

Implementazione iniziale

(possibile)
Inizialmente, quando ho deciso di realizzare una «Cassa radio Internet», avevo in mente il seguente progetto:

  • Distribuzione console minimalista nel Yocto Project;
  • Flusso audio riprodotto tramite GStreamer;
  • Interfaccia di rete configurata via DHCP;

E questa soluzione presenta diversi vantaggi:

  1. Abbastanza veloce (tempo di avvio operativo da alimentazione 30-40 secondi);
  2. Abbastanza affidabile (meno programmi, meno punti di guasto);
  3. La distribuzione da console è molto più semplice da mettere in modalità di sola lettura
    cioè, i programmi non scrivono nulla nel file system di root
    (e il file system sul supporto SDHC è, a mio avviso, il primo candidato ai guasti);

Nota:

    In Yocto, converting the root filesystem (rootfs) to read-only mode can be done quite easily by changing a single parameter during the build process. 

By default, Yocto offers two options: 
1) Filesystem operates in normal read/write mode 
(used by all general-purpose distributions, such as Ubuntu) 
2) Filesystem operates in read-only mode 
(used by specialized distributions, for example in routers) 

In read-only mode, all directories where application and service data are usually written during operation are mounted in RAM (for instance, the /var/log directory, etc.). 
This data is only relevant for the current session, and after power loss, the data is lost. 

If you specify "read only" during the build in Yocto Project, your distribution will be set to read-only after the build. 
However, you can always add the ability to dynamically switch from "read only" to "read/write", but that's a different story altogether...
    

And one major drawback:

It has to be done, meaning I need to spend N evenings.
(di solito dopo il lavoro, ed è il momento meno efficace, in quel momento il cervello non ragiona più e di solito dorme)

Inoltre, ho scritto il mio precedente articolo su Habr riguardo al centro multimediale Kodi e Yocto project
e la possibilità di continuare nello stesso modo ha sopraffatto il mio impulso alla ricerca. Di questo parlo nel prossimo capitolo.

Trasformare Kodi in una cassa audio Internet

Per aggiungere la funzionalità che mi serve, aggiungerò un altro metodo alla ricetta per la costruzione del distributore descritta nel precedente articolo vedi il file berserk-image.bb

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

# configurazione per avviare l'ultimo canale TV selezionato (1-sfondo 2-prima linea)
F1_LINE = "<startlast default="true">0</startlast>"
R1_LINE = "<startlast>1</startlast>"
# configurazione dell'uscita audio, l'uscita audio analogica è sempre connessa
F2_LINE = "<audiodevice default="true">PI:HDMI</audiodevice>"
R2_LINE = "<audiodevice>PI:Analogue</audiodevice>"
# poiché l'HDMI non è utilizzato di default, disabilito l'aggiornamento automatico
# altrimenti potrebbe succedere che l'alimentazione si sia spenta, ma i dati siano rimasti non salvati
F3_LINE = "<addonupdates default="true">0</addonupdates>"
R3_LINE = "<addonupdates>2</addonupdates>"


# metodo per aggiungere la configurazione:
# che trasforma "Smart TV" in "semplice cassa Internet Radio"
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"
# poiché l'uscita HDMI potrebbe non essere utilizzata, 
# è necessario disabilitare "il benvenuto all'avvio"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

I metodi sono destinati a modificare il file system radice prima di creare l'immagine della distribuzione in un singolo file raw, che viene scritto sulla scheda di memoria con il comando dd

Si fa in questo modo:
ROOTFS_POSTPROCESS_COMMAND += «add_radio_guisettings; off_kodi_welcome;»

In breve, nel file di configurazione principale di Kodi 17.6, vengono modificati «tre punti»

  • Configurazione della riproduzione dell'ultimo canale TV selezionato;
  • Configurazione dell'uscita audio, sempre collegata solo all'uscita audio analogica;
  • Disattivazione degli aggiornamenti automatici;
  • Nota:
        L'unica cosa con cui ho avuto difficoltà, 
        è stata quella di dover recuperare anche il file del database 
        in formato sqlite => TV29.db, in cui si indica 
        il canale TV attualmente in riproduzione 
        (poiché per impostazione predefinita nessuno dei canali è selezionato), 
        e tramite la configurazione xml in Kodi non è possibile farlo.
        

sequenza di azioni più dettagliata per ciascun punto:

1) Fai clic sull'icona «ingranaggio» nell'angolo in alto a sinistra dello schermo
e seleziona «Impostazioni PVR e TV» (immagine di un televisore con due antenne)
poi nella parte sinistra del menu, seleziona «Riproduzione», e nella sezione centrale «Generale»
seleziona nel menu a discesa «Continua dall'ultimo canale all'avvio»
selezionando l'impostazione «Primo piano»

o in modo più chiaro:

      "Impostazioni PVR e TV" 
       => "Riproduzione" 
       => "Continua dall'ultimo canale all'avvio" => "Primo piano"

2) Clicca sull'icona «ingranaggio» nell'angolo superiore sinistro dello schermo e seleziona:

       "Impostazioni di sistema"  
       => "Componenti aggiuntivi" => "Aggiornamenti" => "Mai controllare aggiornamenti"

3) Clicca sull'icona «ingranaggio» nell'angolo superiore sinistro dello schermo e seleziona:

       "Impostazioni di sistema" 
       => "Audio" => "Dispositivo di uscita audio" => "PI: Analogue"

Come ho guardato la TV in modo errato per due anni.

Devo ammettere che in due anni non sono riuscito a imparare a guardare la TV correttamente.

Di solito guardo la televisione in cucina. Al televisore è collegata una scheda Raspberry Pi 2B, con porte Ethernet e HDMI. L'alimentazione della scheda avviene tramite un normale cavo USB, collegato alla porta USB del televisore, quindi in pratica, accendendo il televisore con il telecomando, si fornisce energia anche alla scheda Raspberry Pi, mentre spegnendo il televisore con il telecomando, si interrompe immediatamente l'alimentazione della scheda Raspberry Pi.

Sì, sono pienamente consapevole che non dovrei farlo, perché il sistema di file radice del centro multimediale Kodi (ext3) funziona in modalità lettura/scrittura regolare. Ma sono una persona pigra e all'inizio ho deciso di verificare per quanto tempo si possa spegnere il sistema prima che smetta definitivamente di caricarsi. Purtroppo, in due anni non ci sono riuscito (forse sono stato solo fortunato, non lo so).

A mio avviso, se questo modo di operare ha funzionato per il mio televisore, funzionerà anche per una semplice radio Internet. Poiché ho disattivato forzatamente l'aggiornamento automatico dei plugin di Kodi, la probabilità di un malfunzionamento del file system diventa ancora minore. Finora non ho riscontrato problemi in merito.

Nota:

    Ma puoi sempre, se lo desideri, utilizzare un comando yocto per 
    IMAGE_FEATURES += "read-only-rootfs"

    e con un po' di magia, rendere il tuo sistema operativo in modalità "read only".
    

La distribuzione della "radio Internet" descritta nell'articolo è domestica, e ciò che è fondamentale per una distribuzione domestica è un'interfaccia utente grafica attraente. A mio avviso, è molto difficile o quasi impossibile insegnare a un utente comune a digitare comandi misteriosi in console, e lui non sa nemmeno di cosa si tratta. Ma per un'interfaccia grafica, nessun problema.

Questo è forse il mio argomento principale a favore di una distribuzione non basata su console. L'interfaccia utente grafica accogliente di Kodi, anche se non è strettamente necessaria, è presente.
(Ho anche completamente dimenticato di menzionare che Kodi può essere controllato da remoto, per esempio dal tuo smartphone, installando l'app "Yatse", e potenzialmente per qualcuno, questo sarà un vantaggio.)

Configurazione di Kodi per il controllo del mouse

e ora Razzo

VolumeSu
          VolumeGiù
          CanaleGiù
          CanaleGiù
          CanaleSu
          <!--

La configurazione sovrascrive gli eventi globali per i seguenti elementi:

  • scorrimento della rotella del mouse in avanti
  • scorrimento della rotella del mouse all'indietro
  • clic sul pulsante centrale del mouse
  • gestione della pressione prolungata del mouse (3 secondi o più),
    0 identificatore del pulsante destro, 1 identificatore del pulsante sinistro

ulteriori informazioni sulla configurazione degli eventi del mouse:

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

Cosa fare se il sistema via cavo non è arrivato

«Ma a casa non ho porte Ethernet libere (o non le ho mai avute)» può esclamare alcuni fortunati possessori delle vecchie schede Raspberry Pi 1 (forse la scheda è stata acquistata per ricerca e così è rimasta sullo scaffale)

E poiché la scheda non ha Wi-Fi integrato, senza connessione Ethernet, non è molto funzionale.

Certo, esiste la possibilità di utilizzare la scheda Raspberry Pi 1 senza Ethernet, ma richiederà alcuni sforzi da parte vostra. Di solito, queste cose sono interessanti da realizzare solo nell'ambito dell'apprendimento di qualcosa di nuovo; cioè, non è un'attività per l'utente medio.

Analizziamo quindi un'ipotesi di utilizzo della scheda senza Ethernet:

È possibile collegare un adattatore USB Wi-Fi esterno, tenendo presente che
l'adattatore deve funzionare bene sotto Linux.

Nota:

    Purtroppo, alcuni adattatori Wi-Fi non funzioneranno. 
    Questo non è un problema specifico della distribuzione presentata in questo articolo, 
    ma piuttosto un problema dei driver specifici degli adattatori Wi-Fi nel kernel Linux. 
    Si può affermare che al momento non è possibile 
    semplicemente andare in negozio e acquistare qualsiasi adattatore Wi-Fi. È più probabile che si debba scegliere un adattatore Wi-Fi 
    da un elenco di modelli meno problematici e che funzionano bene sotto Linux.

    Ho testato solo i seguenti modelli:
    - Adattatore Wi-Fi con chipset Atheros D-Link DWA-126 802.11n (AR9271)
    - Adattatore Wi-Fi NetGear WNDA3200
    - Adattatore Wi-Fi NetGear WNA1100
    - Adattatore Wi-Fi TP-Link TL-WN722N (AR9271)
    - Adattatore Wi-Fi TL-WN322G v3
    - Adattatore Wi-Fi TL-WN422G
    - Adattatore Wi-Fi Asus USB-N53 chipset Ralink RT3572 
    

Se hai già un adattatore USB Wifi, puoi verificare se funziona bene su Linux nel seguente modo:

  • Installa una distribuzione Linux ampiamente utilizzata
    adatta a tutti gli usi, come "Ubuntu Desktop"
  • Scarica il sistema
  • Collega il tuo adattatore USB Wifi
  • Avvia il gestore di rete e prova a connetterti al tuo punto di accesso WiFi
  • Se tutto funziona bene e la tua connessione a internet è stabile, significa che il tuo adattatore è ben supportato e puoi continuare a lavorare per collegarlo a una distribuzione specializzata e forse anche con altre versioni del kernel
    (se no, allora no, purtroppo — è meglio non provarci nemmeno)

Supporto per l'adattatore Wifi esterno su "Raspberry PI"

Per un corretto funzionamento dell'adattatore WiFi su Linux: abbiamo bisogno di due cose:
1) Supporto del kernel Linux per un determinato adattatore Wifi
2) Presenza nel sistema del modulo del kernel per un determinato adattatore Wifi

Prendiamo ad esempio l'adattatore TP-Link TL-WN722N. Ha un'antenna davvero fantastica.
Identifichiamo il chipset su cui funziona la scheda — nel mio caso è "AR9271", nota:

    La cosa interessante è che, per lo stesso modello di uno stesso produttore, il chipset Wifi può variare. Ad esempio, ho notato che per il TL-WN722N versione 2 viene utilizzato un diverso chipset Realtek RTL8188, e questo ha mostrato scarse prestazioni su Linux (all'epoca). Purtroppo è così; a volte è necessario prestare attenzione ai piccoli numeri di versione sul retro (scuro) dell'adattatore.    
    

Ora cerchiamo il nome del parametro nella configurazione del kernel che riguarda il driver per il chipset AR9271; è meglio cercare la combinazione di parole «AR9271 cateee.net».
     Dove «cateee.net» è un ottimo sito che descrive le configurazioni dei moduli del kernel Linux.

Subito troviamo il nome della configurazione del kernel — CONFIG_ATH9K_HTC
e il nome del modulo del kernel necessario per noi. ath9k_htc

E poi basta specificare il nome del modulo necessario nel file del frammento di configurazione.
Kernel Linux => recipes-kernel/linux/files/rbpi.cfg, aggiungi la riga:
CONFIG_ATH9K_HTC=m

In questo modo, in seguito, puoi collegare qualsiasi hardware aggiuntivo al tuo sistema (se è già supportato nel kernel di Linux).

Cosa fare se sei un geek di Habr — costruttore

E crei cose straordinarie, come queste. qui o sei uno studente e sogni di creare qualcosa di simile.

Per iniziare, puoi scegliere uno schermo Touch Screen per RPI su aliexpress, ordinare una batteria appropriata e collegare tutto a una scheda Raspberry Pi 1, 2 o 3 (meglio a 3, poiché ha il Wi-Fi integrato), selezionare un tema per l'interfaccia grafica in Kodi progettato per schermi touch e voilà => potresti ottenere un semplice lettore audio. Certo, sarà abbastanza ingombrante, ma sarà tuo.

  Nota:
  Per assemblare un centro multimediale Kodi sulla scheda più economica 
  Raspberry Pi Zero Wifi in yocto, basta modificare due righe:

  file di configurazione => build/conf/local.conf
      MACHINE = 'raspberrypi0-wifi'

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

  Se la reattività dell'interfaccia di Kodi 17.6, 
  a causa di un solo core della Zero, ti sembra 
  misteriosa, puoi fare un trucco e installare una versione più vecchia, 
  ma molto veloce, come Kodi 15.2, che è più 
  "user-friendly" (a volte il legacy risolve tutto).

Purtroppo non ho il dispositivo per verificare, ma da ciò che sento, dovrebbe funzionare.

Guida rapida all'assemblaggio

    1) Installa le dipendenze di Yocto Project (ad esempio su 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) Scarica e installa Repo:
        mkdir ~/bin
        curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
        chmod a+x ~/bin/repo

    3) Scarica il progetto da 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) Compila il progetto:
        ./shell.sh
        bitbake berserk-image
        
    puoi compilare lo stesso per le schede Raspberry Pi 3B Plus, 3B e 2B:
    repo init -u https://github.com/berserktv/bs-manifest 
              -m raspberry/rocko/radio-0.2.8.xml
    

istruzioni più dettagliate per l'assemblaggio
e la scrittura sulla scheda microSDHC vedi nell'articolo precedente

Post scriptum

Certo, l'idea delle colonne radio Internet è tipica, è ben nota e su Habr troverai numerosi articoli al riguardo, ad esempio qui

E potresti pensare che io abbia semplicemente adattato le requisiti a una soluzione pronta. A questo posso rispondere che no, sono assolutamente sincero.

La storia del signor Ervi

    Credeteci o no, ecco come sono andate le cose:

    Il nostro ufficio si trova accanto a un'azienda che produce vari dispositivi audio, e un giorno il direttore di questa azienda, chiamiamolo signor "Ervi", si è avvicinato al nostro vice direttore della filiale, il signor "Arseniy", e gli ha chiesto quanto fosse difficile far riprodurre un flusso audio su una scheda Raspberry Pi, cioè collegare la scheda alla rete e agli altoparlanti per "sentire un suono caratteristico".

    Dopo ciò, il signor Arseniy si è rivolto al vice del mio capo, il signor "Boris", per girare la domanda a lui, e io, da osservatore esterno, ho casualmente memorizzato questa idea, chiamandola "Il compito dei tre capi".

    Insomma, volevamo fare meglio, ma alla fine è andata così: "Ma il signor Ervi, come al solito, ha aiutato."

    Dopo un po', ho chiesto al signor "Boris" cosa ne pensasse di scrivere un piccolo articolo su questo tema su "Habr", a cui "Boris" ha risposto che modificare "tre voci di menu" in Kodi non aggiunge realmente alcuna nuova informazione e non merita menzione separata. Certo, sono completamente d'accordo con lui e quindi non gli dirò che ho scritto qualcosa a riguardo.

    L'articolo è stato scritto esclusivamente per la scheda "Raspberry Pi 1" presa in prestito dal signor "Boris" per la durata dell'esperimento; ogni somiglianza con altre schede "Raspberry Pi 1" è puramente casuale.
    

Che ci siano molte buone e diverse versioni per te, e che anche quest'anno il tuo ex mattoncino possa cantare.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster