Tabla de contenido:
- Paso 1: requisitos previos:
- Paso 2: instala Python y Pip
- Paso 3: Instale MPG123 y Adafruit Blinka
- Paso 4: ajuste el volumen al 50% en Alsamixer
- Paso 5: Un poco de tarea: Encuentre 5 estaciones de radio que valga la pena escuchar
- Paso 6: Opcional: Scrape URL's usando Vtuner
- Paso 7: Configure nuestros botones
- Paso 8: Identifique nuestros pines GPIO
- Paso 9: Código
- Paso 10: prueba en nuestra caja de arena
- Paso 11: Configure nuestro código para que se ejecute automáticamente en el arranque
- Paso 12: Prueba de nuevo
- Paso 13: empaquételo y terminamos
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-13 06:57
A veces solo tiene que ser táctil. Sin interfaz de ningún tipo. Solo botones.
Raspberry Pi como reproductor de radio por Internet no es nada nuevo, y hay muchos instructivos sobre cómo crear un reproductor de radio por Internet usando un raspberry pi con o sin monitor para transmitir estaciones de Internet de todo el mundo. Si tuviera que optar por ir sin cabeza (sin un monitor), aún necesitaría un medio para interactuar con el reproductor pi, generalmente una interfaz web, si no un medio directo de comunicación con el host, como ssh. Este instructable será ligeramente diferente; Usaremos pulsaciones de botones simples para enviar comandos al pi, eliminando así la necesidad de una interfaz web y una pantalla LCD. Suena bastante fácil, ¿verdad (?)
Comenzaremos con un diseño muy básico usando botones codificados por colores, cada color representará una estación de radio por Internet. Introduciremos un código Python para manejar la pulsación del botón: La prensa ejecutará un comando para reproducir una estación de radio por Internet precodificada usando MPG123, una gran herramienta de línea de comandos para reproducir audio en nuestro pi.
Tus habilidades con Python no necesitan ser avanzadas. De hecho, literalmente pasé de "Hola mundo" a escribir esto y, como verá, pedí prestado una gran cantidad de código, así que si puedo hacerlo y tenerlo documentado de alguna manera, nadie más debería tener problemas.
¡Vamos!
Suministros:
Materiales necesarios
- Raspberry pi / pi zero w con todas las fijaciones: Fuente de alimentación, tarjeta SD y Raspbian o Raspbian lite.
- Wifi y acceso a internet
- Otra PC para realizar un poco de navegación web y capacidad de SSH a la raspberry pi
- Convertidor de digital a analógico (DAC): opcional, pero se lo agradecerá.
- Amplificador
- Altavoces
- Cables de conexión y puentes
- Soldador y soldadura
- Tablero perfilado para los botones
- Botones táctiles: normalmente abiertos: uno para cada género de música, un botón de encendido y un botón de silencio opcional (se recomiendan 7 botones)
- Una unidad de vivienda para todo lo anterior (opcional pero ordenado)
Paso 1: requisitos previos:
Comenzaremos asumiendo que ya ha configurado su raspberry pi, DAC y amplificador, y también asumiremos que tiene acceso a Internet. Debido a la cantidad de opciones de equipos de audio, preferencias y opciones para escuchar audio, asumiremos que su configuración ya está completa: ya debería tener sonido saliendo de sus parlantes antes de comenzar este proyecto. También necesitaremos ssh a raspberry pi, así que usando la configuración de pi, asegúrese de que las interfaces tengan ssh habilitado. Usaré Raspbian lite y te recomiendo que tengas una nueva instalación de la última copia en una nueva tarjeta SD dedicada a este proyecto. Si tiene éxito, construiremos un dispositivo independiente que se puede dejar encendido las 24 horas del día, los 7 días de la semana, como un dispositivo de escucha dedicado.
Paso 2: instala Python y Pip
Prefiero ssh a pi usando una PC diferente, y realizar todas las funciones requeridas usando una sesión ssh, pero supongo que es posible configurar inicialmente el pi en un monitor, teclado y mouse y trabajar directamente en el pi hasta que esté en funcionamiento y luego implementar de forma independiente.
Primero hagamos una verificación de mantenimiento de rutina de nuestro sistema y la versión de Python:
sudo apt-get update
sudo apt-get upgrade
Asegúrese de que Python esté instalado. En una sesión de terminal, escriba lo siguiente en el símbolo del sistema:
Python --versión
Si ve python 2.7.13 (o anterior), instalemos python 3. +:
sudo apt-get install python3
sudo apt-get install python-pip
sudo apt-get install python3-pip
sudo pip3 install --upgrade pip
Paso 3: Instale MPG123 y Adafruit Blinka
Ahora que se han sentado las bases, solo unas pocas instalaciones más:
MPG123 es el software de audio que reproducirá nuestra música. La instalación es realmente sencilla:
sudo apt-get install mpg123
Investigué mucho y encontré una excelente plantilla en el sitio web de Adafruit sobre la reproducción de archivos de sonido presionando botones, así que en lugar de comenzar desde cero, continuemos con el camino que la gente de Adafruit ya nos ha abierto. Su programa pide que instalemos Adafruit Blinka:
$ sudo pip3 instalar adafruit-blinka
Antes de continuar, realicemos una verificación rápida para asegurarnos de que tenemos la configuración de Alsa:
aplay --version
nuestros resultados deberían leer: versión 1.1.3 de Jaroslav Kysela
Paso 4: ajuste el volumen al 50% en Alsamixer
Ahora tomemos una medida de precaución y ajustemos nuestro volumen al 50% para evitar sorpresas ensordecedoras:
En el símbolo del sistema, escriba alsamixer:
alsamixer
Si miramos una pantalla de color rojo, blanco y verde, o el 100% del volumen máximo, es una buena idea bajar el volumen al 50% para salvar nuestros tímpanos. Siempre podemos ajustarnos más tarde (hacia arriba o hacia abajo) si es necesario.
Paso 5: Un poco de tarea: Encuentre 5 estaciones de radio que valga la pena escuchar
Necesitaremos una estación para cada botón. De hecho, necesitaremos la URL de la estación. Al presionar el botón, se llamará a la URL de la estación de radio por Internet en un código simple de una línea. Sin embargo, nos estamos adelantando a nosotros mismos, así que tenemos algunos deberes que hacer; encuentre 5 estaciones de radio y sus URL. Encontrar 5 estaciones de radio no es difícil, pero encontrar sus URL puede ser complicado. Explicaré por qué en un minuto.
SomaFm * es una excelente fuente para comenzar, especialmente si aún no tienes idea de lo que quieres escuchar. Tienen una amplia variedad de opciones de música ecléctica, ninguna de las cuales me parece ofensiva, sin comerciales, y la mejor parte: comparten abiertamente sus URL. Para obtener la URL, haga clic en una imagen de la estación que le interesa y, en la barra de navegación del lado izquierdo, haga clic en "Direct Stream Links". Desde allí, busque la sección MP3 y raspe la URL de la tasa de reproducción más alta (es decir, 128 beats 64). Pegue la URL en un editor de texto o en un bloc de notas por ahora.
Como ejemplo, para raspar Christmas Rocks, la URL sería: (no necesitamos la descripción del servidor)
ice4.somafm.com/xmasrocks-128-mp3
Se vuelve un poco más complicado fuera del mundo de SomaFm. Muchas estaciones utilizan un intermediario entre el oyente y la estación, ya sea para publicidad, marketing o posiblemente para rastrear, y generalmente trato de evitar este tipo de estaciones. Dado que los intermediarios prefieren que escuches la emisora a través de ellos, normalmente es bastante difícil encontrar la URL; y ahí es donde entra en juego Vtuner.
* Sería negligente si no le pidiera que considerara hacer una donación a su estación de radio favorita, ya que muchas de las estaciones dependen únicamente del apoyo de los oyentes.
Paso 6: Opcional: Scrape URL's usando Vtuner
Ahora viene la parte divertida … En la página de inicio de Vtuner, consulte el enlace de su enorme lista de estaciones en la esquina superior derecha. Elija un género de música que le interese y luego ordene por velocidad más rápida, donde verá una lista de estaciones. Elija una estación que crea que le gustará, haga clic en el enlace o en el botón de reproducción y pruebe la música. Si no es para ti, no te preocupes, repite el proceso hasta encontrar uno adecuado para disfrutarlo a largo plazo. En mi captura de pantalla, elegí la versión digital de impulso de la música Country y en la siguiente pantalla, noté que se está reproduciendo fuera de Croacia. La música country de Croacia suena bastante interesante.
Me gusta. Pero, ¿cómo obtengo la URL? Simplemente haga clic con el botón derecho en el espacio en blanco a la derecha de la imagen de la estación, debajo del nombre de la estación, seleccione "Ver código fuente de la página" y desplácese hacia abajo hasta la fila 150. Estamos buscando la línea que dice "// Probar para manejar icecast ". ¡Y la URL se encuentra inmediatamente debajo!
orion.shoutca.st:8110/stream
¡Bastante hábil!
Repita este paso hasta que tengamos al menos 5 estaciones en nuestra lista.
Doble Opcional: para una medida adicional, si puede encontrar 5 géneros de música que le interesen (en lugar de 5 estaciones), cree una lista de estaciones de radio para cada género y guarde las listas como archivos de texto. Volveremos a esto más tarde.
Paso 7: Configure nuestros botones
¡La parte más importante! Quite el polvo del soldador viejo o al menos conéctelo y hornee el polvo. Es hora de soldar. Estoy usando pulsadores momentáneos de 4 clavijas, normalmente abiertos. Construiré una serie de botones (foto de la izquierda) y los sujetaré a una placa de perforación. Es difícil saberlo en la foto, pero la dirección de las puntas de los botones van de norte a sur. En el lado derecho, puede ver dónde coloqué un riel de tierra para mis cables de tierra y conecté algunos cables de puente con extremos macho al lado opuesto de cada botón. En lugar de tener 7 conexiones a tierra, el riel nos permitirá compartir una conexión a tierra al pi para todos. El resultado final es una placa de oblea delicada que se montará debajo de la parte superior de la radio usando algunos tornillos a través de los orificios piloto provistos. Solo las tapas de los botones aparecerán a través de la ranura que corté de la parte superior. Dado que mi superficie superior tiene solo 1/4 de grosor, quiero tener cuidado de no atornillar demasiado. El pegamento puede ser útil para mantener la placa perforada unida a la radio.
Paso 8: Identifique nuestros pines GPIO
En mi único otro instructable, presenté un nuevo uso para los viejos sombreros de voz de Google AIY versión 1. En este instructivo ampliamente impopular (o muy popular), mencioné lo impresionado que estaba con el diseño del sombrero en sí. Tengo algunos por ahí, así que construiré un prototipo usando el sombrero, ya que tiene tanto el dac como el amplificador a bordo.
Identifiquemos ahora seis pines que albergarán nuestras pulsaciones de botones. Le pediré que se concentre en el lado izquierdo del sombrero AIY de Google, donde dice "servos". Hay una columna de 6 ojales para el Pin donde adjuntaré y soldaré los extremos de mis botones masculinos de nuestro paso anterior. Si trabaja sin el sombrero de voz google aiy, no se preocupe, la foto de la derecha lo guiará. En cualquier caso, trabajaremos con los pines 26, 06, 13, 05, 12 y 24 de gpio (BCM) de arriba a abajo (o 0-5). GPIO # 24 se reservará para un botón de pausa opcional.
No olvide conectar también la conexión a tierra.
Paso 9: Código
Dudo que el código cambie mucho desde aquí, sin embargo, para obtener la última versión del código de Python, visite mi github. He adjuntado una copia a partir del 2019-12-18 llamada pytiful3.py.
No es el código más eficiente que jamás haya visto, y es bastante detallado, pero hace el trabajo.
Comencemos por crear una caja de arena para jugar. Desde nuestro directorio de inicio, cree un directorio en nuestra raspberry pi llamado kissir:
mkdir kissir /
y copie el contenido del archivo pytiful3.py en el directorio abriendo el archivo de muestra en un editor de texto y usando
sudo nano kissir / pytiful3.py
copie / pegue el contenido del archivo en nuestro script de Python recién creado. No olvide guardar nuestro trabajo usando Ctrl-x, Y e ingresar.
Si desea un recorrido rápido por el script, importamos los módulos de Python que vamos a necesitar, y luego definimos nuestros botones y asignamos un pin gpio a cada uno de los 7 botones. Habrá 5 estaciones de radio (siéntase libre de editar según su preferencia de estación), un botón de parada y un botón de apagado. El ciclo while true se ejecuta y se ejecuta hasta que se presiona un botón, que en la mayoría de los casos detendrá cualquier reproducción de mpg123 existente y comenzará a reproducir la estación asignada al botón que se presionó. El botón de pausa / detener no es realmente un botón de pausa, sino más bien un interruptor de apagado, ya que no podemos pausar la radio por Internet. La radio por Internet no espera a nadie.
Paso 10: prueba en nuestra caja de arena
Antes de implementar nuestra radio, mientras todavía estamos en nuestra sesión ssh, navegue a la carpeta kissir donde se almacena nuestro script. Simplemente podemos ejecutar el script desde la línea de comando manualmente escribiendo:
python3 pytiful3.py
Si echó un vistazo al código primero, probablemente notó que dejé algunas declaraciones impresas para que podamos saber qué está sucediendo. Si todo salió bien, tendremos un mensaje que dice "Presione un botón". Eso nos dice que nuestro script se está ejecutando y pasó una verificación de código preliminar. Mi intento inicial tuvo un bucle infinito de "música en pausa - presione el botón para continuar", y descubrí que tenía mi botón de pausa conectado para estar siempre cerrado, en lugar de normalmente abierto. Ojalá hayas tenido más suerte con el paso de soldadura.
Ctrl-C detendrá el script si necesita abortar.
Entonces, si ve "Presione un botón", ¿a qué estamos esperando? Seleccione cualquiera de nuestros cinco botones de estaciones de radio.
Es probable que escuche un sonido de altavoz para iniciar la reproducción de música, y no puedo ayudar con eso por el momento. Mpg123 permite un sufijo "--preload 1" después de la dirección de la estación en el comando os.system, sin embargo, no podría decir si hizo una diferencia. Debería permitir una ligera amortiguación.
Otro fragmento de código sobre el que quizás se haya preguntado: hay un indicador "-f 7000" después de la llamada mpg123. Esto reduce el volumen a una gran distancia del volumen máximo. El volumen total sería 32K. Según tengo entendido, la escala de volumen no es una escala lineal, por lo que no puedo decir que sea solo una quinta parte del volumen máximo, pero sigue siendo bastante alto. Tuve que hacer esto porque mi tarjeta de sonido, la tarjeta de sonido de voz de Google AIY, a veces no funciona bien con Alsamixer.
Continúe seleccionando los botones que desee, siéntese, relájese y disfrute de la comodidad de escuchar por ahora.
Paso 11: Configure nuestro código para que se ejecute automáticamente en el arranque
Entonces, si todo está funcionando bien y ha disfrutado de nuestra aventura en el símbolo del sistema de la caja de arena, ahora es un buen momento para automatizar la carga del script. Asegúrese de estar todavía en el directorio de kissir y coloque el código del script en el contenedor del usuario:
sudo cp pytiful3.py / usr / local / bin /
Hágalo ejecutable:
sudo chmod + x /usr/local/bin/pytiful3.py
Escriba un script de shell para ejecutarlo al inicio:
sudo nano pytiful3.sh
E inserte el siguiente texto:
#! / bin / sh ### BEGIN INIT INFO # Proporciona: pytiful3.py # Required-Start: $ remote_fs $ syslog # Required-Stop: $ remote_fs $ syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO # asegúrese de que el nivel de volumen no sea alto TODO # Realice funciones específicas cuando se lo solicite el caso del sistema "$ 1" al inicio) echo "Iniciando pytiful3.py" /usr/local/bin/pytiful3.py &;; stop) echo "Deteniendo pytiful3.py" pkill -f /usr/local/bin/pytiful3.py;; *) echo "Uso: /etc/init.d/pytiful3.sh {inicio | parada}" salida 1;; esac salida 0
Muévalo a init.d:
sudo mv pytiful3.sh /etc/init.d/
Hágalo ejecutable:
sudo chmod + x /etc/init.d/pytiful3.sh
Registre el script para que se ejecute en el inicio:
sudo update-rc.d pytiful3.sh valores predeterminados
Paso 12: Prueba de nuevo
Ahora que tenemos nuestro script cargado para que se ejecute en el inicio, solo recuerde que cualquier cambio que hagamos debe llevarse al contenedor del usuario, y nuestro hermoso script kissir / pytiful3.py ahora es solo un huérfano. Pero en el lado positivo, todavía tenemos una caja de arena para jugar. Probablemente continuaré jugando con el guión, hacer cambios y guardarlo como una nueva versión en un futuro cercano. Sigue siendo un proyecto funcional.
Reiniciemos, esperemos a que se reinicie el pi y, después de aproximadamente un minuto, volvamos a presionar un botón.
Si su volumen de audio es muy bajo, recuerde que también tenemos el volumen del mezclador al 50%, por lo que podemos subirlo en consecuencia desde el símbolo del sistema.
Para empezar, una cosa que se necesita es un valor de volumen global, en lugar de tener que cambiar el nivel de volumen 5 veces diferentes.
Oye, ¿qué pasa con esa lista de estaciones de radio que hicimos en el paso # 6? Bueno, resulta que MPG123 tiene un comando de selección aleatorio. Es tan simple como crear una lista de direcciones URL de estaciones y, en lugar de solicitar la URL de una estación de radio, simplemente use
"btn1234_choice = random.choice (btn1234)", inmediatamente después de identificar nuestra lista de estaciones, donde btn1234_choice es nuestra lista. No olvide usar corchetes alrededor de nuestra lista de estaciones separadas por comas. La llamada al comando de subproceso luego reproduce nuestra elección aleatoria:
subprocess.call (['mpg123', '-q', btn1234_choice, "--preload 1"])
Paso 13: empaquételo y terminamos
Si ha llegado a este paso, ¡el trabajo está completo! Felicitaciones, acaba de construir un reproductor de radio por Internet independiente.
Dependiendo del equipo que tenga (parlantes, dac y amplificador), es posible que se pregunte cómo ocultar algunos de los cables tendidos. Quizás otro instructivo para otro día, pero si planea hacer una unidad de vivienda para meter algunos de los cables, le recomiendo que se dé mucho espacio adicional.
Como puede ver en las fotos de arriba, en realidad hice dos besos, uno usando los restos de un percance de pegamento en mi primer intento (del humor deformado vienen las tablas deformadas). La segunda unidad usa excitadores de sonido en lugar de altavoces convencionales, y si eligió el nombre del dispositivo en una de mis capturas de pantalla, lo llamé slimbox.
Este proyecto me pareció bastante divertido. Ambas veces. Ciertamente no es un proyecto difícil, quizás un poco de tiempo pero muy gratificante. Espero que disfrutes escuchando también.