
Belangrijke voorwaarden:
- Er is een oude, ongebruikte Raspberry Pi 1-bord;
- Het bord ligt op de kast als dode last en wordt niet gebruikt - het bord is een 'Baksteen';
Wat ik graag zou willen bereiken:
- Op een bepaald moment (bijvoorbeeld naar humeur)
verliest het bord zijn 'Baksteen' status en wordt er een magische SD-kaart in geplaatst; - Er wordt een Ethernet-kabel en een stekker van een gewone huishoudspeaker of koptelefoon op het bord aangesloten;
- Na het inschakelen is de voormalige 'Baksteen' - aan het zingen;
Het belangrijkste idee:
- Minimale bewegingen voor enige configuratie, in het ideale geval sluiten we alleen de 'Ethernet'-kabel, de voeding en de speakers aan, en verder doen we helemaal niets. Dat wil zeggen, helemaal niets;
- De voormalige 'Baksteen' ondersteunt standaard bijvoorbeeld 20 internetradiostations, het wisselen van stations kan gedaan worden door het scrollwiel van de muis of door een bepaalde GPIO-pin aan te sluiten (verbinden van twee draden en deze aan te sluiten (mijn kinderdroom));
- De bediening vindt plaats via een radiofrequentiekanaal, en dit kanaal kan een gewone radiomuis zijn;
- Neem een kant-en-klaar systeem, maak de distributie met de 'Yocto Project';
Dat wil zeggen, zoals gewoonlijk hoeven we niets te doen, alles is al gedaan.
(het is genoeg om een externe waarnemer aan de andere kant te plaatsen 'van de televisie',);
Omschrijving
De eenvoudigste internet radio speaker 'KODI'
De assemblage is bedoeld voor oude Raspberry Pi 1-borden
(die stof verzamelen op een kast, maar nog steeds voor werk klaar zijn)
Standaard wordt er een m3u8-lijst van 12 internetradiostations gebruikt.
Er wordt aangenomen dat het bord zonder HDMI-uitgang werkt, en om het uit te schakelen hoeft u alleen de voedingsadapter uit het stopcontact te trekken. En als ultra-moderne draadloze afstandsbediening kunt u uw superradiomuis gebruiken (of gewoon een normale met een draad aansluiten).
Bij inschakeling wordt de netwerkinstelling standaard geconfigureerd via het DHCP-protocol en wordt het laatste opgeslagen radiostation uit de lijst afgespeeld, het volume kan met een gewone muis worden bediend:
(maak eindelijk je muis de 'beheerder van de bediening' en feliciteer haar, ze heeft het verdiend)
scroll forward - verhogen van het geluidsvolume
scroll backward - verlagen van het geluidsvolume
langdurig indrukken (3 seconden of langer) van de rechter muisknop
- selecteren van de volgende radiozender
langdurig indrukken (3 seconden of langer) van de linker muisknop
- selecteren van de vorige radiozender
Om uw eigen lijst van internet radiozenders toe te voegen
kunt u altijd een HDMI-kabel van de tv aansluiten
en gebruik maken van de standaard grafische interface van Kodi 17.6
(schakel de kaart uit, sluit HDMI aan en zet de voedingsadapter aan)Hoofmenu Kodi => "Add-ons" => "Mijn add-ons"
=> "PVR-cliënten" => "PVR IPTV Simple Client"
Initiële implementatie
(mogelijk)
Oorspronkelijk, toen ik besloot om een "Internet Radio speaker" te maken, had ik het volgende gepland:
- Minimalistische console distributie in het Yocto Project;
- Audio stream wordt afgespeeld via GStreamer;
- Netwerkinterface wordt geconfigureerd via DHCP;
En zo'n oplossing heeft verschillende voordelen:
- Vrij snel (opstarten naar de werkmodus na inschakelen 30-40 seconden);
- Vrij betrouwbaar (minder programma's, minder storingspunten);
- Console distributie is veel gemakkelijker om over te zetten naar een alleen-lezen modus
d.w.z. programma's schrijven niets naar het hoofdsysteem
(en het bestandssysteem op het SDHC-drager is naar mijn mening de eerste kandidaat voor storingen);
Opmerking:
In Yocto is het relatief eenvoudig om het root filesystem (rootfs) om te zetten naar alleen-lezen modus door één parameter tijdens de bouw te wijzigen. Yocto biedt uit de doos twee opties: 1) Normale werking van het bestandssysteem in lees/schrijf modus (dit is hoe alle algemene distributies werken, zoals Ubuntu). 2) Werking van het bestandssysteem in alleen-lezen modus (dit is hoe gespecialiseerde distributies werken, zoals in routers). In alleen-lezen modus worden alle mappen waarin normaal gesproken applicatie- en servicegegevens worden geschreven tijdens gebruik, in het RAM gemonteerd (bijvoorbeeld de map /var/log en dergelijke). Gegevens zijn alleen actueel voor de huidige sessie; na stroomuitval gaan de gegevens verloren. Als u in het Yocto Project aangeeft tijdens de bouw gebruik te maken van "read only", dan zal uw distributie na de bouw alleen-lezen zijn ingesteld, maar u kunt altijd de mogelijkheid toevoegen om dynamisch om te schakelen van "read only" naar "read/write", maar dat is weer een heel ander verhaal...
En één groot nadeel:
"Het moet gedaan worden" dat wil zeggen dat ik een aantal avonden moet investeren
(meestal na het werk, en dat is de meest onproductieve tijd, dan denkt de hersenen al niet meer, ze zijn meestal aan het slapen)
En bovendien, mijn vorige artikel op Habr ging over een multimedia centrum project
en de mogelijkheid om in hetzelfde kader verder te gaan, overwon mijn onderzoeksdrang. Dit in het volgende hoofdstuk.
Kodi omtoveren tot een internet radio speaker
Om de benodigde functionaliteit toe te voegen, zal ik nog een methode aan het recept voor de bouw van de distributie, zoals beschreven in het vorige zie bestand berserk-image.bb
GUI_SETTINGS = "home/root/.kodi/userdata/guisettings.xml"
# configuratie voor het starten van het laatst gekozen televisiekanaal (1-achtergrond 2-voorkant)
F1_LINE = "0"
R1_LINE = "1"
# configuratie van de audio-uitgang, altijd alleen analoge audio-uitgang verbonden
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# aangezien HDMI standaard niet gebruikt wordt, schakel ik de automatische updates uit
# anders kan het zijn dat de voeding weg is, maar de data niet opgeslagen zijn
F3_LINE = "0"
R3_LINE = "2"
# methode die verantwoordelijk is voor het toevoegen van configuratie:
# die "Smart TV" verandert in een "simpele Internet Radio speaker"
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"
# aangezien de HDMI-uitgang mogelijk niet gebruikt wordt,
# moet de "startgroet" worden uitgeschakeld
off_kodi_welcome() {
sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}
De methoden zijn bedoeld voor het aanpassen van het root-bestandssysteem voordat het beeld van de distributie in de vorm van één raw bestand wordt gegenereerd, dat met een commando op een geheugenkaart wordt geschreven dd
Dit gebeurt als volgt:
ROOTFS_POSTPROCESS_COMMAND += "add_radio_guisettings; off_kodi_welcome;"
Kortom, in het belangrijkste configuratiebestand van Kodi 17.6 worden "drie punten" gewijzigd
- Configuratie voor het starten van het laatst gekozen televisiekanaal;
- Configuratie van de audio-uitgang, altijd alleen analoge audio-uitgang verbonden;
- Uitschakelen van automatische updates;
- Opmerking:
Het enige waar ik problemen mee had, is dat ik ook het databasebestand in sqlite-formaat moest toevoegen => TV29.db, waarin wordt opgegeven welk televisiekanaal momenteel wordt afgespeeld (aangezien standaard geen van de kanalen is gekozen), dit kan niet via xml-configuratie in Kodi worden gedaan.
meer gedetailleerde stappen voor elk punt:
1) Klik op het "tandwiel"-icoon linksboven op het scherm
en selecteer het onderdeel "PVR en TV-instellingen" (schermpictogram met twee hoorns)
Kies vervolgens in het linkerdeel van het menu de optie "Afspelen" en in het centrale gedeelte "Algemeen"
geef in de vervolgkeuzelijst "Doorgaan met het laatste kanaal bij opstarten" aan
door de instelling "Voorkant" te kiezen
of meer visueel:
"PVR en TV-instellingen"
=> "Afspelen"
=> "Doorgaan met het laatste kanaal bij opstarten" => "Voorgrond"
2) Klik op het tandwielpictogram in de linker bovenhoek van het scherm en kies:
"Systeeminstellingen"
=> "Add-ons" => "Updates" => "Nooit updates controleren"
3) Klik op het tandwielpictogram in de linker bovenhoek van het scherm en kies:
"Systeeminstellingen"
=> "Audio" => "Geluid uitvoerapparaat" => "PI: Analoog"
Hoe ik twee jaar lang verkeerd televisie keek.
Ik moet je bekennen dat ik na twee jaar nog steeds niet heb geleerd om goed televisie te kijken.
Normaal kijk ik televisie in de keuken. De televisie is aangesloten op een Raspberry Pi 2B, en de kaart heeft Ethernet en HDMI aansluitingen. De voeding van de kaart wordt geleverd via een normale USB-kabel, die is aangesloten op de USB-poort van de televisie, wat betekent dat het inschakelen van de televisie met de afstandsbediening ook de Raspberry Pi van stroom voorziet, en het uitschakelen van de televisie met de afstandsbediening trekt ook meteen de voeding van de Raspberry Pi.
Ja, ik ben me er goed van bewust dat dit niet de juiste manier is, omdat het root-bestandssysteem van het Kodi-mediacenter (ext3) in een standaard lees/schrijfmodus functioneert. Maar ik ben een luie persoon, en in eerste instantie wilde ik testen hoe lang ik het systeem op deze manier kan uitschakelen, totdat het volledig stopt met opstarten. Helaas is het me dit in twee jaar niet gelukt (misschien heb ik gewoon geluk gehad, ik weet het niet).
En naar mijn mening, als deze modus geschikt is voor mijn televisie, dan zou hij ook goed moeten werken voor een "gewone Internet Radio-luidspreker", en omdat ik de automatische update van Kodi-add-ons geforceerd heb uitgeschakeld, wordt de kans op een storing van het bestandssysteem nog kleiner. Tot nu toe zie ik daar geen problemen mee.
Opmerking:
Maar je kunt altijd met behulp van één yocto-commando
IMAGE_FEATURES += "read-only-rootfs"
en een bepaalde magie je distributie overzetten naar de "read-only" modus.
De distributie "internet radio-luidspreker" die in dit artikel wordt beschreven, is voor huishoudelijk gebruik, en wat het belangrijkste is voor een huishoudelijke distributie — dat is een mooie GUI. Naar mijn mening is het erg moeilijk of bijna onmogelijk om een gewone gebruiker te leren onbegrijpelijke magische commando's in de console in te voeren; hij weet zelfs niet echt wat zoiets is. Maar een GUI, dat is geen probleem.
Dit is waarschijnlijk mijn belangrijkste argument om geen console-distributie te kiezen. De warme, sfeervolle grafische gebruikersinterface van Kodi is misschien niet essentieel, maar hij is er.
(Ik ben volledig vergeten te vermelden dat Kodi op afstand kan worden bestuurd, bijvoorbeeld via een smartphone met de 'Yatse'-app, en voor sommigen kan dit een voordeel zijn.)
Configuratie van Kodi voor bediening met de muis
en nu de Rocket
VolumeUp
VolumeDown
ChannelDown
ChannelDown
ChannelUp
De configuratie overschrijft algemene (global) gebeurtenissen voor de volgende elementen:
- scrollen met het muiswiel naar voren
- scrollen met het muiswiel naar achteren
- klik op de middelste muisknop
- verwerking van een lang indrukken van de muis (3 seconden of meer),
0 is de identificatie van de rechtermuisknop, 1 is de identificatie van de linkermuisknop
meer gedetailleerde informatie over het instellen van muisgebeurtenissen:
Wat te doen als uw kabelsysteem niet is aangekomen
"Maar ik heb thuis geen vrije Ethernet-poorten (of heb ze nooit gehad)" — kan een van de gelukkige bezitters van oude Raspberry Pi 1-borden roepen (misschien is het bord aangeschaft voor onderzoek en ligt het nu stof te vergaren op de plank).
Aangezien het bord geen ingebouwde Wifi heeft, is het zonder Ethernet-verbinding niet erg functioneel.
Natuurlijk is het mogelijk om de Raspberry Pi 1 zonder Ethernet te gebruiken, maar dit vereist wel enige inspanning van uw kant. Dergelijke dingen zijn meestal interessant om uit te voeren in het kader van het leren van iets nieuws, dus dit is geen gebruikelijke taak.
Laten we dus een hypothetisch scenario bekijken van het gebruik van het bord zonder Ethernet:
U kunt een externe USB-Wifi-adapter aansluiten, ervan uitgaande dat
de adapter goed zou moeten functioneren onder Linux.
Opmerking:
Helaas werkt een deel van de WiFi-adapters niet, dit is niet een kenmerk van de distributie die in dit artikel wordt gepresenteerd, maar eerder een probleem van specifieke WiFi-adapterdrivers in de Linux-kernel. We kunnen concluderen dat je momenteel niet gewoon naar de winkel kunt gaan en elke WiFi-adapter kunt kopen. Je moet eerder een WiFi-adapter uit een lijst van minder problematische en goed werkende adapters onder Linux selecteren.
Ik heb alleen de volgende modellen gecontroleerd:
- WiFi-adapter met 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 chipset Ralink RT3572
Als je al een USB WiFi-adapter hebt, kun je controleren of deze goed werkt onder Linux als volgt:
- Installeer een algemeen verspreide Linux-distributie
zoals 'Ubuntu Desktop' - Start het systeem op
- Sluit je Wifi USB-adapter aan
- Start de netwerkmanger en probeer verbinding te maken met jouw WiFi-toegangspunt
- Als alles goed werkt en je internetverbinding stabiel is, betekent dit dat je adapter goed wordt ondersteunt en je verder kunt gaan met het aansluiten van deze adapter op een gespecialiseerde distributie, mogelijk met andere versies van de kernel.
(Als dat niet zo is, tja, het is beter om het niet eens te proberen.)
Ondersteuning voor externe WiFi-adapter op de 'Raspberry PI'
Voor een correcte werking van de WiFi-adapter in Linux hebben we twee dingen nodig:
1) Ondersteuning van de Linux-kernel voor de specifieke WiFi-adapter
2) Beschikbaarheid van een kernelmodule voor de specifieke WiFi-adapter in het systeem.
Laten we als voorbeeld de adapter TP-Link TL-WN722N nemen. Hij heeft gewoon een geweldige antenne.
Laten we de chipset vinden waar het bord op werkt - dat is voor mij 'AR9271', opmerking:
het interessante is dat voor hetzelfde model van dezelfde fabrikant de WiFi-chipset kan verschillen. Ik ben bijvoorbeeld tegengekomen dat voor TL-WN722N versie 2 een andere chipset Realtek RTL8188 wordt gebruikt, en die werkte toen slecht onder Linux, helaas, zo zijn de dingen, soms moet je ook de kleine cijfers op de achterkant van de adapter in de gaten houden.
Laten we nu de parameternaam in de kernelconfiguratie vinden die verantwoordelijk is voor de driver van de AR9271-chipset, het is het beste om te zoeken naar de combinatie van woorden 'AR9271 cateee.net'.
waar «cateee.net» — een geweldige site met beschrijvingen van kernelmoduleconfiguraties van Linux
Zo vinden we meteen de naam van de kernelconfiguratie — CONFIG_ATH9K_HTC
en de naam van de gewenste kernelmodule ath9k_htc
en dan is het voldoende om de naam van de gewenste module op te geven in het configuratiefragmentbestand
Linux kernel => recipes-kernel/linux/files/rbpi.cfg, voeg de regel toe:
CONFIG_ATH9K_HTC=m
Op deze manier kun je in de toekomst elke extra hardware aan je systeem aansluiten (tenzij deze al ondersteund wordt in de Linux-kernel)
Wat te doen als je een Habra geek bent — een bouwer
En je maakt geweldige dingen, zoals of je bent student en droomt ervan om iets soortgelijks te maken.
Dan kun je bijvoorbeeld een of andere Touch Screen scherm voor RPI op aliexpress nemen, daar ook een geschikte accubatterij bestellen, al deze dingen aansluiten op het Raspberry Pi 1, 2 of 3 bord (het liefst 3, omdat het ingebouwde Wifi heeft), een thema voor de grafische interface in Kodi kiezen dat geschikt is voor een aanraakscherm en voilà => je kunt een eenvoudige audio speler maken. Natuurlijk zal het vrij groot zijn, maar het zal van jou zijn.
Opmerking:
A om een multimedia centrum Kodi voor de meest budgetvriendelijke kaart
Raspberry Pi Zero Wifi in Yocto te bouwen hoef je slechts twee regels te wijzigen:
configuratiebestand => build/conf/local.conf
MACHINE = 'raspberrypi0-wifi'
recept voor het bouwen van Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE',
'raspberrypi0-wifi', '${BS_RPI}', '', d)}"
Als de responsiviteit van de GUI Kodi 17.6 vanwege één CPU-kern in Zero je mysterieus lijkt, kun je een trucje toepassen en een oudere, maar zeer snelle versie samenstellen, bijvoorbeeld Kodi 15.2, die op dit punt meer "gebruiksvriendelijk" is (soms lost legacy alles op)
Helaas heb ik de kaart niet, dus ik kan het niet testen, maar volgens mijn gevoel zou het moeten werken.
Korte handleiding voor assemblage
1) Installeer de afhankelijkheden van het Yocto Project (bijvoorbeeld in 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 en installeer Repo:
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
3) Download het project van 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) Bouw het project:
./shell.sh
bitbake berserk-image
je kunt hetzelfde ook bouwen voor de Raspberry Pi 3B Plus, 3B en 2B:
repo init -u https://github.com/berserktv/bs-manifest
-m raspberry/rocko/radio-0.2.8.xml
een gedetailleerdere instructie voor de bouw
en het schrijven op een microSDHC kaart zie
Postscriptum
Natuurlijk is het idee van een internet radio speaker standaard, dat is bij iedereen bekend en je vindt er vele artikelen over op Habrahabr, bijvoorbeeld
En je kunt denken dat ik de vereisten gewoon heb aangepast aan de kant-en-klare oplossing. Daar kan ik op antwoorden en zeggen, nee, eerlijk waar.
Het verhaal van meneer Herwi
Gelooft u het of niet, maar zo ging het:
Ons kantoor grenst aan een bedrijf dat verschillende geluidsapparatuur produceert, en op een dag kwam de directeur van dat bedrijf, laten we hem meneer "Ervi" noemen, naar onze adjunct-directeur van de vestiging, meneer "Arseni", en vroeg hem hoe moeilijk het is om een geluidsstroom af te spelen op een Raspberry Pi. Dat wil zeggen, de computer wordt aangesloten op het netwerk en de luidsprekers, en "je hoort een kenmerkend geluid".
Daarna ging meneer Arseni naar de adjunct van mijn baas - meneer "Boris" - en stuurde de vraag naar hem door, en ik, als toevallige toeschouwer, herinnerde me dit idee en noemde het "De Drie Hoofden Probleem".
Al met al wilden ze het beste doen, maar het resultaat was, citaat - "Maar meneer Ervi hielp, zoals altijd."
Enige tijd later vroeg ik meneer "Boris" zijn mening over het schrijven van een kleine opmerking hierover op "Habr", waarop "Boris" antwoordde dat het veranderen van "drie menu-items" in Kodi niet echt nieuwe informatie biedt en geen aparte vermelding waard is. Natuurlijk was ik het daar volledig mee eens, en daarom zal ik hem niet vertellen dat ik hierover iets geschreven heb.
Het artikel is geschreven voor de "Raspberry Pi 1" die ik van meneer "Boris" heb geleend voor de duur van het experiment; elke gelijkenis met andere "Raspberry Pi 1"-systemen is toevallig.
Veel goede en verschillende builds voor u, en zelfs een voormalige baksteen mag in dit jaar voor u zingen.
Bron: habr.com
