
Requisitos básicos:
- Hay una antigua placa Raspberry Pi de primera generación sin uso;
- La placa está en un estante como peso muerto y no se utiliza — placa 'Ladrillo';
Lo que se desea obtener:
- En un cierto momento (por ejemplo, según el estado de ánimo)
la placa deja de ser un 'Ladrillo' y se le inserta una tarjeta de memoria mágica; - Se conecta un cable Ethernet y un conector de un altavoz o auriculares normales a la placa;
- Después de encender, el antiguo 'Ladrillo' — canta
La idea principal:
- El mínimo número de movimientos para cualquier configuración; en el mejor de los casos, solo conectamos el cable "Ethernet", la alimentación y los altavoces, y no hacemos nada más, de la palabra "en absoluto";
- El antiguo 'Ladrillo' de caja soporta, por ejemplo, 20 estaciones de radio por Internet, el cambio entre ellas puede hacerse a través de la rueda del ratón o en un pin GPIO determinado (conectar dos cables y cerrarlos (mi sueño de infancia));
- El control se realiza a través de un canal de radio, y este canal puede ser un simple ratón de radio;
- Tomar un sistema ya preparado, compilar la distribución en "Yocto Project"
es decir, como normalmente no haremos nada, ya que todo está hecho.
(es suficiente solo colocar un observador externo al otro lado "del televisor");
Descripción
El altavoz de Internet más simple "KODI"
El ensamblaje está destinado a antiguas placas Raspberry Pi 1
(cubiertas de polvo en algún lugar en el estante, pero que aún están listas para trabajar)
Por defecto, se utiliza una lista m3u8 de 12 estaciones de radio por Internet.
Se supone que la placa funciona sin salida HDMI, y para apagarla basta con desconectar el adaptador de alimentación de la toma. Y como control remoto ultra moderno, puedes usar tu súper ratón de radio (o conectar uno normal con cable).
Al encender, la interfaz de red se configura por defecto a través del protocolo DHCP y se reproduce la última estación de radio recordada de la lista; el control del volumen de reproducción se realiza con el ratón normal:
(asigna finalmente a tu ratón el título de "jefa de control", y felicítala, se lo merece)
Rueda hacia adelante - aumentar el volumen
Rueda hacia atrás - disminuir el volumen
Presión prolongada (3 segundos o más) en el botón derecho del ratón - seleccionar la siguiente estación de radio
Presión prolongada (3 segundos o más) en el botón izquierdo del ratón - seleccionar la estación de radio anterior
Para agregar su propia lista de estaciones de radio por Internet
siempre puede conectar un cable HDMI desde el televisor
y utilizar la interfaz gráfica estándar de Kodi 17.6
(apague la placa, conecte el HDMI y encienda el adaptador de alimentación)Menú principal de Kodi => "Complementos" => "Mis complementos"
=> "Clientes PVR" => "PVR IPTV Simple Client"
Implementación inicial
(posible)
Inicialmente, cuando decidí hacer una "Columna de Radio por Internet", planeé lo siguiente:
- Distribución de consola minimalista en Yocto Project;
- El flujo de audio se reproduce a través de GStreamer;
- La interfaz de red se configura por DHCP;
Y esta solución tiene varias ventajas:
- Lo suficientemente rápida (tiempo de arranque de 30-40 segundos tras la alimentación);
- Lo suficientemente confiable (menos programas, menos puntos de fallo);
- La distribución de consola es mucho más fácil de convertir a modo de solo lectura
es decir, los programas no escriben nada en el sistema de archivos raíz
(y el sistema de archivos en el medio SDHC es, en mi opinión, el primer candidato a fallos);
Nota:
En Yocto, es bastante sencillo cambiar el sistema de archivos raíz (rootfs) a modo solo lectura al modificar un parámetro durante la construcción.
Por defecto, Yocto ofrece dos opciones:
1) Operación del sistema de archivos en modo normal de lectura/escritura (así funcionan todas las distribuciones de propósito general, como Ubuntu).
2) Operación del sistema de archivos en modo solo lectura (así funcionan las distribuciones especializadas, como las de enrutadores).
En el modo solo lectura, todos los directorios donde generalmente se almacenan los datos de aplicaciones y servicios durante su funcionamiento se montan en la memoria RAM (por ejemplo, el directorio /var/log, etc.). Los datos son válidos solo para la sesión actual, y se pierden tras un corte de energía.
Si en el proyecto Yocto especificas utilizar "read only" durante la construcción, tu distribución estará configurada solo para lectura. Sin embargo, siempre puedes añadir la capacidad de un cambio dinámico de "read only" a "read/write", pero eso ya es una historia completamente diferente...
Y hay una gran desventaja:
«Hay que hacerlo», es decir, necesito gastar N cantidad de noches.
(normalmente después del trabajo, y ese es el momento más ineficaz, ya que en ese momento el cerebro ya no piensa, suele estar dormido)
Además, escribí sobre el centro multimedia en mi artículo anterior en Habr. project
y la posibilidad de continuar en el mismo sentido superó mi impulso investigativo. De esto se hablará en el siguiente capítulo.
Transformar Kodi en una columna de radio por Internet.
Para agregar la funcionalidad que necesito, añadiré otro método en la receta de construcción de la distribución que se describió anteriormente. ver archivo berserk-image.bb
GUI_SETTINGS = "home/root/.kodi/userdata/guisettings.xml"
# configuración de inicio del último canal de TV seleccionado (1-fondo 2-primer plano)
F1_LINE = "0"
R1_LINE = "1"
# configuración de salida de audio, siempre se conecta solo la salida de audio analógica
F2_LINE = "PI:HDMI"
R2_LINE = "PI:Analogue"
# dado que HDMI no se usa por defecto, desactivo la actualización automática
# ya que podría pasar que la energía se haya ido y los datos queden sin guardar
F3_LINE = "0"
R3_LINE = "2"
# el método se encarga de agregar la configuración:
# que convierte la "TV Inteligente" en "una simple columna de radio de 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"
# dado que la salida HDMI puede no usarse,
# es necesario desactivar "la bienvenida de inicio"
off_kodi_welcome() {
sed -i "s|${FIND_STR}|#&|" ${IMAGE_ROOTFS}/${SCRIPT_FIRST_RUN}
}
Los métodos están destinados a modificar el sistema de archivos raíz antes de la creación de la imagen del distribuyente en forma de un solo archivo raw, que se graba en la tarjeta de memoria con el comando dd
Así se hace:
ROOTFS_POSTPROCESS_COMMAND += "add_radio_guisettings; off_kodi_welcome;"
En resumen, en el archivo de configuración principal de Kodi 17.6, se modifican "tres puntos"
- Configuración del inicio del último canal de TV;
- Configuración de salida de audio, siempre se conecta solo la salida de audio analógica;
- Desactivación de actualizaciones automáticas;
- Nota:
Lo único con lo que tuve dificultades, fue que tuve que llevar también el archivo de base de datos en formato sqlite => TV29.db, que indica el canal de TV actual que se está reproduciendo (ya que por defecto no está seleccionado ningún canal), y a través de la configuración xml en Kodi no se puede hacer esto.
secuencia de acciones más detallada para cada punto:
1) Haga clic en el ícono de "engranaje" en la esquina superior izquierda de la pantalla
y seleccione el ítem "Configuraciones de PVR y TV" (imagen de TV con dos cuernos)
luego en la parte izquierda del menú, seleccione el ítem "Reproducción", y en la sección central "General"
indique en el menú desplegable "Continuar con el último canal al iniciar"
seleccionando la configuración "Primer plano"
o más visualmente:
"Configuraciones de PVR y TV"
=> "Reproducción"
=> "Continuar con el último canal al iniciar" => "En primer plano"
2) Haga clic en el ícono de "engranaje" en la esquina superior izquierda de la pantalla y seleccione:
"Configuraciones del sistema"
=> "Complementos" => "Actualizaciones" => "Nunca buscar actualizaciones"
3) Haga clic en el ícono de "engranaje" en la esquina superior izquierda de la pantalla y seleccione:
"Configuraciones del sistema"
=> "Audio" => "Dispositivo de salida de sonido" => "PI: Analógico"
Cómo he estado viendo la televisión incorrectamente durante dos años.
Debo confesar que en dos años no he aprendido a ver la televisión correctamente.
Generalmente veo la televisión en la cocina. A la televisión está conectado un Raspberry Pi 2B, que tiene conexiones Ethernet y HDMI. La alimentación de la placa se proporciona a través de un cable USB normal, que está enchufado en el puerto USB de la televisión, es decir, en esencia, encender la televisión con el control remoto también alimenta la placa Raspberry Pi, y apagar la televisión con el control remoto también corta la alimentación de la placa Raspberry Pi.
Sí, soy muy consciente de que no debería hacerlo, porque el sistema de archivos raíz del centro multimedia Kodi (ext3) está funcionando en modo lectura/escritura. Pero soy una persona perezosa, y al principio decidí comprobar cuánto tiempo podía apagar el sistema, hasta el momento en que dejara de arrancar completamente, pero desafortunadamente en dos años no he logrado hacerlo (quizás simplemente tuve suerte, no lo sé).
Y en mi opinión, si este modo funcionó para mi televisor, también funcionará para una "simple radio de Internet", y como desactivé manualmente la actualización automática de complementos de Kodi, la probabilidad de que el sistema de archivos falle será aún menor. Hasta ahora, no veo problemas con esto.
Nota:
Pero siempre puede, si lo desea, con un solo comando yocto
IMAGE_FEATURES += "read-only-rootfs"
y cierta magia hacer que su distribución funcione en modo "solo lectura".
La distribución de "radio de Internet" descrita en el artículo es doméstica, y lo principal para una distribución doméstica es tener una GUI atractiva. En mi opinión, es muy difícil o casi imposible enseñar a un usuario común a teclear comandos mágicos incomprensibles en la consola, ni siquiera sabe de qué se trata. Pero una GUI, eso sí, está disponible.
Y este es quizás mi principal argumento a favor de una distribución no basada en consola. La cálida e intuitiva interfaz gráfica de usuario de Kodi, aunque no sea estrictamente necesaria, existe.
(También se me olvidó mencionar que Kodi se puede controlar de forma remota, por ejemplo, desde un teléfono inteligente, instalando la aplicación «Yatse», y para algunos, esto puede ser una ventaja)
Configuración de Kodi para control con el ratón
y ahora Ráfaga
VolumeUp
VolumeDown
ChannelDown
ChannelDown
ChannelUp
La configuración redefine los eventos generales (global) para los siguientes elementos:
- desplazamiento de la rueda del ratón hacia adelante
- desplazamiento de la rueda del ratón hacia atrás
- clic en el botón medio del ratón
- manejo de la pulsación prolongada del ratón (3 segundos o más),
0 identificador del botón derecho, 1 identificador del botón izquierdo
más información detallada sobre la configuración de eventos del ratón:
Qué hacer si el sistema de cable no ha llegado
«Pero no tengo puertos Ethernet libres en casa (o nunca los tuve)» — podría exclamar parte de los afortunados propietarios de las viejas placas Raspberry Pi 1 (posiblemente la placa se compró para investigación y ha permanecido en el armario)
Y dado que la placa no tiene Wi-Fi integrado, sin una conexión Ethernet, no es muy funcional.
Por supuesto, existe la posibilidad de utilizar la placa Raspberry Pi 1 sin Ethernet, pero requerirá ciertos esfuerzos de tu parte. Normalmente, tales cosas solo son interesantes de realizar en el marco del aprendizaje de algo nuevo, es decir, no es una tarea normalmente user-friendly.
Así que consideremos una hipotética opción de uso de la placa sin Ethernet:
Se puede conectar un adaptador USB externo de Wi-Fi, con el criterio de que
el adaptador debe funcionar bien con Linux.
Nota:
Lamentablemente, algunos adaptadores WiFi no funcionarán. Esto no es una característica de la distribución presentada en este artículo, sino más bien un problema específico de ciertos controladores de los adaptadores WiFi en el núcleo de Linux. Se puede afirmar que, en este momento, no puedes simplemente ir a la tienda y comprar cualquier adaptador WiFi. Más bien, debes elegir un adaptador WiFi de una lista de los menos problemáticos y que funcionen bien en Linux.
He probado solo los siguientes modelos:
- Adaptador WiFi con chipset Atheros D-Link DWA-126 802.11n (AR9271)
- Adaptador WiFi NetGear WNDA3200
- Adaptador WiFi NetGear WNA1100
- Adaptador WiFi TP-Link TL-WN722N (AR9271)
- Adaptador WiFi TL-WN322G v3
- Adaptador WiFi TL-WN422G
- Adaptador Wifi Asus USB-N53 chipset Ralink RT3572
Si ya tienes un adaptador Wifi USB, puedes comprobar si funciona bien en Linux de la siguiente manera:
- Instala una distribución de Linux ampliamente utilizada
, como 'Ubuntu Desktop' - Carga el sistema
- Conecta tu adaptador Wifi USB
- Ejecuta el gestor de red e intenta conectarte a tu punto de acceso WiFi
- Si todo funciona bien y tu conexión a Internet es estable, significa que tu adaptador está bien soportado y puedes continuar trabajando en la conexión de este adaptador en una distribución especializada y posiblemente con otras versiones del núcleo.
(si no, pues no, lamentablemente — mejor ni intentarlo)
Compatibilidad de un adaptador Wifi externo en 'Raspberry PI'
Para un funcionamiento adecuado del adaptador WiFi en Linux, necesitamos dos cosas:
1) Soporte del núcleo de Linux para el adaptador WiFi específico
2) Disponibilidad del módulo del núcleo en el sistema para el adaptador WiFi específico
Tomemos como ejemplo el adaptador TP-Link TL-WN722N. Tiene una antena simplemente magnífica.
Encontraremos el chipset en el que la placa funciona — en mi caso es 'AR9271'. Nota:
Lo más interesante es que, para el mismo modelo de un mismo fabricante, el chipset WiFi puede variar. Por ejemplo, me he encontrado con que para el TL-WN722N versión 2, se utiliza un chipset diferente Realtek RTL8188, y este ya funcionaba mal en Linux (en ese momento), lamentablemente así son las cosas. Es decir, a veces hay que prestar atención a los pequeños números en la parte trasera (oscura) del adaptador.
Ahora buscaremos el nombre del parámetro en la configuración del núcleo que corresponde al controlador del chipset AR9271, lo mejor es buscar la combinación de palabras 'AR9271 cateee.net'.
donde «cateee.net» es un sitio genial con descripciones de configuraciones de módulos del núcleo de Linux
Primero encontramos el nombre de la configuración del núcleo — CONFIG_ATH9K_HTC
y el nombre del módulo del núcleo que necesitamos ath9k_htc
y luego solo es necesario indicar el nombre del módulo en el archivo de fragmento de configuración
del núcleo de Linux => recipes-kernel/linux/files/rbpi.cfg, añade la línea:
CONFIG_ATH9K_HTC=m
Así, a partir de ahora puedes conectar cualquier equipo adicional a tu sistema (bueno, si ya está soportado en el núcleo de Linux)
Qué hacer si eres un geek de Habr — un constructor
Y creas cosas increíbles, como o si eres un estudiante y sueñas con crear algo similar.
Entonces, a simple vista, puedes conseguir una pantalla táctil para RPI en aliexpress, pedir allí una batería adecuada, conectar todo esto a la placa Raspberry Pi 1,2 o 3 (mejor a la 3, ya que tiene Wi-Fi incorporado), elegir un tema de interfaz gráfica en Kodi, diseñada para pantallas táctiles y voilà => puedes obtener un simple reproductor de audio. Claro, será bastante voluminoso, pero será tuyo.
Nota:
A para armar un centro multimedia Kodi para la placa más económica
Raspberry Pi Zero Wi-Fi en yocto, solo necesitas cambiar dos líneas:
archivo de configuración => build/conf/local.conf
MACHINE = 'raspberrypi0-wifi'
receta de construcción de Kodi => recipes-mediacentre/kodi/kodi_17.bbappend
EXTRA_OECONF_append = "${@bb.utils.contains('MACHINE',
'raspberrypi0-wifi', '${BS_RPI}', '', d)}"
Si la capacidad de respuesta de la GUI de Kodi 17.6 debido a un núcleo de procesador en Zero te parece misteriosa, puedes hacer un truco y compilar una versión más antigua, pero muy rápida, como Kodi 15.2, que en este aspecto es más "amigable" (a veces lo antiguo resuelve todo)
Lamentablemente no tengo la placa, así que no puedo verificarlo, pero por lo que siento, debería funcionar.
Instrucciones rápidas para la construcción
1) Instale las dependencias de Yocto Project (por ejemplo, en 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) Descargue e instale Repo:
mkdir ~\/bin
curl http:\/\/commondatastorage.googleapis.com\/git-repo-downloads\/repo > ~\/bin\/repo
chmod a+x ~\/bin\/repo
3) Descargue el proyecto desde 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) Compile el proyecto:
.\/shell.sh
bitbake berserk-image
también puede compilar lo mismo para las placas Raspberry Pi 3B Plus, 3B y 2B:
repo init -u https:\/\/github.com\/berserktv\/bs-manifest
-m raspberry\/rocko\/radio-0.2.8.xml
instrucciones más detalladas sobre la compilación
y grabación en la tarjeta microSDHC
Postscriptum
Por supuesto, la idea de un altavoz de radio por Internet es típica, es bien conocida y en Habr encontrarás muchos artículos sobre este tema, por ejemplo
Y aún puedes pensar que simplemente adapté los requisitos a la solución lista. A esto puedo responder y decir que no, honestamente.
La historia del Sr. Ervy
Creer o no, así fue como sucedieron las cosas:
Nuestra oficina de trabajo colinda con una empresa de fabricación de diversos equipos de sonido, y en una ocasión, el director de esta empresa, a quien llamaremos señor "Ervi", se acercó a nuestro director adjunto, el señor "Arseniy", y le preguntó cuán difícil era configurar la reproducción de un flujo de audio en una placa Raspberry Pi, es decir, que la placa se conectara a la red y a los altavoces para "escuchar un sonido característico".
Después de esto, el señor Arseniy se dirigió al adjunto de mi jefe, el señor "Borís", y le pasó la pregunta, y yo, como observador externo, casualmente recordé esta idea y la llamé "La tarea de los tres jefes".
En general, quisieron hacer lo mejor, pero resultó, cito - "Pero el señor Ervi, como siempre, ayudó."
Al poco tiempo, pregunté al señor "Borís" su opinión sobre escribir una pequeña nota al respecto en "Habr", a lo que "Borís" respondió que el cambio de "tres elementos del menú" en Kodi no aporta ninguna información nueva y no merece ser mencionado por separado. Por supuesto, estoy completamente de acuerdo con él y por eso, no le diré que escribí algo al respecto.
El artículo fue escrito exclusivamente para la placa "Raspberry Pi 1" que tomé del señor "Borís" durante el experimento; las coincidencias con otras placas "Raspberry Pi 1" son puramente casuales.
Les deseo muchas compilaciones buenas y variadas, y que incluso este año, un antiguo ladrillo les haga cantar.
Fuente: habr.com
