Cel mai simplu radio intern de tip coloană „Kodi” sau salvarea „Cărămizii Malinoase”

Cel mai simplu radio intern de tip coloană „Kodi” sau salvarea „Cărămizii Malinoase”

Principalele premise:

  1. Există o placă veche Raspberry Pi de prima generație, nefolosită;
  2. Placa zace pe birou ca o povară moartă și nu este utilizată - placa „Cărămidă”;

Ce ne-am dori să obținem:

  1. La un moment dat (de exemplu, în funcție de stare)
    placa să nu mai fie „Cărămidă” și să fie introdusă o carte magică de memorie;
  2. La placă se conectează un cablu Ethernet și un conector de boxe sau căști obișnuite;
  3. După alimentare, fostul „Cărămidă” - cântă

Ideea principală:

  1. Numărul minim de mișcări pentru orice setare, în cel mai ideal caz, conectăm doar cablul „Ethernet”, alimentarea și boxele, și nu mai facem nimic, de loc „deloc”;
  2. Fostul „Cărămidă” din cutie susține, de exemplu, 20 de stații radio pe internet, iar comutarea acestora în cerc poate fi legată de apăsarea rotiței mouse-ului sau de un pin GPIO specific (conectăm două fire și le închidem (visul meu din copilărie));
  3. Controlul se face prin canal radio, iar acest canal radio poate deveni un mouse radio obișnuit;
  4. Luați un sistem deja gata, distribuiți-l în cadrul „Yocto Project”
    adică, ca de obicei, noi nu vom face nimic, deoarece totul a fost deja făcut.
    (e suficient să plasăm un observator extern de cealaltă parte „Televizorului”);

Descriere

Cel mai simplu boxă radio pe internet „KODI”
Asamblarea este destinată plăcilor Raspberry Pi 1 mai vechi
(care adună praf pe undeva prin birou, dar care sunt încă pregătite să funcționeze)

În mod implicit, se folosește o listă m3u8 de 12 stații radio pe internet.

Se presupune că placa funcționează fără ieșire HDMI, iar pentru a o opri este suficient să scoateți adaptorul de alimentare din priză. Iar ca o telecomandă ultra-modernă fără fir, puteți folosi mouse-ul dumneavoastră radio superb (sau conectați un mouse obișnuit cu fir).

La activare, interfața de rețea este configurată implicit prin protocolul DHCP și redă ultima stație radio memorată din listă, controlul volumului se efectuează cu un mouse obișnuit:
(în sfârșit, desemnați-vă mouse-ul „șef al controlului” și felicitați-l, l-a meritat)

  roti înainte - creșterea volumului
  roti înapoi - reducerea volumului
  apăsarea îndelungată (3 secunde sau mai mult) pe butonul drept al mouse-ului
                   - selectarea următoarei stații radio
  apăsarea îndelungată (3 secunde sau mai mult) pe butonul stâng al mouse-ului
                   - selectarea stației radio anterioare

Pentru a adăuga propria listă de stații radio Internet
întotdeauna puteți conecta un cablu HDMI de la televizor
și să utilizați interfața grafică standard Kodi 17.6
(deconectați placa, conectați HDMI și porniți adaptorul de alimentare)

Meniu principal Kodi => „Adăugiri” => „Adăugirile mele”
          => „Clienții PVR” => „PVR IPTV Simple Client”

Implementarea inițială

(posibilă)
Inițial, când am decis să fac „Boxa Radio Internet”, am planificat următoarele:

  • Un distribuitor console minimalist în Yocto Project;
  • Fluxul audio este redat prin GStreamer;
  • Interfața de rețea este configurată prin DHCP;

Și o astfel de soluție are o serie de avantaje:

  1. Destul de rapid (timp de intrare în mod de lucru de 30-40 secunde de la alimentare);
  2. Destul de fiabil (mai puține programe, mai puține puncte de eșec);
  3. Distribuția consolei este mult mai ușor de transformat în modul doar citire
    adică, programele nu scriu nimic în sistemul de fișiere rădăcină
    (sistemul de fișiere de pe suportul SDHC este, în opinia mea, primul candidat la eșecuri);

Notă:

    În Yocto, traduceți sistemul de fișiere rădăcină (rootfs) în modul de doar citire destul de simplu, modificând un singur parametru în timpul compilării.  Din cutie, Yocto oferă două opțiuni: 1) Funcționarea sistemului de fișiere în modul normal de citire/scriere (așa funcționează toate distribuțiile de uz general, de exemplu, Ubuntu) 2) Funcționarea sistemului de fișiere în modul de doar citire (așa funcționează distribuțiile specializate, de exemplu, în routere).  În modul de doar citire, toate directoarele în care de obicei sunt scrise datele aplicațiilor și serviciilor în timpul funcționării sunt montate în memoria RAM (de exemplu, directorul /var/log etc.).  Datele sunt valabile doar pentru sesiunea curentă de lucru și după o întrerupere de alimentare, datele se pierd.  Dacă în Yocto Project indicați la compilare să utilizați "read only", atunci, după compilare, distribuția dvs. va fi configurată doar pentru citire, dar întotdeauna puteți adăuga capacitatea de a face tranziția din "read only" în "read/write", dar aceasta este o poveste cu totul diferită...
    

Și un principal dezavantaj:

„Trebuie să-l fac” adică trebuie să investesc un număr de N seri
(de obicei după muncă, iar acesta este cel mai puțin eficient timp, în acest moment creierul nu mai gândește, de obicei doarme)

Și, de asemenea, articolul meu anterior pe Habr a fost despre centrul multimedia Kodi și Yocto project
și posibilitatea de a continua în aceeași direcție mi-a depășit impulsul meu de cercetare. Despre aceasta în capitolul următor.

Transformarea Kodi într-o boxă de radio pe internet

Pentru a adăuga funcționalitatea de care am nevoie, voi adăuga încă o metodă în rețeta de construire a distribuției descrise în precedentul pe care l-ați citit vezi fișierul berserk-image.bb

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

# configurația pornirii ultimului canal TV selectat (1-fon 2-plan de fundal)
F1_LINE = "<startlast default="true">0<\/startlast>"
R1_LINE = "<startlast>1<\/startlast>"
# configurația ieșirii audio, întotdeauna conectată doar ieșirea audio analogică
F2_LINE = "<audiodevice default="true">PI:HDMI<\/audiodevice>"
R2_LINE = "<audiodevice>PI:Analogue<\/audiodevice>"
# deoarece HDMI nu este utilizat implicit, dezactivez actualizarea automată
# altfel ar putea apărea situația în care alimentarea a dispărut, dar datele au rămas nescrise
F3_LINE = "<addonupdates default="true">0<\/addonupdates>"
R3_LINE = "<addonupdates>2<\/addonupdates>"


# metoda răspunde de adăugarea configurației:
# care transformă "Televizor inteligent" în "boxă radio simplă pe Internet"
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"
# deoarece ieșirea HDMI poate să nu fie utilizată, 
# este necesar să dezactivăm "bun venit la pornire"
off_kodi_welcome() {
    sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}

Metodele sunt destinate modificării sistemului de fișiere rădăcină înainte de a forma imaginea distribuției sub forma unui singur fișier raw, care este scris pe cardul de memorie prin comanda dd

Aceasta se face în felul următor:
ROOTFS_POSTPROCESS_COMMAND += «add_radio_guisettings; off_kodi_welcome;»

Pe scurt, în principalul fișier de configurare Kodi 17.6, se schimbă „trei puncte”

  • Configurarea pornirii ultimului canal TV selectat;
  • Configurarea ieșirii audio, întotdeauna conectată doar ieșirea audio analogică;
  • Dezactivarea actualizării automate;
  • Notă:
        Singurul lucru cu care am avut dificultăți, 
        a fost că a trebuit să aduc și fișierul bazei de date 
        în format sqlite => TV29.db, în care este specificat 
        canalul TV curent redat 
        (deoarece implicit niciun canal nu este selectat), 
        și prin configurarea xml în Kodi acest lucru nu se poate face.
        

o secvență detaliată a pașilor pentru fiecare punct:

1) Faceți clic pe pictograma „roată dințată” din colțul din stânga sus al ecranului
și selectați opțiunea „Setări PVR și TV” (imagine cu televizor cu două aripi)
apoi, în partea stângă a meniului, selectați opțiunea „Redare”, iar în secțiunea centrală „General”
specificați în lista derulantă „Continuați cu ultimul canal la pornire”
alegând setarea „Plan de fundal”

sau mai clar:

      "Setările PVR și TV" 
       => "Redare" 
       => "Continuare de pe ultimul canal la pornire" => "În prim-plan"

2) Faceți clic pe pictograma „roată dințată” din colțul din stânga sus al ecranului și selectați opțiunea:

       "Setările sistemului"  
       => "Adăugiri" => "Actualizări" => "Nu verifica niciodată actualizări"

3) Faceți clic pe pictograma „roată dințată” din colțul din stânga sus al ecranului și selectați opțiunea:

       "Setările sistemului" 
       => "Audio" => "Dispozitiv de ieșire audio" => "PI: Analogic"

Cum am privit televizorul greșit timp de doi ani.

Trebuie să vă mărturisesc că, în doi ani, nu am învățat să mă uit la televizor corect.

De obicei, mă uit la televizor în bucătărie. La televizor este conectată o placă Raspberry Pi 2B, iar placa are porturi Ethernet și HDMI. Alimentarea plăcii se face prin cablul USB obișnuit, care este conectat la portul USB al televizorului, adică, practic, pornirea televizorului cu telecomanda standard alimentează și placa Raspberry Pi, iar oprirea televizorului cu telecomanda, de asemenea, deconectează automat alimentarea de la placa Raspberry Pi.

Da, sunt pe deplin conștient că nu ar trebui să fac așa, pentru că sistemul de fișiere rădăcină al centrului multimedia Kodi (ext3) funcționează în mod obișnuit în modul citire/scriere. Dar sunt o persoană leneșă și, pentru început, am decis să verific cât timp pot opri sistemul, până când acesta nu va mai porni deloc, dar, din păcate, în doi ani nu am reușit să fac asta (poate am avut doar noroc, nu știu).

Și, în opinia mea, dacă acest mod a fost potrivit pentru televizorul meu, atunci va fi potrivit și pentru „o simplă boxă de radio pe internet”, iar fiindcă am dezactivat forțat actualizările automate ale plugin-urilor Kodi, probabilitatea de eșec a sistemului de fișiere va fi și mai mică. Deocamdată nu văd probleme cu asta.

Notă:

    Dar oricând, dacă doriți, puteți folosi o singură comandă yocto 
    IMAGE_FEATURES += "read-only-rootfs"

    și puțină magie pentru a schimba distribuția dvs. în modul "read only".
    

Distribuția „boxei de radio pe internet” descrisă în articol este destinată utilizării casnice, iar ceea ce este cel mai important pentru o distribuție casnică - este un GUI frumos. În opinia mea, este foarte greu sau aproape imposibil să înveți un utilizator obișnuit să tasteze comenzi magice neclare în terminal, nici măcar nu știe un cuvânt din acestea. Dar un GUI, este ceva ce se poate utiliza cu ușurință.

Și acesta este, poate, cel mai important argument în favoarea unui sistem de operare non-console. Interfața grafică caldă și primitoare a utilizatorului Kodi, deși nu este neapărat necesară, există.
(Am uitat complet să menționez că Kodi poate fi controlat de la distanță, de exemplu, cu un smartphone, instalând aplicația „Yatse”, și poate, pentru unii, acesta va fi un avantaj.)

Configurarea Kodi pentru controlul cu mouse-ul

iar acum Racheta

VolumeUp
          VolumeDown
          ChannelDown
          ChannelDown
          ChannelUp
          

Configurarea reinterpretează evenimentele generale (global) pentru următoarele elemente:

  • rularea roții mouse-ului în sus
  • rularea roții mouse-ului în jos
  • apăsarea pe butonul din mijloc al mouse-ului
  • gestionarea unei apăsări prelungite a mouse-ului (3 secunde sau mai mult),
    0 identificator pentru butonul din dreapta, 1 identificator pentru butonul din stânga

informații mai detaliate privind configurarea evenimentelor mouse-ului:

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

Ce să faci dacă sistemul de cablu nu a ajuns la tine

„Dar eu nu am porturi Ethernet libere acasă (sau nu am avut niciodată)” - ar putea exclama o parte dintre posesorii fericiți ai vechilor plăci Raspberry Pi 1 (poate placa a fost cumpărată pentru cercetare și așa a rămas pe raft).

Și cum pe placă nu există WiFi încorporat, fără o conexiune Ethernet, aceasta nu este foarte funcțională.

Desigur, există posibilitatea utilizării plăcii Raspberry Pi 1 fără Ethernet, dar va necesita anumite eforturi din partea ta. De obicei, astfel de lucruri sunt interesante de realizat doar în cadrul explorării a ceva nou, adică nu este o activitate de utilizator.

Așadar, să luăm în considerare un scenariu ipotetic de utilizare a plăcii fără Ethernet:

Poți conecta un adaptor USB - WiFi extern, având în vedere că
adaptorul ar trebui să funcționeze bine sub Linux.

Notă:

    Din păcate, o parte dintre adaptoarele WiFi nu vor funcționa, 
    aceasta nu este o caracteristică a distribuției prezentate în acest articol, 
    ci mai degrabă o problemă specifică a driverelor adaptoarelor WiFi în nucleul Linux. 
    Putem afirma că în acest moment nu poți pur și simplu 
    să te duci în magazin și să cumperi orice adaptor WiFi. Mai degrabă, trebuie să alegi un adaptor WiFi 
    din lista celor mai puțin problematice și care funcționează bine sub Linux.

    Am verificat doar următoarele modele:
    - Adaptor WiFi cu chipset Atheros D-Link DWA-126 802.11n (AR9271)
    - Adaptor WiFi NetGear WNDA3200
    - Adaptor WiFi NetGear WNA1100
    - Adaptor WiFi TP-Link TL-WN722N (AR9271)
    - Adaptor WiFi TL-WN322G v3
    - Adaptor WiFi TL-WN422G
    - Adaptor WiFi Asus USB-N53 chipset Ralink RT3572 
    

Dacă deja ai un adaptor USB WiFi, poți verifica cât de bine funcționează sub Linux în felul următor:

  • Instalează o distribuție Linux bine cunoscută
    , de uz general, cum ar fi „Ubuntu Desktop”
  • Încărcați sistemul
  • Conectează adaptorul tău USB WiFi
  • Deschide managerul de rețea și încearcă să te conectezi la punctul tău de acces WiFi
  • Dacă totul funcționează bine și conexiunea ta la internet este stabilă, înseamnă că adaptorul tău este bine suportat și poți continua lucrul de conectare a acestuia într-o distribuție specializată și posibil cu alte versiuni ale nucleului.
    (dacă nu, să nu insistăm, din păcate — mai bine să nu încerci deloc)

Suportul pentru adaptorul WiFi extern pe „Raspberry PI”

Pentru a funcționa corect adaptorul WiFi în Linux, avem nevoie de două lucruri:
1) Suportul din nucleul Linux pentru un anumit adaptor WiFi
2) Existenta în sistem a modulului de nucleu pentru un anumit adaptor WiFi

Să luăm, spre exemplu, adaptorul TP-Link TL-WN722N. Are o antenă superbă.
Să aflăm chipsetul pe care placa funcționează — la mine este „AR9271”, notă:

    ceea ce este interesting este că pentru același model 
    de la același producător, chipsetul WiFi poate varia. 
    Eu, de exemplu, am întâlnit că pentru TL-WN722N versiunea 2, 
    se folosește un alt chipset Realtek RTL8188, care funcționează deja 
    prost sub Linux (pe atunci), din păcate așa stau lucrurile, 
    deci uneori trebuie să te uiți atent la micile cifre 
    de versiune de pe spatele (întunecat) al adaptorului.    
    

Acum să găsim denumirea parametrului din configurația nucleului responsabil pentru driverul chipsetului AR9271, cel mai bine este să căutăm combinația de cuvinte „AR9271 cateee.net”
     unde «cateee.net» — un site grozav cu descrierea configurațiilor modulelor nucleului Linux

Imediat găsim numele configurației nucleului — CONFIG_ATH9K_HTC
și numele modulului de nucleu de care avem nevoie ath9k_htc

și apoi este suficient să specificăm numele modulului dorit în fișierul fragmentului de configurație
Nucleul Linux => recipes-kernel/linux/files/rbpi.cfg, adăugați linia:
CONFIG_ATH9K_HTC=m

Astfel, în continuare, puteți conecta orice echipament suplimentar la sistemul dvs. (bineînțeles, dacă este deja suportat în nucleul Linux)

Ce să faci dacă ești un geek de la Habr — constructor

Și creezi lucruri grozave, cum ar fi aici sau ești student și visezi să creezi ceva similar.

Atunci, la o primă vedere, poți lua un ecran Touch Screen pentru RPI de pe aliexpress, comandați acolo o baterie compatibilă, conectați totul la placa Raspberry Pi 1, 2 sau 3 (mai bine pe 3, deoarece are Wifi încorporat), alegeți un design al interfeței grafice în Kodi, adaptat pentru ecran tactil și voilà => este posibil să obțineți un player audio simplu. Sigur va fi destul de voluminos, dar va fi al vostru.

  Notă:
  A pentru a construi un centru multimedia Kodi pentru cea mai bugetară placă 
  Raspberry Pi Zero Wifi în yocto, este suficient să modificați două linii:

  fișierul de configurație => build/conf/local.conf
      MACHINE = 'raspberrypi0-wifi'

  rețeta de construcție Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
      EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE', 
                            'raspberrypi0-wifi', '${BS_RPI}',  '', d)}"

  Dacă reacția GUI Kodi 17.6 
  din cauza unui nucleu de procesor în Zero ți se va părea 
  misterioasă, atunci se poate face un truc și să construiești o versiune mai veche, 
  dar foarte rapidă, cum ar fi Kodi 15.2, care în acest sens este mai 
  "prietenos" (uneori soluțiile legate de legacy rezolvă tot)

Din păcate, nu am placa, așa că nu o pot verifica, dar, din ceea ce simt, ar trebui să funcționeze.

Instrucțiuni scurte pentru construcție

    1) Instalați dependențele Yocto Project (de exemplu, în 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) Descărcați și instalați Repo:
        mkdir ~/bin
        curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
        chmod a+x ~/bin/repo

    3) Descărcați proiectul de pe 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ți proiectul:
        ./shell.sh
        bitbake berserk-image
        
    Poate fi compilat și pentru plăcile Raspberry Pi 3B Plus, 3B și 2B:
    repo init -u https://github.com/berserktv/bs-manifest 
              -m raspberry/rocko/radio-0.2.8.xml
    

o instrucțiune mai detaliată pentru compilare
și scriere pe cardul microSDHC în articolul anterior

Postscriptum

Desigur, ideea unei coloane de radio pe internet este tipică, este bine cunoscută și pe Habr veți găsi multe articole despre acest subiect, de exemplu aici

Și vă puteți gândi că pur și simplu am adaptat cerințele la o soluție finalizată. La aceasta pot răspunde și spune că nu, cu sinceritate.

Povestea domnului Ervi

    Credeți sau nu, dar iată cum au stat lucrurile:

    Biroul nostru de lucru se învecinează cu o firmă care produce diverse echipamente audio, iar într-o zi, directorul acestei firme, să-i spunem domnul "Ervi", s-a apropiat de adjunctul directorului nostru de filiala, domnul "Arsenie", și i-a cerut să-i spună cât de dificil ar fi să conecteze la un Raspberry Pi redarea unui flux audio, adică placa se conectează la rețea și la difuzoare, iar "se aude un sunet caracteristic".

    După aceea, domnul Arsenie s-a dus la adjunctul șefului meu, domnul "Boriss", și i-a redirecționat întrebarea, iar eu, ca observator din afară, am reținut această idee și am numit-o "Problema celor trei șefi".

    În general, au vrut să fie bine, 
    dar a ieșit, citez - "Dar domnul Ervi, ca de obicei, a ajutat."

    După un timp, l-am întrebat pe domnul "Boriss" ce părere are despre scrierea unei mici note pe această temă pe "Habr", la care "Boriss" a răspuns că modificarea "a trei puncte din meniu" în Kodi nu aduce informații noi și nu merită o mențiune separată. 
    Desigur, sunt complet de acord cu el și de aceea nu-i voi spune că am scris ceva în legătură cu aceasta.

    Articolul este scris exclusiv pentru placa "Raspberry Pi 1" împrumutată de la domnul "Boriss" pentru perioada experimentului, 
    iar asemănările cu toate celelalte plăci "Raspberry Pi 1" sunt întâmplătoare.
    

Vă dorim multe construcții bune și diverse, și să cânte chiar și fostul vostru brick anul acesta.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster