Radio por Internet de tubo caliente



Este es el oficio más duradero de mi vida. ¡Pasaron 12 años desde la idea hasta la realización final, para que pudiera usarse! Durante este tiempo, sucedieron una gran cantidad de eventos: viajes, nacimiento, muerte, pero la idea estaba conmigo y no importa qué, la terminé. Y quiero contaros los caminos, las espinas, las aspiraciones que acompañaron a este oficio y lo que salió de él como resultado.



Idea



Vi la idea misma de una radio Wi-Fi basada en un enrutador hace mucho tiempo en este proyecto . En todo caso, esto es 2009. Era un demonio de radio, Linux y mpd basado en enrutador. Entonces estos no eran términos del todo claros para mí, pero realmente quería tener una radio así. Y encendí esta idea. Además, me inspiré mucho en cualquier tecnología de lámpara: lámparas amplificadoras, lámparas indicadoras (6E1P, que está en mi avatar), pantallas CRT . Y las pantallas VFD (VFD - Pantalla fluorescente de vacío o en ruso Indicador luminiscente de vacío (VLI), o indicador catodoluminiscente (CLI) también son muy agradables.



Por lo tanto, decidí usar una pantalla de efectivo. Entonces ni siquiera sabía cómo se llamaba pantalla del comprador.



Así que la idea: una pantalla para el comprador, una computadora de placa única o un enrutador, Linux + mpd, un indicador fluorescente de vacío y algún tipo de controles para estas cosas. Similar al proyecto que me inspiró.



Entiendo que llegué muy tarde con esta nave, ya que hay un montón de opciones diferentes para la radio Wi-Fi. Pero todavía difiere conceptualmente, incluso hoy, del resto, y creo que será interesante leer sobre la creación de dicho dispositivo. Además, lo hice por el alma y no para la venta.



Concepto y diseño básico



Esta radio en esos años (alrededor de 2010) tenía otro objetivo de proyecto. En esos años estaba estudiando el idioma serbio y quería tener un dispositivo simple, donde recibiría una estación de radio serbia "presionando el interruptor". Los teléfonos, los ordenadores no eran una opción, ya que ellos mismos me distraían mucho: mientras lo abres te olvidarás de lo que estabas haciendo. En segundo lugar, realmente quería que la pieza de hierro siguiera siendo lo más similar posible a una radio familiar común e incluso una persona mayor podría usarla. Y, por último, quería que los controles fueran minimalistas: un botón.



Me inspiraron mucho las soluciones de diseño de los años 30-40 del siglo XX en arquitectura, interiores y, en particular, en el diseño de receptores de radio. Este estilo se llama Art Deco. En nuestro país, un brillante representante de este estilo es el edificio de la Biblioteca Lenin, la estación de metro Aeroport, Mayakovskaya, Krasnoselskaya (más precisamente, tiene la influencia de este estilo). Si hablamos de los receptores (cuyo diseño ya recibieron de la arquitectura), entonces las opciones más interesantes fueron aquellas con la escala en la parte superior.





Decisiones de diseño que inspiraron fuertemente



Por supuesto, inicialmente se planeó que el cuerpo de esta radio estuviera hecho de madera preciosa, como un receptor en la parte superior. E incluso una vez aquí en Habré conocí a un diseñador que estaba haciendo un proyecto similar (no recuerdo cuál, lo siento); e incluso hicimos algunos bocetos, pensamos el proyecto, pero aún así no me atreví a tomar un camino tan serio, pero en vano ... En general, hubo muchos y todo tipo de sueños y deseos extraños. Pero todo se redujo a una cruel realidad.



Primeros pasos de implementación



La base de toda radio Wi-Fi es la pantalla del comprador. Seleccioné la pantalla durante mucho tiempo, estúpidamente fui de compras y vi lo que más me gusta. Mi pantalla favorita es la Posiflex PD-2700 . Me detuve en eso.





Encendiéndolo por primera vez y mostrando una imagen en la pantalla



, escribí un artículo separado sobre cómo trabajar con estas pantallas. Puedes leerlo aquí . Por lo tanto, no me detendré en el principio de su trabajo en detalle.



El enrutador TP-Link 3020, Nokia N800 (sí, no se sorprenda, N800), varias computadoras portátiles, computadoras industriales de todo tipo, cajas registradoras, Raspberry Pi de varias generaciones, dispositivos de placa única y mucho más se probaron como los "cerebros" de esta radio. Todo habla de la universalidad de las decisiones que se toman. Y mirando hacia el futuro, algunas de las decisiones se tomaron en aras de la portabilidad y no para reducir el costo de construcción.



Pero en general, no me gustaron todas estas soluciones, o eran excesivas en términos de capacidades para tal tarea o, por el contrario, tenían un rendimiento demasiado bajo y tenían problemas con la reproducción de sonido (por ejemplo, enrutadores). A continuación, te contaré los principales caminos que seguí en la implementación del proyecto. No hay ramas sin salida, como Nokia N800 (por todo el romance de este enfoque).



Prototipo funcional



El primer prototipo de trabajo, que era autónomo e incluso reproducía una radio y estaba en la cocina, lo implementé sobre la base de un enrutador TP-Link 3020 y una tarjeta de sonido USB china por 100 rublos. Este enrutador es una gran cosa para este tipo de artesanías, su principal ventaja es que puede comprar en la tienda de informática más cercana, a diferencia de cualquier otra placa única. El sistema operativo principal era OpenWRT, el sonido se reproducía a través de los altavoces más deshman, por 500 rublos, alimentado por USB. En general, todo está al final. ¡E incluso funcionó! En resumen, es mejor ver una vez que leer mil veces.





Después de eso, quedó claro que cómo controlar el video desde la tableta no es una opción. El significado de radio se pierde cuando puedes usar la misma tableta. Por lo tanto, decidí agregar control usando un codificador. Inicialmente, el codificador estaba conectado al GPIO de este enrutador (sí, tiene un GPIO a bordo), pero no me gustó mucho su trabajo y dicha solución no era portátil, por lo que en el futuro hice un controlador de codificador separado basado en arduino, que está conectado a través de UART.







El codificador está conectado a GPIO TP-Link 3020.



Después de eso, era necesario "configurar" la estación de radio, y quería que se viera como en las radios antiguas cuando gira la perilla y el control deslizante pasa por la pantalla. Para ello se implementó una tipografía de palo vertical, cinco piezas. Y lo sobrecargué cada vez, leí sobre cómo descargar fuentes en mi artículo . El resultado fue tal solución.





Bueno, queda por cruzar la propia radio con estos experimentos y como resultado obtenemos un cómodo control. Lo dijo en pocas palabras, pero de hecho han pasado varios meses, pero el resultado es importante para mí.





Parece todo, pero como es habitual con todos mis amigos radioaficionados, el dispositivo no tiene un estuche y comenzó a pensar en qué hacer. Me inspiraron mucho los receptores vintage abiertos de los años 30, donde solo hay una esquina con escudo y asas, y todas las tripas son gratis.





Una variante del prototipo



decidí repetirla. Para hacer esto, rompió la columna, le quitó las dimensiones e hizo un prototipo de cartón.





Destripo los altavoces, saco el amplificador y tomo medidas de las dimensiones.Después de



desmontar la columna, saqué el amplificador de allí, luego quité todas las dimensiones de la caja, las perillas del amplificador y codificador, y marqué todo en el cartón como se vería.





Las marcas de tamaño



pensé, qué diablos está bromeando, déjame ver cómo quedará en cartón, una especie de prototipo de cartón.





Radio de cartón ¡



Y hasta funciona!





Luego copió todos los tamaños, los dibujó y los envió a corte por láser.





Dimensiones El



acrílico cortado vino después, y así queda después del montaje.







En el panel frontal hay un botón de encendido, un codificador, una perilla de volumen. En el interior, puedes ver que hay una fuente de alimentación independiente, un montón de concentradores, bueno, seamos honestos, no se ve muy bien.







Como muchos pueden notar, el acrílico es transparente. Inicialmente, quería colocar la pantalla detrás de ella para que brille a través de ella (la pantalla ya es blanca, brilla a través de un filtro verde). Pero no me gustó el color y el contraste.







En la foto, hay luz a través de acrílico naranja, un color de pantalla honesto (en la vida es blanco) y un filtro azul de una de las pantallas (ahora tengo verde en mi radio).



El diseño resultante es genial, por supuesto, pero no me mentiré, no es práctico. Por supuesto, funcionó e incluso escuché este producto durante algún tiempo, pero se revelaron una serie de problemas. En primer lugar, era completamente imposible usarlo de esta forma: acumula polvo, no se puede poner nada encima, ocupa mucho espacio. En segundo lugar, TP-Link 3020 resultó ser bastante débil para la radio y muchos enfrentaron el problema de implementación en él. OpenWRT no tiene soporte de hardware para punto flotante y, por lo tanto, mpd carga el procesador al 100% y puedes escucharlo en el sonido (hay clics digitales desagradables). Eso, en general, puso fin a tal implementación. Además, varias circunstancias de mi vida no me permitieron seguir participando en este proyecto, y esta radio fue desmontada y guardada literalmente en una caja.



Decisión final



Pero no creas que me di por vencido. No, la idea siguió viva. Y ahora, después de un tiempo, decidí acabar con esta radio. Y resultó tan bien que tuve un caso que compré en China. Como cerebro, tomé beaglebone black, con el que trabajé en un proyecto y conozco sus lados buenos y malos. La bufanda es vieja, por supuesto, pero se adapta perfectamente a esta tarea. Inicialmente, quería poner OpenWRT como el sistema operativo principal, pero tuve un montón de problemas con los controladores de Wi-Fi allí. Tomé la tarjeta de sonido en el popular DAC PCM2704. Ella es fácilmente buscada por esta solicitud en una subasta popular, como una bufanda blanca. Estoy muy satisfecho con la tarjeta de sonido, pero en general fue posible poner cualquiera, incluso el SoundBlaster.





Etapas de prototipos, prueba de diferentes tarjetas de sonido, dispositivos de placa única, imágenes de Linux, adaptadores de Wi-Fi y elección de la solución más óptima



En mi último artículo hablé de dedicar tiempo a la elección de componentes, de lo contrario habrá un dolor de cabeza. Sucedió de la misma manera, quería una tarjeta Wi-Fi USB habilitada para Linux. Y sin dudarlo, tomó TP-Link N150 para él. En resumen, no hagas esto. Ella bebió toneladas de sangre de mí, pasó una semana con ella. Bajo OpenWRT, no pude conseguirlo, en Ubuntu lo empecé con unos feroces bailes con pandereta. En resumen, lo instalé de acuerdo con este manual (hay una instrucción en algún lugar en el medio). El script de inicio (/etc/rc.local) se parece a esto para mí (después de un montón de experimentos).



#!/bin/sh
PATH="/sbin:/bin:/usr/bin"

ps -ef|grep wpa|awk '{print $2}' |xargs -i kill {}

#in case you want to test the script
ifdown wlan0
sleep 0.1
ifup wlan0
sleep 0.1
ifup wlan0
sleep 0.1
ifup wlan0
sleep 0.1
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
#END
sleep 30
#    


En general, después de todas las ordalías, todo esto se puso en marcha y todo esto se montó y se puso en el edificio. No describiré todos los detalles, porque cada uno tendrá el suyo. Pero hice nuevos casquillos para las patas, la parte inferior estaba hecha de madera contrachapada y le pegué todo. La pantalla estaba montada sobre marcos de madera.





Panel frontal



Todo está controlado por un codificador. Izquierda-derecha - selección de estación, presionando el botón codificador - pausa; doble pulsación breve del botón - visualización de la hora y la fecha (funciona como un reloj).





Panel trasero



A pesar de que se trata exactamente de una radio Wi-Fi, dejó la posibilidad de conectarse a través de Ethernet para el diagnóstico y la depuración. Como puede ver, ahora no hay amplificador en el estuche. Solo un line-out, que, en mi opinión, es aún más conveniente. Echemos un vistazo al interior.







En el interior, a la izquierda, vemos la fuente de alimentación, debajo en la cara hay una pantalla en un marco de madera, a la derecha en la cara hay un codificador. En la parte superior del concentrador USB, en el que se conecta la alimentación, la pantalla también se alimenta desde él, también se inserta una caja de sonido en el concentrador; el tablero en sí se encuentra en una esquina de aluminio sobre bastidores, atornillado a madera contrachapada. El controlador del codificador está oculto a la derecha, se ve así.





Controlador de codificador



Este es un arduinka ordinario que se conecta a través de UART al Beaglebone.



Algunas palabras sobre el código fuente y la configuración



Noté que si se agrega una descripción de código a un artículo, su legibilidad se reduce inmediatamente a la mitad. Por lo tanto, en este artículo habrá muy poco código, aunque dos artículos solo pueden dedicarse a la descripción del código. No describiré la configuración del demonio mpd, hay miles de artículos, incluidos los de Habré, y el manual en sí suele ser exhaustivo. Omitiré la configuración de Linux en Beaglebone. A menos que tuviera que encender el UART para conectar el Arduino. Pero esto también se puede buscar fácilmente en Google. El código fuente de todo el proyecto vive en github y está disponible para todos.



No analizaré todos los puntos del código. El trabajo con la pantalla se cubrió anteriormente en el artículo. Revisaré los archivos.



La carpeta arduino_encoder contiene el proyecto del codificador arduino. Todo es intuitivo allí y no veo ninguna razón para solucionarlo de alguna manera. En la carpeta de Linux, los códigos fuente de la propia radio, era este código el que vagaba de un proyecto a otro.



  • Makefile


Este es un montaje del proyecto en sí, nada nuevo aquí.



  • control.c


Este es el programa maestro donde ocurre toda la magia.



  • uart.c
  • uart.h


Aquí está el código de inicialización UART listo para usar. Para todos los que trabajan en C con UART en Linux, les recomiendo que examinen estos dos archivos. Bueno, también recomiendo que todos los que vieron mis seminarios web sobre cómo trabajar con UART en Linux una o dos veces también los examinen.



  • display.c
  • display.h
  • salida.h


Como puede adivinar, este es el código para trabajar con la pantalla. Además, tuve que atornillarle el código de conversión de caracteres.



  • charset_coverter.c
  • charset_coverter.h


La pantalla funciona en codificación CP866. E incluso para mostrar un mensaje en ruso desde la consola, debes usar el siguiente truco:



echo -en " \n dlinyj" | iconv -f UTF-8 -t CP866 > /dev/ttyACM0


Pero, hay un matiz: no hay letras "e", el signo duro "" y el signo suave "b" están invertidos. Entonces, después de decodificar, necesita decodificar.



  • mpc.c
  • mpc.h


Trabajando con mpd daemon. En general, hay librerías para trabajar con él, pero como no necesito una gran cantidad de funciones, decidí escribir todo desde cero en sockets. Quizás le sea útil a alguien.



  • término.c
  • term.h


Oh, esa es la gran parte. Como el código a veces tenía que depurarse sin una pantalla, me hice un "simulador" de la pantalla, con control de teclado en lugar de un codificador. Se ve así: la primera imagen muestra la fecha y el reloj, la segunda imagen muestra una melodía y una estación.









Para obtener más detalles sobre cómo escribir esto, consulte el artículo "Gráficos de terminal" .



Agregar estaciones de radio para mí es el siguiente guión.



#! /bin/sh -
# Some configuration settings
VOLUME=60
#mpc volume $VOLUME	# adjust this to suit your speakers/amplifier
mpc clear	# clear current playlist

mpc add http://relay3.slayradio.org:8000/						#*Slay Radio
mpc add http://fr1.streamhosting.ch:8080						#*lounge-radio.com
mpc add http://us-tx1.streams.bassdrive.com:9000/				#*DnBHeaven.com
mpc add http://uk2.internet-radio.com:31491						#*AmbientRadio.org
mpc add http://www.partyvibe.com:8010/							#*PARTY VIBE RADIO
mpc add http://streamer.psyradio.org:8120						#*psyradio chillout

mpc add http://live.coolradio.rs/cool128
mpc add http://big2.bigportal.ba:8100/big2


Si tiene alguna estación de radio en streaming que pueda recomendar, especialmente para música electrónica, escriba en los comentarios :)



Para facilitar la administración y la configuración, agregué una interfaz web del proyecto ympd . Se parece a esto.





Como resultado, el archivo /etc/rc.local al final se ve así:



sleep 30
/home/ubuntu/addradio.sh > /dev/null 2>&1 &
/home/ubuntu/wifi-radio/Linux/control > /dev/null 2>&1 &
/home/ubuntu/ympd --webport 80 > /dev/null 2>&1 &


Sí, sí, sé que en Ubuntu systemd y rc.local son malos de usar y otros bla, bla, bla. Pero lo uso porque quiero y puedo.



Salir



Por supuesto, la radio resultó no ser tan hermosa y pretenciosa como se pretendía originalmente, pero decidí que un pájaro en mi mano es mejor que un pastel en el cielo. Es mejor hacerlo que prolongar el placer durante varios años más con un resultado poco claro. Sin embargo, aunque es feo, me hace muy feliz. Entonces, qué leer un montón de texto, es hora de ver un video de cómo se ve y funciona todo.







El video es un poco viejo, ahora la antena y Ethernet están conectadas e incluso funcionan bastante bien.



Donde crecer



Y hay espacio para crecer. Una de las ramas de este proyecto que he estado explotando durante mucho tiempo es el proyecto Volumio . Este es un encantador agregador de reproductores que le permite escuchar estaciones de radio de todo el mundo, transmisión y más. Todo bien, perfectamente acoplado con mi proyecto y visualizado todas las estaciones en la pantalla. A menos que los controles fueran completamente inútiles. También puede agregar control por voz, hay un maravilloso proyecto de Rhasspy , sobre el cual incluso hubo un artículo sobre Habré. ¡Le permite hacer control por voz sin conectarse a un servidor externo!



Lo único que vale la pena deshacerse de mpd es el cuello de botella. Si no hay estación, cuelga esperando. Sin almacenamiento previo de otras estaciones, etc. Es decir, hay suelo para el crecimiento. Y el tema es increíblemente interesante, con un montón de ideas. ¡Gracias por leer!






All Articles