miércoles, 14 de agosto de 2013

Reset automático de la Raspberry Pi

Existe una opción en la Raspberry Pi de utilizar el sistema de watchdog para reiniciarla automáticamente cuando esta queda en un estado congelado o colgado.

El chip SoC Broadcom BCM2835 de la Raspberry Pi dispone de un watchdog timer implementado por hardware por lo que la instalación es bien sencilla y muy útil para cuando tenemos la Raspberry Pi desatendida o en una localización remota y queremos que se reinicie de nuevo tras un bloqueo o cuelgue.

Pasos de instalación
Primero de todo debemos es carga el modulo en el kernel.
sudo modprobe bcm2708_wdog

A continuación, haremos que el module se cargue siempre,
sudo nano /etc/modules

y añadimos la siguiente línea al fichero:
bcm2708_wdog

El siguiente paso es instalar el demonio por software.
sudo apt-get install watchdog

La siguiente instrucción hará que se cargue siempre tras el arranque.
sudo update-rc.d watchdog defaults

Configuración del demonio de watchdog
El primer paso es abrir el fichero de configuración:
sudo nano /etc/watchdog.conf

Descomentar la línea watchdog_device eliminando el hash #, y lo mismo para la linea de max-load-1.

Iniciar el demonio de watchdog
La instrucción para iniciar el servicio es la siguiente:
sudo /etc/init.d/watchdog start

Y ya está. Recordad que el fichero de configuración /etc/watchdog.conf tiene varios parámetros para adecuarlo a  su uso.


domingo, 26 de mayo de 2013

Unboxing Mojo (placa de desarrollo FPGA)


La presente entrada es para mostraros mi última adquisición, una FPGA development board llamada Mojo, basada en el chip Spartan-6 de Xilinx.



Esta placa proveniente de la lanzadera de negocios y productos Kickstarter sale a un precio de 75 USD, que para una placa para diseñar tu propio hardware esta muy bien de precio.

Características
  • Spartan 6 XC6SLX9 FPGA - 9.152 celdas lógicas
  • 84 pines IO digitales de propósito general (GPIO 3.3V)
  • 8 entradas analógicas
  • 8 LEDS controlados por el usuario
  • Conexión USB para configurar la FPGA y enviar recibir datos de nuestro diseño
  • Regulación de voltaje pensión (4,5 V - Entrada de 12 V, 3,3 V y 1,2 V salidas)
  • Reloj de 50 MHz (se puede multiplicar internamente por el FPGA)
  • Botón de reinicio para ser usado en nuestros diseños

Unboxing
El paquete recibido por el fabricante.

Desempaquetando la placa.

Vista frontal de la placa.

Vista inferior para dejar sin dudar a dudas su nombre.

Uso
De momento estoy configurando la aplicación ISE Design Suite de Xilinx como primer punto de partida para empezar a diseñar el hardware sobre la placa de desarrollo FPGA, y luego a refrescar los conocimientos de VHDL que están casi olvidados desde la época universitaria.

Más información en embeddedmicro.com



lunes, 20 de mayo de 2013

Uso de los puertos GPIO en la Raspberry Pi con una pantalla LCD

En una entrada anterior en el blog vimos como usar los pines GPIO para encender/apagar la Raspberry Pi utilizando una miniplaca externa. Ahora, vamos a ver otro ejemplo práctico, siendo en esta caso conectar una pantalla LCD a fin de informar lo que queramos.

Lo primero, veamos diferentes placas/breadboards para el prototipado, que podemos adquirir por ejemplo en Adafruit.


Detalle del adaptador a breadboards/protoboards

Una placa para circuito definitivo (mediana)
 Otra placa
 Resultado tras soldar


Ejemplo del circuito
El siguiente esquema (realizado con fritzing 0.7.12) muestra el circuito que he creado para conectar de manera rápida y sencilla una pantalla de LCD a la Raspberry Pi.



Resultado final


Y otro ejemplo dinámico...

Espero que veáis lo sencillo y versátil que es la Raspberry Pi. y para lo que queráis saber el como se comunica, en otra entrada hablaremos de como usar las librerías para escribir en la pantalla LCD; dando una pista: una simple y sencilla librería Python, aunque existen múltiples alternativas (ver enlace).


sábado, 11 de mayo de 2013

Interruptor de encendido/apagado para la Raspberry Pi

De todos es conocido que a fin de reducir costes en la placa Raspberry Pi no se incluyen por defecto el botón de encendido/apagado tan común en otros sistemas. Pues no tiene por que ser así, y como ejemplo una pequeña placa presentada por MausBerry Circuits que permite esta funcionalidad.

La miniplaca que podéis ver en la imagen adjunta dispone de las siguientes funcionalidades:


  • Botón de encendido y apagado (On / Off Power switch)
  • Botón de reset.
  • 2 conectores de comunicación vía GPIO con la Raspberry Pi

De esta manera, esta placa puede comunicarse con la Raspberry Pi y hacer un cierre correcto del sistema y acto seguido la placa misma desconecta la alimentación de la Raspberry (quedando todos los LEDs apagados). Al conmutar a la posición On el sistema vuelve a alimentar la Raspberry haciendo que se inicie correctamente.

Configuración

Primero de todo es necesario identificar dos puertos GPIO que no utilicemos, en mi caso he utilizado el GPIO23 y GPIO24.

Para que los dos sistemas se comuniquen, es necesario la instalación de un pequeño programa en la Raspberry Pi, tal que se a capaz de interactuar y reconocer la información que llegan por los puertos GPIO.

Primero, descargamos el programa de configuración:
wget http://www.mausberrycircuits.com/setup.sh

y lo instalamos:
sudo bash setup.sh

Ya podemos reiniciar el sistema.
sudo shutdown -r now

Si quisieramos cambiar los pines GPIO de comunicación con el Interruptor (Switch), debemos de editar el fichero generado en la instalación.

sudo nano /etc/switch.sh

concretamente, las lineas GPIOpin1=23 y GPIOpin2=24 con los pines que deseemos descritos en la imagen de distribución de pines de la Raspberry Pi.

Resultado final

En la siguiente imagen podemos apreciar el conexionado de la alimentación y de los dos cables de control entre ambas placas.


y en detalle el dispositivo interruptor.



Ahora ya disponemos de un interruptor en condiciones (por 15 EUR), que cierra el sistema de manera correcta, y que nos enciende la Raspberry Pi sin tener que ir enchufando/desenchufando los cables de la alimentación.

Por último, un vídeo de su funcionamiento.





domingo, 17 de febrero de 2013

EPG en PVR para Raspberry Pi

En una entrada previa vimos como instalar un PVR en la Raspberry Pi, pero encontrábamos a faltar un servicio más automatizado, en vez de nosotros programar manualmente horas de inicio, fin y cadena de emisión, podríamos obtenerlo en un servicio EPG y sencillamente hacer un clic a lo que queramos grabar.


En fuentes de datos como la TDT (DVB-T, DVB-T2) o Satélite (DVB-S) es la propia emisora quien envía la programación, pero si nos interesa a mas días vista o por ejemplo en IPTV (Imagenio) necesitamos de un servicio adicional que nos informe de la programación, es lo que se llama EPG (Guia Electrónica de Programación). Para tal proposito existe un estándar llamado XMLTV que proporciona dicha información, adaptada a los canales del país que uno desee. 

Veamos en esta entrada del blog como configurarlo y usarlo en la aplicación TVheadend vista anteriormente como sistema de PVR para la Raspberry Pi.

Prerequisitos
Es necesario disponer de una versión de java instalada en la Raspberry Pi, p.ej. OpenJDK, asi que comprobamos que tenemos una versión de java:
java -version

Descargamos el siguiente programa XMLTV grabber:
wget http://linux.mjnet.eu/wp-content/plugins/download-monitor/download.php?id=4 -O tv_grabber_linux.mjnet_.eu_.2012.09.13.zip

Una vez descargado lo descomprimimos con lo que obtenemos el .jar de la aplicación:
unzip tv_grabber_linux.mjnet_.eu_.2012.09.13.zip

En este momento tendremos las librerías java y ejecutable necesario en el fichero tv_grabber_linux.mjnet.eu.2012.09.13.jar

Instalación
Crearemos una carpeta en el directorio de usuario (en nuestro caso en el usuario pi).
mkdir /home/pi/xmltv

Copiaremos el fichero de la aplicación,
mv tv_grabber_linux.mjnet.eu.2012.09.13.jar /home/pi/xmltv/

Creamos el ejecutable,
nano /home/pi/xmltv/tv_grab_es

y añadimos el siguiente contenido:
#!/bin/bash
java -Xmx512M -jar /home/pi/xmltv/tv_grabber_linux.mjnet.eu.2012.09.13.jar $1 $2 $3 $4 $5 $6

Lo convertimos a ejecutable,
chmod +x /home/pi/xmltv/tv_grab_es

Por último, creamos los enlaces simbólicos
sudo ln -s /home/pi/xmltv/tv_grab_es /usr/bin/tv_grab_es

Configuración del grabber
La primera vez, deberemos de ejecutarlo desde la línea de comando para comprobar su funcionamiento.
/home/pi/xmltv/tv_grab_es

Esto produce la salida en pantalla de un xml. Dejamos que finalice y debería de habernos creado un fichero llamado xmltv.properties en la carpeta /home/pi/xmltv/

Editamos el fichero de propiedades xmltv para su configuración:
nano /home/pi/xmltv/xmltv.properties
y lo adaptamos a la configuración que queramos (el fichero es autoexplicativo).

Adjunto captura para la configuración para Imagenio en España tal como lo tengo yo en mi Raspberry Pi.

Configuración de TVHeadEnd
Ahora que tenemos un grabber, es cuestión de configurar en TVHeadEnd para que lo utilice. Lo primero es seleccionar el grabber en la pestaña de EPG Grabber dentro de Configuration como podemos apreciar en la imagen siguiente:

 Seleccionamos para cada canal que tengamos configurado el correspondiente EPG

Ahora, en la pestaña principal Electronic Program Guide ya aparece la programación actual y futura de nuestros canales.

Programación
En la pestaña Electronic Program Guide podremos filtrar por varios criterios, búsqueda por nombre, de canal, por tag de canal, etc.

Ahora, haciendo clic sobre un programa, nos aparece la información detallada, con la opción de programar directamente ("Record program"), por lo que ya tenemos un PVR + EPG en plenas condiciones.

Entre otras posibilidades se puede programar todos las emisiones de episodios del mismo programa, con la opción ("Aurorec").

Conclusión
Ya tenemos rápidamente la programación de grabaciones de canales desde el EPG descrito en esta entrada e integrado en TVHeadEnd.

En esta entrada del blog se ha utilizado el grabber de linux.mjnet.eu, pero existen muchos más y algunos incluidos en el propio repositorio de raspbian/debian.
Enlaces relacionados:


sábado, 26 de enero de 2013

PVR / DVR en Raspberry Pi

En esta entrada se explica como montar un PVR (Personal Video Recorder) / DVR (Digital Video Recorder) bajo Linux y accesible vía web, en este caso se instalará sobre la Raspberry Pi. El objetivo es que podamos grabar las señales provenientes de un USB de TDT/Satelite o bien de un operador de TV por cable (como Imagenio).

Para esto, utilizaremos el proyecto Tvheadend (link) el cual consiste en un Servidor de Streaming de TV que soporta como fuentes de entrada DVB-S, DVB-S2, DVB-C, DVB-T, ATSC, IPTV y V4L.

Instalación
En mi caso la instalación se realiza sobre una Raspberry Pi modelo B de 256MB con S.O. Raspbian. En dicha distribución, no existe el paquete tvheadend para plataforma armhf de la Raspberry Pi, así que descargaremos los fuentes y lo compilaremos.

Lo primero de todo es disponer de los paquetes previos necesarios para la instalación por lo que ejecutaremos las siguientes sentencias:
sudo aptitude update
sudo aptitude install build-essential git pkg-config unzip wget

Y ahora descargamos los fuentes y los compilamos:
cd ~
git clone https://github.com/tvheadend/tvheadend
cd tvheadend
./configure
make

Una vez realizado ya tenemos el ejecutable en una carpeta local la cual podemos hacer las pruebas oportunas. Para ejecutar la aplicación, tan sencillo como la sentencia siguiente:

./tvheadend/build.linux/tvheadend -C

De esta manera, empezará Tvheadend con usuario y contraseña en blanco.

Observaciones
  1. Destacar que configure dispone del parámetro --help el cual nos dará varias opciones de compilación para incluir más o menos librerías
  2. La instalación en el carpeta definitiva (opcional) se realiza mediante la instrucción:
sudo make install


Acceso a la aplicación
Para acceder a la aplicación se emplea cualquier navegador web, apuntando a la IP de la Raspberry Pi al puerto 9981.

http://raspi:9981


Configuración y pantallas
Las siguientes líneas de este artículo describen mi configuración real para proveer de un PVR en la Raspberry Pi a fin de poder grabar los canales IPTV contratados.

La siguiente imagen muestra la pantalla de configuración de los canales IP, en este caso se han definido unos cuantos canales.

Se configura los criterios de grabación, en este caso, una carpeta determinada que tiene un soft-link a un HD externo, así como otros parámetros (grabación TS, incluir la fecha, el nombre del canal, etc.)

La siguiente pantalla tiene la parrilla de canales que utilizaré en el PVR
Destacar que la opción "Play" de la pantalla anterior nos permite reproducir el canal incrustado en el navegador, o bien reproducirlo con VLC (por ejemplo), pero este no es el objetivo de esta entrada en el blog.

Y por último, la pantalla del PVR con las programaciones planificadas...

El programa grabado se puede reproducir desde la misma aplicación "Pestaña Finished Recordings" o bien coger el fichero grabado y reproducirlo con cualquier programa de video.

Conclusión
La ventaja de utilizar el programa TVheadend es que podemos aparte de tener EPG y PVR en la propia máquina (en este caso en una Raspberry Pi de 256MB) la de servir y emitir las señales de televisión a otros dispositivos, como un PC con XBMC o a una Tablet Android con el apk TVHGuide (TVHGuide).

Las configuraciones y usos son múltiples, aquí solo os he enseñado como tener un grabador de canales digitales de Imagenio para uso propio, montando nuestro propio PVR sobre la versátil y económica Raspberry Pi.


La aplicación tiene muchísimas opciones que os agradezco que probéis ya que es sencillamente genial.


Enlaces relacionados: