Danielside

informática softwarelibre divagaciones música

Recuperando libertad y diversión con Raspberry Pi

¡Pues ya llegó el trasto! Después de una larga espera tengo en casita una placa Raspberry Pi para jugar un poco. ¿Una queeeeeeee?

El pequeño ordenador está generando mucho movimiento en Internet y está ganando una comunidad fuerte en poco tiempo. Para los no iniciados, resumo: se trata de un ordenador completo con arquitectura ARM integrado en una placa ligeramente más grande que una tarjeta de crédito y que es capaz de ejecutar una pequeña selección de distribuciones Linux compiladas para ARM y todo ello por solo $35. Han salido y saldrán varios modelos, el mio (Modelo B) tiene las siguientes características (detalladas hasta el extremo en [1]):

  • Un SoC que comprende la CPU (ARM11 700Mhz con posibilidad de overclock a 900Mhz) y la GPU (capaz de vídeo 1080p).
  • 256 Mb de RAM.
  • 2 puertos USB 2.0
  • Salidas de vídeo: compuesta y HDMI, no utilizables simultáneamente.
  • Salida de audio jack.
  • Ethernet 10/100.
  • Lector de tarjetas SD. No es de propósito general, es aquí de donde se lee la imagen del SO y donde se obtiene el espacio para montar las particiones de datos, siempre debe estar presente la tarjeta con el sistema.
  • Alimentación con un microUSB con un consumo de tan solo 3,5W.

Vista superior raspberry pi

¿Y qué hago con esto? En principio se me ocurren varios proyectos:

  • Un servidor personal mismamente. Puede ser un servidor web, un servidor de OwnCloud para montarte tu propia nubecilla (esto sí lo tengo en mente).
  • Un centro multimedia. En principio debería bastar para ver vídeos pero no lo tengo muy claro. Si se trata de vídeos H.264 no hay problemas pero si el decodificador del formato que sea es software no va a ir bien. Para MPEG2 por hardware necesitas adquirir una licencia adicional. También debería tener suficiente capacidad para grabar DVB y por supuesto reproducir música.
  • Algo de domótica. El Pi está dotado de una serie de conectores GPIO (General Purpose Input/Output) que sirven tanto como para entrada como para salida y que son completamente programables. Esto quiere decir que puedes conectar sensores y que puedes actuar sobre elementos externos. Por ejemplo, si tengo un toldo eléctrico en la ventana, podría hacer que el Pi lo subiera o lo bajara solo en función de la lectura de un sensor de luz que le vendría por otro pin.

El RPi está creando comunidad porque se trata no solo de que se ejecute software libre, sino que es hardware libre [2], estando todas sus especificaciones eléctricas y de protocolo publicadas. Esto hace que la gente se interese y se mueva y pueda crear cada vez mejor software para él. De hecho el propósito original de los creadores no es comercial sino educativo. Cuando se dieron cuenta de que la enseñanza de computación en UK estaba decayendo a niveles alarmantes decidieron crear un dispositivo barato hackeable con el que se pudiera «jugar» a todos los niveles.

Comenzando

¡Hay que vestirlo con algo que está en bolas!

Raspberry pi en una caja de piezas de construcción

Lo primero fue descargarme una imagen de alguna distro y pasarla a una tarjeta SD. Yo empleé una de 8Gb clase 2, que creí que no iba a ser suficientemente rápida pero al final sí. Pero cuanto más rápida más rápido cargará el sistema. Lo que tengo pendiente es probar con una clase 10 por si también afecta a la ejecución, no solo a la carga. En [3] están las instrucciones para cargar la tarjeta desde cualquier SO. Yo elegí la Raspbian «Wheezy» que es la que te recomiendan cuando eres primerizo. El entorno gráfico es LXDE. Con la tarjeta cargadita y el HDMI conectado a un monitor procedo a conectar el adaptador microUSB y a hacer la primera incursión.

El primer inicio te lleva a un asistente que te permite configurar un montón de cosas útiles como el idioma y el teclado, aparte de permitirte cambiar la contraseña del usuario pi, que es el que emplearemos. También te permite activar el acceso por SSH lo cual es recomendable para trabajar sin una pantalla conectada al Pi, así que lo activamos. El usuario/contraseña por defecto son pi/raspberry así que deberíamos cambiar esa contraseña, cosa que también se puede hacer mediante este primer asistente.

Una vez hechas las configuraciones preliminares estamos dentro. Introducimos usuario y contraseña y empezamos a jugar desde la consola. Si queremos entorno gráfico hay que escribir:

startx

Cuando tengamos internet (nada más fácil que conectarle el cable ethernet y dejar que se configure por DHCP) algo muy recomendable es actualizar la distribución:

sudo apt-get update
sudo apt-get upgrade

Primer proyecto: grabando la TDT

Este proyecto nace de una necesidad. Quería tener la posibilidad de tener un ordenador siempre encendido que fuera capaz de grabar «la TDT» (DVB-T). Para ello debía ser un equipo de muy bajo consumo. Además necesito acceso remoto a través de ssh. La idea es conectarme en cualquier momento a este equipo para lanzar la grabación desde cualquier lugar.

Así que el pequeño pi es el candidato ideal. El bajo consumo que presenta lo hace perfecto para estar encendido continuamente, pero la escasa potencia hace que no se pueda malgastar ni un ciclo en ejecutar un entorno gráfico ni un programa de grabación de TDT con una interfaz de usuario gráfica, como el gran Me-TV [4] (el único que realmente lo hace todo). Este programa es el que tengo para el HTPC, un equipo completito con un doble núcleo AMD y 2Gb de RAM, pero este equipo no lo quiero tener encendido todo el día.

Eso nos deja los siguientes requisitos para el proyecto:

  • Un sintonizador USB que funcione con Linux.
  • Encontrar la manera de grabar exclusivamente usando la consola.
  • Un espacio de almacenamiento suficiente y accesible desde otros equipos.
  • Acceso remoto por ssh desde cualquier red.

Afortunadamente hace un tiempo compré en FocalPrice un cacharro para sintonizar DVB-T por USB que se parecía mucho a éste:

dvbtstick

Que está a la venta aquí. Creo que el empaquetado difiere un poco pero el sintonizador, el mando y la antena son idénticas. No puedo garantizar que funcione, hay que jugársela, porque algunas veces el aspecto exterior es idéntico pero el chipset interno ha cambiado, pero si tiene las siguientes características…

  • Chipset Afatech AF9015.
  • Sintonizador Philips TDA18218.

…entonces funcionará directamente en un kernel moderno y solo necesitará un archivo de firmware (advertencia, ya el controlador no sería 100% libre porque el firmware es un binario). Para instalarlo nos bajamos el archivo del firmware y lo copiamos al directorio donde Linux lo espera encontrar:

wget http://www.otit.fi/~crope/v4l-dvb/af9015/af9015_firmware_cutter/firmware_files/4.95.0/dvb-usb-af9015.fw
sudo cp dvb-usb-af9015.fw /lib/firmware/

Hecho esto sacamos el sintonizador y lo volvemos a introducir y si todo ha ido bien debería haberse creado el dispositivo /dev/dvb/adapter0. Lo comprobamos con:

ls /dev/dvb

Independientemente de qué sintonizador físico tengamos (en una entrada mia anterior explicaba como hacía funcionar un dispositivo de Zaapa con un controlador libre [5]) lo que tenemos que conseguir es tener un dispositivo lógico creado y que funcione porque cualquier sintonizador ofrecería la misma interfaz. El mejor punto de partida para saber qué funciona y qué no funciona es [6].

Ahora tenemos que instalar un conjunto de programas para sintonizar DVB-T:

sudo apt-get install dvb-apps

Una vez instalados estos programas hay que crear una lista de canales haciendo un scan de todo el espectro, para ello:

w_scan -c ES -X > channels.conf

Este comando tiene la ventaja de que no necesita un archivo inicial según cada ciudad (como el comando scan) y esos parámetros sirven para sintonizar en España (-c ES) y para generar el archivo de salida en un formato determinado (-X) que entienden tanto Me-TV como mplayer. Otros programas quizá necesiten otros formatos, pero éste es muy versátil.

Llegados a éste punto podríamos probar si sintonizamos haciendo uso del programa gnutv que venía en el paquete dvb-apps. Así que en un terminal hacemos:

gnutv -out dvr -channels <camino a channels.conf> <canal>

El parámetro -out dvr le dice a la tarjeta que envie el resultado por /dev/dvb/adapter0/dvr0. Si curioseais por /dev/dvb/adapter0 vereis que hay varios tipos de dispositivos, incluyendo uno de red (¿¿??). En concreto el dvr sirve para que lean de él los reproductores de vídeo como mplayer.

El canal debe venir entre comillas porque tiene que ser exactamente lo que venga en el primer campo (los campos están separados por «:») de cada línea del channels.conf. Un ejemplo concreto para mi archivo de canales:

gnutv -out dvr -channels ./channels.conf «laSexta3»

Si ha ido bien deberíamos ver unos indicadores de la sintonización. Este programa bloquea el terminal así que lo más recomendable es abrir otro, iniciar el entorno gráfico (startx), abrir una consola y teclear (si no tenemos mplayer: sudo apt-get mplayer):

mplayer /dev/dvb/adapter0/dvr0

Y ya debería verse el canal que se ha sintonizado. La gran ventaja de gnutv es que copia todos los stream tal cual vienen: todos los audios y todos los subtítulos. Para parar la reproducción pulsar la tecla q. Luego ir al terminal original y pulsar Ctrl+C.

Y ahora viene lo bueno. Una de las cosas que en primer lugar me fascinaron de Unix es el concepto de «todo es un archivo». Hasta el punto de que escribiendo algo en un determinado directorio:

cat «Imprime esto» > /dev/lpr

Sencillamente se imprimía.

Pues éste sencillo principio se manifiesta ahora. El concepto de «grabar» se convierte simplemente en copiar lo que está saliendo por dvr0 a algún otro sitio. Y éste es un proceso para el que no se necesita entorno gráfico y que no necesita un ordenador nada potente.

cat /dev/dvb/adapter0/dvr0 > grabacion.ts

Y ya está «grabando». El archivo se abre perfectamente con mplayer o con vlc y tiene disponibles todas las pistas de audio y todos los subtítulos. Como no hace ninguna transcodificación el archivo resultante es en MPEG-2 y audio MPEG-1. La calidad es como un DVD. Y necesitamos bastante espacio, porque una película puede ocupar perfectamente 4 o 5Gb, pero no hay ninguna pérdida de calidad.

Para el almacenamiento contamos con dos opciones. Podemos usar la misma SD donde está el sistema, pero en ese caso me iría a una tarjeta rápida (Clase 10) y no me bajaría de 16Gb. La otra opción es montar un pendrive externo. Pero si lo enchufais vereis que no funciona porque sencillamente el pequeño pi no puede mandarle corriente. La solución es enchufar un concentrador USB por el puerto libre que tenga su propio adaptador de corriente y ahí conectar el pendrive.

En mi caso he montado el almacenamiento en un directorio que luego comparto con Samba, así luego puedo recoger cómodamente el archivo y copiarlo a otro ordenador para verlo. O incluso si la red local es rápida verlo directamente sin copiarlo.

Los pasos siguientes son:

  1. Crear unos scripts (ya tengo unos esbozos con Ruby) capaces de recibir un canal, una duración y un nombre de archivo resultante y que se pongan a grabar.
  2. Automontar el pendrive (en caso de utilizarlo). Tendré que mirar cosas de udev y mount.
  3. Ser capaz de programar (supongo que un cron) que una grabación empiece y termine a unas determinadas horas haciendo uso de los scripts anteriores.
  4. Tener acceso remoto. He redirigido el puerto correspondiente en el router, pero he probado y no he tenido acceso. Quizá había cambiado la IP…quizá ONO me está diciendo que no quiere que acceda… seguiré probando.

Estos han sido los primeros pasos con el Raspberry Pi, seguiremos informando desde BricoPi…

Referencias:

  1. Hardware del RPi
  2. Con un pequeño pero, parece que el código en la GPU es un binario.
  3. Cargando la SD con una distro
  4. Me-TV para sintonización de DVB-T
  5. Grabar TDT-USB con tarjeta Zaapa
  6. Linux TV
  7. La Comunidad

Archivado en categoría(s) GNU/Linux, Software Libre, TDT

Enlace permanente


  • Jose dice:

    Hola! Yo tengo la raspberry desde hace un par de meses, aunque sólo hace unos días que la tengo conectada permanentemente, para bajar, y en el futuro procesar y subir, contenidos de/a internet.

    Para grabar la TDT uso también gnutv, y tengo un sencillo script en bash para la programación de las grabaciones, aunque no me he atrevido a hacerlo con la raspberry porque no tengo ningún hub alimentado, así que uso un barato MSI con atom de doble núcleo que consume lo mismo que un portátil. (Si te interesa dímelo y te lo mandaré).

    Sí que probé a reproducir un XviD (codificado con mencoder a partir de una grabación de gnutv) con el raspberry, pero la reproducción daba saltos, así que he abanonado la idea de usarlo como mediacenter.

  • Jose dice:

    Releyendo el comentario anterior, quiero dejar claro que lo que ofrezco es el script, y no el MSI… 😀 😀 😀

  • danielside dice:

    Buenas Jose, yo ya me había hecho ilusiones de que me ibas a mandar el cacharro 😉 jajaja. Pues sí que me interesa, yo quiero hacer exactamente lo mismo pero con ruby pero seguro que aprendo de lo que ya tienes hecho. ¿Me lo puedes enviar a la dirección que aparece en la parte de contacto?
    El Pi, por lo que se hasta ahora, reproducirá con muchos problemas cualquier archivo que no pueda reproducir por hardware. Y esos vienen siendo casi todos menos el MPEG-2, el VC-1 y creo que el H.264 (hablo de memoria en cuanto a este último).
    Pero para poder reproducir MPEG-2 y VC-1 hace falta una licencia adicional. Lo hicieron así para no encarecer el producto. La puedes adquirir aquí: http://www.raspberrypi.com/ y realmente funciona muy bien. Antes de ponerla el MPEG-2 iba de pena y después de ponerla va perfecto. Pero solo con funciona con omxplayer, no he conseguido que mplayer «reconozca» que puede decodificar MPEG-2 por hardware.
    ¡Saludos!

  • Borja dice:

    Buenas, necesito vuestra ayuda , tengo u raspberry pi con el sistema operativo Raspbian Wheezy pero no se como hacer para instalar u programa o un paquete en un lugar o carpeta determinado si me lo puedieseis decir os lo agradecería.
    Tambien me gustaría saber como hacer para que el SO ocupe toda la SD y no deje parte de esta sin asignar. Gracias !


  • Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.