Inhoudsopgave:

Houd het Stoopid Simple Internet Radio: KISSIR - Ajarnpa
Houd het Stoopid Simple Internet Radio: KISSIR - Ajarnpa

Video: Houd het Stoopid Simple Internet Radio: KISSIR - Ajarnpa

Video: Houd het Stoopid Simple Internet Radio: KISSIR - Ajarnpa
Video: Hij verloor zijn 2 benen en werkt HARD voor zijn gezin - Thais straatvoedsel 2024, November
Anonim
Houd het Stoopid Eenvoudige internetradio: KISSIR
Houd het Stoopid Eenvoudige internetradio: KISSIR
Houd het Stoopid Eenvoudige internetradio: KISSIR
Houd het Stoopid Eenvoudige internetradio: KISSIR

Soms moet het gewoon tastbaar zijn. Geen enkele vorm van interface. Gewoon knopen.

Raspberry Pi als internetradiospeler is niets nieuws en er zijn tal van instructies over hoe je een internetradiospeler kunt maken met een Raspberry Pi met of zonder monitor om internetstations van over de hele wereld te streamen. Als je ervoor zou kiezen om headless te gaan (zonder monitor), zou je nog steeds een middel nodig hebben om de pi-speler te koppelen, meestal een webinterface, zo niet een direct middel om met de host te communiceren, zoals ssh. Dit instructable zal iets anders zijn; we zullen eenvoudige druk op de knop gebruiken om opdrachten naar de pi te sturen, waardoor een webinterface en een LCD-scherm niet meer nodig zijn. Klinkt makkelijk genoeg, toch (?)

We beginnen met een heel eenvoudig ontwerp met kleurgecodeerde knoppen, elke kleur vertegenwoordigt een internetradiostation. We zullen wat python-code introduceren om het indrukken van de knop af te handelen: de pers voert een commando uit om een voorgecodeerd internetradiostation af te spelen met behulp van MPG123, een geweldige opdrachtregeltool voor het afspelen van audio op onze pi.

Je python-vaardigheden hoeven niet geavanceerd te zijn. In feite ging ik letterlijk van "Hello World" om dit te schrijven, en zoals je zult zien, heb ik veel code geleend - dus als ik het kan en het enigszins gedocumenteerd kan hebben, zou iemand anders geen probleem moeten hebben.

Laten we gaan!

Benodigdheden:

Benodigde materialen

  • Raspberry pi/pi zero w met alle bevestigingen: voeding, SD-kaart en Raspbian of Raspbian lite.
  • Wifi en internettoegang
  • Een andere pc om wat op het web te browsen en SSH naar de Raspberry Pi
  • Digitaal naar analoog converter (DAC) - optioneel, maar u zult dankbaar zijn.
  • Versterker
  • Sprekers
  • Aansluitdraad en Jumpers
  • Soldeerbout en soldeer
  • Perf Board voor de knopen
  • Tactiele knoppen: normaal open - één voor elk muziekgenre, een aan / uit-knop en een optionele mute-knop (7 knoppen aanbevolen)
  • Een wooneenheid voor al het bovenstaande (optioneel maar netjes)

Stap 1: Vereisten:

Vereisten
Vereisten

We gaan ervan uit dat je je Raspberry Pi, DAC en versterker al hebt ingesteld, en gaan er ook vanuit dat je toegang hebt tot internet. Vanwege de hoeveelheid keuzes, voorkeuren en opties voor het luisteren naar audioapparatuur, gaan we ervan uit dat uw installatie al voltooid is: er zou al geluid uit uw luidsprekers moeten komen voordat u aan dit project begint. We zullen ook moeten ssh naar de raspberry pi, dus gebruik de pi-configuratie en zorg ervoor dat interfaces ssh hebben ingeschakeld. Ik zal Raspbian lite gebruiken en raad aan dat je een nieuwe installatie van de nieuwste kopie op een nieuwe SD-kaart hebt die speciaal voor dit project is bedoeld. Als dit lukt, bouwen we een stand-alone armatuur die 24/7 aan kan blijven staan als een toegewijd luisterapparaat.

Stap 2: Installeer Python en Pip

Ik geef er de voorkeur aan om met een andere pc naar de pi te ssh en alle vereiste functies uit te voeren met een ssh-sessie, maar ik denk dat het mogelijk is om de pi in eerste instantie op een monitor, toetsenbord en muis in te stellen en direct op de pi te werken totdat het is werken en vervolgens als standalone implementeren.

Laten we eerst een routine-onderhoudscontrole uitvoeren van ons systeem en onze Python-versie:

sudo apt-get update

sudo apt-get upgrade

Zorg ervoor dat Python is geïnstalleerd. Typ in een terminalsessie het volgende achter de opdrachtprompt:

python --versie

Als je python 2.7.13 (of eerder) ziet, laten we dan python 3.+ installeren:

sudo apt-get install python3

sudo apt-get install python-pip

sudo apt-get install python3-pip

sudo pip3 install --upgrade pip

Stap 3: Installeer MPG123 en Adafruit Blinka

Nu de basis is gelegd, nog een paar installaties:

MPG123 is de audiosoftware die onze muziek zal afspelen. Installatie is heel eenvoudig:

sudo apt-get install mpg123

Ik heb veel onderzoek gedaan en vond een geweldige sjabloon op de Adafruit-website over het afspelen van geluidsbestanden met het indrukken van knoppen, dus laten we in plaats van helemaal opnieuw te beginnen, doorgaan op het pad dat de mensen bij Adafruit al voor ons hebben uitgestippeld. Hun programma vraagt ons om Adafruit Blinka te installeren:

$ sudo pip3 installeer adafruit-blinka

Voordat we verder gaan, laten we een snelle controle uitvoeren om er zeker van te zijn dat we Alsa hebben ingesteld:

aplay --versie

onze resultaten zouden moeten zijn: versie 1.1.3 door Jaroslav Kysela

Stap 4: Stel het volume in op 50% in Alsamixer

Stel het volume in op 50% in Alsamixer
Stel het volume in op 50% in Alsamixer
Stel het volume in op 50% in Alsamixer
Stel het volume in op 50% in Alsamixer

Laten we nu een voorzorgsmaatregel nemen en ons volume aanpassen tot 50% om oorverdovende verrassingen te voorkomen:

Typ alsamixer bij de opdrachtprompt:

alsamixer

Als we kijken naar een scherm van rood wit en groen, of 100% max volume, is het een goed idee om het volume te verlagen tot 50% om onze trommelvliezen te sparen. We kunnen altijd later (omhoog of omlaag) aanpassen als dat nodig is.

Stap 5: wat huiswerk: vind 5 radiostations die de moeite waard zijn om naar te luisteren

Wat huiswerk: vind 5 radiostations die de moeite waard zijn om naar te luisteren
Wat huiswerk: vind 5 radiostations die de moeite waard zijn om naar te luisteren
Wat huiswerk: vind 5 radiostations die de moeite waard zijn om naar te luisteren
Wat huiswerk: vind 5 radiostations die de moeite waard zijn om naar te luisteren

We hebben één station nodig voor elke knop. Eigenlijk hebben we de url van het station nodig. De druk op de knop roept de url van het internetradiostation op in een eenvoudig stukje code van één regel. We lopen echter op de zaken vooruit, dus we hebben wat huiswerk te doen; vind 5 radiostations en hun urls. Het vinden van 5 radiostations is niet moeilijk, maar het vinden van hun urls kan lastig zijn. Ik zal zo uitleggen waarom.

SomaFm * is een geweldige bron om mee te beginnen, vooral als je nog geen idee hebt waar je naar wilt luisteren. Ze hebben een breed scala aan eclectische muziekkeuzes, waarvan ik geen enkele aanstootgevend vind, geen commercials, en het beste deel: ze delen openlijk hun url's. Om de url te pakken, klikt u op een afbeelding van het station waarin u geïnteresseerd bent en klikt u in de navigatiebalk aan de linkerkant op "Direct Stream Links". Van daaruit vind je de MP3-sectie en schrap je de url van de hoogste afspeelsnelheid (dwz 128 beats 64). Plak de url voorlopig in een teksteditor of kladblok.

Als voorbeeld, om Christmas Rocks te schrapen, zou de url zijn: (we hebben de serverbeschrijving niet nodig)

ice4.somafm.com/xmasrocks-128-mp3

Het wordt een beetje moeilijker buiten de wereld van SomaFm. Veel zenders gebruiken een tussenpersoon tussen de luisteraar en de zender, of het nu voor reclame, marketing of mogelijk tracking is - en over het algemeen probeer ik dit soort zenders te vermijden. Omdat de tussenpersonen er de voorkeur aan geven dat je via hen naar het station luistert, is het meestal vrij moeilijk om de url te vinden; en dat is waar Vtuner binnenkomt.

*Ik zou nalatig zijn als ik je niet zou vragen om te overwegen een donatie te doen aan je favoriete radiostation, aangezien veel van de stations uitsluitend afhankelijk zijn van luisteraars.

Stap 6: Optioneel: URL's schrapen met Vtuner

Optioneel: URL's schrapen met Vtuner
Optioneel: URL's schrapen met Vtuner
Optioneel: URL's schrapen met Vtuner
Optioneel: URL's schrapen met Vtuner

Nu komt het leuke gedeelte … Bekijk op de Vtuner-startpagina hun enorme stationslijstlink in de rechterbovenhoek. Kies een muziekgenre waarin u geïnteresseerd bent en sorteer vervolgens op de hoogste snelheid, waar u een lijst met stations ziet. Kies een station waarvan je denkt dat je het leuk vindt, klik op de link of de afspeelknop en proef de muziek. Als het niets voor u is, geen zorgen, herhaal het proces totdat we er een vinden die geschikt is voor langdurig plezier. In mijn screenshot koos ik de digitale impulsversie van countrymuziek en op het volgende scherm zag ik dat het uit Kroatië speelt. Countrymuziek uit Kroatië klinkt best interessant.

Ik vind het leuk. Maar hoe kom ik aan de url? Klik met de rechtermuisknop op de witte ruimte rechts van de zenderafbeelding, onder de zendernaam, en selecteer "Paginabron weergeven" en scrol omlaag naar ongeveer rij 150. We zoeken naar de regel met de tekst "// Probeer icecast hanteren". En de url staat er direct onder!

orion.shoutca.st:8110/stream

Lekker glad!

Herhaal deze stap totdat we minimaal 5 stations op onze lijst hebben staan.

Dubbel Optioneel: als je 5 muziekgenres kunt vinden waarin je geïnteresseerd bent (in tegenstelling tot 5 stations), maak dan voor elk genre een lijst met radiostations en sla de lijsten op als tekstbestanden. We komen hier later op terug.

Stap 7: Stel onze knoppen in

Stel onze knoppen in
Stel onze knoppen in
Stel onze knoppen in
Stel onze knoppen in

Het belangrijkste onderdeel! Stof de oude soldeerbout af of steek hem in ieder geval in het stopcontact en bak het stof eraf. Het is tijd om te solderen. Ik gebruik 4 prong kortstondige drukknoppen, normaal geopend. Ik zal een reeks knoppen bouwen (linkerfoto) en ze op een perf-bord bevestigen. Het is moeilijk te zien op de foto, maar de richting van de knoptanden lopen allemaal van noord naar zuid. Aan de rechterkant kun je zien waar ik een aardingsrail voor mijn aardingsdraden heb lopen en een aantal mannelijke startkabels aan de andere kant van elke knop heb bevestigd. In plaats van 7 aardverbindingen te hebben, stelt de rail ons in staat om voor iedereen één aardverbinding met de pi te delen. Het eindresultaat is een delicaat wafelbord dat onder aan de bovenkant van de radio wordt gemonteerd met behulp van enkele schroeven door de meegeleverde geleidegaten. Alleen de knoptoppen zullen verschijnen door de groef die ik uit de bovenkant heb gesneden. Aangezien mijn bovenoppervlak slechts 1/4 dik is, wil ik oppassen dat ik niet te veel schroef. Lijm kan handig zijn om het perf-bord aan de radio vast te houden.

Stap 8: Identificeer onze GPIO-pinnen

Identificeer onze GPIO-pinnen
Identificeer onze GPIO-pinnen
Identificeer onze GPIO-pinnen
Identificeer onze GPIO-pinnen

In mijn enige andere instructable presenteerde ik een nieuw gebruik voor de oude Google AIY versie 1 stemmutsen. In deze alom impopulaire (of nauwelijks populaire) instructable, vermeldde ik hoe onder de indruk ik was van het ontwerp van de hoed zelf. Ik heb er een paar liggen, dus ik zal een prototype bouwen met de hoed, omdat deze zowel de dac als de versterker aan boord heeft.

Laten we nu zes pinnen identificeren die onze knoppersen zullen hosten. Ik zal je vragen om je te concentreren op de linkerkant van de Google AIY-hoed, waar 'servo's' staan. Er is een kolom met 6 oogjes voor de pin waar ik mijn mannelijke knopuiteinden van onze vorige stap zal bevestigen en solderen. Mocht u zonder de Google Aiy Voice-hoed werken, geen zorgen, - de foto aan de rechterkant zal u begeleiden. In beide gevallen werken we met gpio (BCM)-pinnen 26, 06, 13, 05, 12 en 24 van boven naar beneden (of 0-5). GPIO #24 wordt gereserveerd voor een optionele pauzeknop.

Vergeet niet ook de massaverbinding te bevestigen.

Stap 9: Coderen

Ik betwijfel of de code vanaf hier veel zal veranderen, maar bezoek mijn github voor de nieuwste versie van de python-code. Ik heb een kopie bijgevoegd vanaf 18-12-2019 genaamd pytiful3.py.

Het is niet de meest efficiënte code die je ooit zult zien, en het is behoorlijk uitgebreid, maar het klaart de klus.

Laten we beginnen met het maken van een sandbox om in te spelen. Maak vanuit onze homedirectory een directory op onze raspberry pi met de naam kissir:

mkdir kissir/

en kopieer de inhoud van het pytiful3.py-bestand naar de map door het voorbeeldbestand in een teksteditor te openen en. te gebruiken

sudo nano kissir/pytiful3.py

kopieer / plak de inhoud van het bestand in ons nieuw gemaakte python-script. Vergeet niet ons werk op te slaan met Ctrl-x, Y en enter.

Als je een snelle rondleiding door het script wilt, importeren we de python-modules die we nodig hebben, en dan definiëren we onze knoppen en wijzen we een gpio-pin toe aan elk van de 7 knoppen. Er zullen 5 radiostations zijn (voel je vrij om naar je stationvoorkeur te bewerken), een stopknop en een afsluitknop. De while-lus loopt en loopt totdat er op een knop wordt gedrukt, wat in de meeste gevallen het afspelen van bestaande mpg123 stopt en het station begint af te spelen dat is toegewezen aan de knop die werd ingedrukt. De pauze-/stopknop is niet echt een pauzeknop, maar meer een kill-schakelaar omdat we internetradio niet kunnen pauzeren. Internetradio wacht op niemand.

Stap 10: Test in onze sandbox

Test in onze zandbak
Test in onze zandbak

Voordat we onze radio inzetten, terwijl we nog in onze ssh-sessie zitten, navigeer je naar de map Kissir waar ons script is opgeslagen. We kunnen het script eenvoudig handmatig vanaf de opdrachtregel uitvoeren door te typen:

python3 pytiful3.py

Als je eerst naar de code hebt gegluurd, heb je waarschijnlijk gemerkt dat ik enkele afdrukinstructies heb achtergelaten, zodat we kunnen zien wat er gebeurt. Als alles goed is verlopen, krijgen we een prompt met de tekst "Druk op een knop". Dat vertelt ons dat ons script wordt uitgevoerd en dat het een voorlopige codecontrole heeft doorstaan. Mijn eerste poging had een oneindige lus van "muziek gepauzeerd - druk op de knop om door te gaan", en ik ontdekte dat mijn pauzeknop bedraad was om altijd gesloten te zijn, in plaats van normaal open. Hopelijk had je meer geluk met de soldeerstap.

Ctrl-C stopt het script als je moet afbreken.

Dus als u "Druk op een knop" ziet, waar wachten we dan op? Selecteer een van onze vijf radiostationknoppen.

De kans is groot dat je een luidspreker hoort knallen om het afspelen van muziek te starten, en daar kan ik op dit moment niets aan doen. Mpg123 staat een achtervoegsel "--preload 1" toe na het stationsadres in het os.system-commando, maar ik kon niet zeggen of het verschil maakte. Het zou een kleine buffer moeten toestaan.

Nog een stukje code waar je je misschien over hebt afgevraagd: er is een vlag " -f 7000" na de mpg123-aanroep. Dit reduceert het volume tot een verre afstand van het maximale volume. Het volledige volume zou 32K zijn. Zoals ik begrijp, is de volumeschaal geen lineaire schaal, dus ik kan niet zeggen dat het slechts een vijfde van het maximale volume is, maar nog steeds voldoende luid. Ik moest dit doen omdat mijn geluidskaart - de Google AIY stemgeluidskaart, soms niet lekker speelt met Alsamixer.

Ga door met het selecteren van knoppen naar keuze, leun achterover, ontspan en geniet voor nu van het comfort van uw luisteren.

Stap 11: Stel onze code zo in dat deze automatisch wordt uitgevoerd bij het opstarten

Dus als alles goed loopt en je hebt genoten van onze sandbox-opdrachtprompt-onderneming, is dit een goed moment om het laden van het script te automatiseren. Zorg ervoor dat u zich nog steeds in de kissir-directory bevindt en plaats de scriptcode in de gebruikersbak:

sudo cp pytiful3.py /usr/local/bin/

Maak het uitvoerbaar:

sudo chmod +x /usr/local/bin/pytiful3.py

Schrijf een shellscript om het bij het opstarten uit te voeren:

sudo nano pytiful3.sh

En voeg de volgende tekst in:

#! /bin/sh ### BEGIN INIT INFO # Biedt: pytiful3.py # Vereist-Start: $remote_fs $syslog # Vereist-Stop: $remote_fs $syslog # Standaard-Start: 2 3 4 5 # Standaard-Stop: 0 1 6 ### END INIT INFO # zorg ervoor dat het volume niet luid is TODO # Voer specifieke functies uit wanneer daarom wordt gevraagd door het systeem case "$1" in start) echo "Starting pytiful3.py" /usr/local/bin/pytiful3.py &;; stop) echo "Pytiful3.py stoppen" pkill -f /usr/local/bin/pytiful3.py;; *) echo "Gebruik: /etc/init.d/pytiful3.sh {start|stop}" exit 1;; esac uitgang 0

Verplaats het naar init.d:

sudo mv pytiful3.sh /etc/init.d/

Maak het uitvoerbaar:

sudo chmod +x /etc/init.d/pytiful3.sh

Registreer het script dat bij het opstarten moet worden uitgevoerd:

sudo update-rc.d pytiful3.sh standaardwaarden

Stap 12: Test opnieuw

Nu we ons script hebben geladen om bij het opstarten te worden uitgevoerd, onthoud dan dat alle wijzigingen die we aanbrengen naar de gebruikersbak moeten worden overgebracht, en ons mooie, kissir/pytiful3.py-script is nu slechts een wees. Maar aan de positieve kant, we hebben nog steeds een sandbox om in te spelen. Ik zal waarschijnlijk blijven spelen met het script, wijzigingen aanbrengen en het in de nabije toekomst opslaan als een nieuwe versie. Het is nog een werkproject.

Laten we opnieuw opstarten, wachten tot de pi opnieuw is opgestart en na ongeveer een minuut opnieuw op een knop drukken.

Als uw audiovolume erg laag is, onthoud dan dat we een alsamixer-volume hebben van 50%, zodat we het dienovereenkomstig kunnen verhogen vanaf de opdrachtprompt.

Om te beginnen is een ding dat nodig is een globale volumewaarde, in plaats van het volumeniveau 5 verschillende keren te moeten wijzigen.

Hé, hoe zit het met die lijst met radiostations die we in stap #6 hebben gemaakt? Nou, het blijkt dat MPG123 een willekeurig selectiecommando heeft. Het is zo simpel als het maken van een lijst met stations-URL's, en in plaats van één radiostation-URL op te roepen, gebruikt u gewoon

"btn1234_choice = random.choice(btn1234)", onmiddellijk na het identificeren van onze lijst met stations, waarbij btn1234_choice onze lijst is. Vergeet niet om vierkante haken te gebruiken rond onze lijst met stations, gescheiden door komma's. De opdrachtaanroep van het subproces speelt vervolgens onze willekeurige keuze af:

subprocess.call(['mpg123', '-q', btn1234_choice, " --preload 1"])

Stap 13: Box It Up, en we zijn klaar

Box It Up, en we zijn klaar
Box It Up, en we zijn klaar
Box It Up, en we zijn klaar
Box It Up, en we zijn klaar
Box It Up, en we zijn klaar
Box It Up, en we zijn klaar

Als je bij deze stap bent aangekomen, is het werk voltooid! Gefeliciteerd - je hebt zojuist een zelfstandige internetradiospeler gebouwd.

Afhankelijk van de apparatuur die je hebt (luidsprekers, dac en versterker), vraag je je misschien af hoe je sommige van de rondslingerende draden kunt verbergen. Misschien een andere instructable voor een andere dag, maar als je van plan bent een wooneenheid te maken om een deel van de draden in te stoppen, raad ik aan om jezelf voldoende extra ruimte te geven.

Zoals je op de bovenstaande foto's kunt zien, heb ik eigenlijk twee kissirs gemaakt, één met de overblijfselen van een lijmongeluk bij mijn eerste poging (van vervormde humor komen vervormde planken). Het tweede apparaat gebruikt geluidsexciters in plaats van conventionele luidsprekers, en als je de naam van het apparaat op een van mijn screenshots hebt opgepikt, heb ik het slimbox genoemd.

Ik vond dit project best leuk. Beide keren. Zeker geen moeilijk project, misschien een beetje tijdrovend maar zeer de moeite waard. Ik hoop dat je ook veel plezier beleeft aan het luisteren.

Aanbevolen: