Raspberry Pi – Introducción

Estos días que andamos testeando distintos ThinClient han pasado por mis manos una Raspberry Pi, que no es un ThinClient, pero obviamente se puede utilizar como ello, quería escribir este artículo para acercar este dispositivo a todos aquellos que no lo conozcan o hayan tenido la suerte de poder probarlo. La RPi (modelo B) es un pequeño ordenador (CPU ARM de 700Mhz y 512Mb RAM) con 2 salidas USB, 1 RJ45, 1 HDMI, 1 RCA, conector GPIO, espacio para 1 SD CARD y que alimentaremos con un MicroUSB a 5V. Podremos hacernos con una Raspberry Pi por unos 30€. ¿Barato? No! Lo siguiente!

 

Definida muy brevemente lo que es una RPi, unicamente nos quedará pensar para qué la necesitamos, ya que su pequeño tamaño (de un paquete de tabaco), su escasa alimentación y su potencial, nos permitirá liberar la mente y pensar distintas utilidades. Como equipo ThinClient (y arrancar aplicaciones de Citrix XenApp, escritorios con VMware View/XenDesktop, RDP…), equipo multimedia, equipo de video vigilancia, equipo móvil (con una bateria de 10.000 mAh tendremos una autonomía de 12h aprox. O ponerle un USB nano Wifi para tener conectividad…), domotica… La fundación que la ha creado, tiene como objetivo el acercar a todos los niños y escuelas la posibilidad de tener un ordenador. Uno de los proyectos que más están llamando la atención es la posibilidad de traducir de forma simultánea (con subtitulos en unas gafas) la conversación entre dos personas de distintos paises, mejor verlo que explicarlo: http://www.raspberrypi.org/archives/1689.

Bueno, el primer paso será descargar el S.O. que querramos en nuestra RPi, para ello tendremos la web de imágenes oficiales: http://www.raspberrypi.org/downloads. Podremos utilizar imágenes oficiales o personalizadas por los usuarios de la comunidad, en este primer ejemplo bajaremos una Raspbian “wheezy”, que es una distro optimizada basada en Debian.

Para meter la imagen en la tarjeta SD Card, lo haremos con la utilidad Win32DiskImager en Windows o en Linux o Mac mediante:

– Meter la SD Card en nuestros PC’s y ver con ‘mount’ cual es la SD card
– Desmontar la SD card con: diskutil umount /dev/disk2s1
– Volcar la imagen a la SD Card: sudo dd if=2012-10-28-wheezy-raspbian.img of=/dev/disk2s1 bs=1
– Expulsarla con: diskutil eject /dev/disk2s1

La introduciremos en nuestra Raspberry y la encendemos, nos preguntará unos parámetros básicos como si queremos arrancar X automáticamente, cambiar la contraseña del usuario ‘pi’, extender la partición a toda la SD, idioma, rangos horarios, si queremos SSHd habilitado por defecto…

Una vez arrancada será aconsejable actualizarla con: ‘apt-get update’ & ‘apt-get upgrade’.

Si queremos practicar antes de tener una Raspberry Pi o para luego volcarla una imagen de disco personalizada, podremos utilizar el emulador QEMU (o Q en Mac OS).

Para una configuración avanzada de la RPi, podremos editar ‘/boot/config.txt’ con los parámetros que nos interensen de http://elinux.org/RPi_config.txt.

 

Modificando el logo de inicio,

Si queremos personalizar el rápido inicio de nuestra RPi de una forma corporativa con el logo de nuestra organización podremos instalar el visor con ‘apt-get install fbi’, dejaremos la imagen en ‘/etc/splash.png’ y crearemos el script ‘/etc/init.d/asplashscreen’ con:

--------------------------------------------
#! /bin/sh
### BEGIN INIT INFO
# Provides:          asplashscreen
# Required-Start:
# Required-Stop:
# Should-Start:      
# Default-Start:     S
# Default-Stop:
# Short-Description: Show custom splashscreen
# Description:       Show custom splashscreen
### END INIT INFO

do_start () {

    /usr/bin/fbi -T 1 -noverbose -a /etc/splash.png    
    exit 0
}

case "$1" in
  start|"")
    do_start
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  stop)
    # No-op
    ;;
  status)
    exit 0
    ;;
  *)
    echo "Usage: asplashscreen [start|stop]" >&2
    exit 3
    ;;
esac

:
--------------------------------------------

Lo haremos ejecutable con ‘chmod a+x /etc/init.d/asplashscreen’ e indicamos que sea un demonio que arranque automáticamente ‘insserv /etc/init.d/asplashscreen’. Reiniciamos y lo comprobamos! Por cierto, la RPi no viene por defecto con una carcasa, por lo que si buscamos bien, podremos adquirirlas directamente con una caja también corporativa con el logo impreso. Un producto para conectar a cualquier red y dar servicio a nuestros usuarios, accediendo de forma segura a su organización!

 

Como visor de videos o equipo multimedia,

Sobre la distribución Wheezy, directamente podremos utilizar el visor de videos Omxplayer ejecutando: ‘omxplayer -r -o hmdi PATH_FICHERO’ para abrir un video y sacarlo por el HDMI.

Si queremos darle doble click a un video y que se nos reproduzca automáticamente, valdrá con crear el fichero ‘/usr/share/applications/omxplayer.desktop’ con el contenido:

--------------------------------------------
[Desktop Entry]
Type=Application
Name=OMXPlayer
Categories=AudioVideo;Player;
Exec=lxterminal --command "omxplayer -o hdmi %f"
Terminal=false
Icon=/usr/share/icons/nuoveXT2/96x96/categories/applications-multimedia.png
--------------------------------------------

Si unicamente lo queremos como equipo multimedia lo ideal será meter una distribución totalmente preparada con XBMC como pueden ser XBian o RaspBMC, por citar dos de las mejores. La prueba que verificó que la Raspberry Pi es totalmente válida para esto, fué el reproducir perfectamente una película con formato matroska 1080p!!!

 

Montandole un servidor VNC,

Por si alguien necesita un acceso remoto (que no sea con ssh) bastará con instalarle TightVNC con ‘apt-get install tightvncserver’. Configuramos el servicio indicandole la contraseña para el acceso con: ‘vncserver’. Creamos una sesión con: ‘vncserver :1 -geometry 1280×800 -depth 24’.

Si queremos que arranque TightVNC al inicio con la Raspberry Pi, añadimos al final del todo (pero antes del exit!) en ‘/etc/rc.local’:
su -c “vncserver :1 -geometry 1280×800 -depth 24” pi

 

Uso de micrófono,
Una vez conectado uno (o el propio de una WebCam), cargaremos el módulo con: ‘modprobe snd_bcm2835’
Y podremos hacer las grabaciones con:
– a WAV: ‘arecord -D plughw:1,0 test.wav’ (se para después con CTR+C)
– a MP3: Instalaremos previamente LAME (‘apt-get install lame’) y ejecutar después: ‘arecord -f cd -t raw | lame -x -r – out.mp3’

Para reproducir el audio: ‘aplay test.wav’
Para jugar con el micro y darle más/menos audio utilizaremos: ‘alsamixer’ y luego grabar los cambios con: ‘alsactl store’.
Para hacer streaming (o sacar el audio) del Raspberry Pi a otro equipo en remoto, lo haremos con: ‘arecord -D plughw:1,0 -f dat | ssh -C USUARIO@EQUIPO_REMOTO aplay -f dar’

 

Uso de Webcam,

Para mí una de las cosas a la que le voy a dar más utilidad, desde poner un detector de movimiento en la puerta de casa y que me mande un correo con las imágenes detectadas, o al ir grabando los recorridos con mi coche por todos los motivos que se nos ocurran…

Lo primero, una aplicación sencilla para sacar fotos al de X segundos (-l), la instalamos con ‘apt-get install fswebcam’. Comando:
‘fswebcam -r 640×480 -S 15 –flip h –jpeg 95 –shadow –title “Tundra IT” –subtitle “Blog bujarra.com” –info “Monitor: Active @ 1 fpm” –save home.jpg -q -l 60’.

Para grabar un video directamente con: ‘ffmpeg -f video4linux2 -r 25 -s 640×480 -i /dev/video0 /tmp/video.avi’

Uso de ‘motion’, esta herramienta nos permitirá utilizar nuestra RPi como sistema de videovigilancia, desde grabar video o imágenes, a poder conectarnos a una URL y poder visualizar lo que está sucediendo… Lo primero será instalarlo con ‘apt-get install motion’. Editaremos ‘/etc/motion/motion.conf’ todos los parámetros que necesitemos, para mí los que más me han encajado:

– Habilitar conexión remota: ‘webcam_localhost off’
– Cambiar el destino de las imágenes con: ‘target_dir /home/pi/Desktop/motion’
– Cambiar el puerto al que nos conectaremos desde el navegador: ‘webcam_port 8081’
– Asignar un usuario para autenticarnos en la web: ‘control_authentication usuario:contraseña’
– Establecer la calidad de imágen: ‘quality 60’
– Establecer el correcto tamaño de captura de nuestras imágenes con: ‘width’ & ‘height’
– Para escoger el codec con el que comprimirá el video: ‘ffmpeg_video_codec mpeg4’
– Subir de 1500 a lo que nos encaje para que detecte más pídeles movidos con: ‘threshold 4000’
– %f será el nombre del fichero (con su path), por si lo queremos utilizar como variable.
– Con ‘locate on’ nos dibujará un rectángulo del objeto que detectó el movimiento.
– Con ‘text_right’ o ‘text_left’ pondremos los textos que nos interesen en cada frame.
– ‘output_normal off’ para cuando se detecte un movimiento que no nos guarde la imagen jpg.
– ‘ffmpeg_cap_new off’ para que no nos guarde vídeos con los movimientos. O ‘on’ para que use la librería ffmpeg, se deberá establecer un formato de video.

Además, podremos instalar sendEmail para mandar correos por línea de comando: ‘apt-get install sendemail’.
Comando para enviar de correo con la imagen adjunta: ‘sendemail -f PERSONA_ORIGEN@DOMINIO_ORIGEN -t PERSONA_DESTINO@DOMINIO_DESTINO -s SERVIDOR_SMTP -m TEXTO_CUERPO -u TEXTO_ASUNTO -xu USUARIO_AUTENTICACION_SMTP -xp CONTRASEÑA_AUTENTICACION_SMTP -o tls=auto -a %f

O unicamente subirla a un FTP con: ‘wput ftp://USUARIO:CONTRASEÑA@DOMINIO.COM %f’

Podremos configurar por ejemplo en los siguientes eventos el introducir dichos comandos para automatizar dichas alertas:
on_event_start
on_picture_save

Lo pondremos como demonio con el parámetro ‘daemon on’, si queremos ejecutarlo posteriormente sin forzar el modo demonio lo ejecutaremos como ‘motion -n’. Y en ‘/etc/default/motion’ podremos indicar que arranque automáticamente motion con el sistema editando: ‘start_motion_daemon=yes’. La primera vez deberemos crear el directorio ‘/var/run/motion’ para que no de errores al arrancar el demonio.

A mí esto último me ha estado dando problemas y me bloqueaba la cámara al de unos cuantos frames sacados, así que sin más sentido he tenido que crearme un proceso que lo arranque sin depender de lo que nos permite motion. Este sería mi ‘/etc/init.d/hhh-motion’

--------------------------------------------
#!/bin/bash
### BEGIN INIT INFO
# Provides:          blabla
# Required-Start:    $syslog
# Required-Stop:     $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: blabla
# Description:
#
### END INIT INFO

#! /bin/sh
# /etc/init.d/hhh-motion
#

# Some things that run always
# touch /var/lock/blah

# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting script hhh-motion"
mkdir /var/run/motion
motion
;;
stop)
echo "Stopping script hhh-motion"
echo "start_motion_daemon=no" > /etc/default/motion
/etc/init.d/motion stop
;;
*)
echo "Usage: /etc/init.d/hhh-motion {start|stop}"
exit 1
;;
esac

exit 0
--------------------------------------------

Lo creamos como servicio con ‘update-rc.d hhh-motion defaults’ y reiniciamos para probar!

 

Uso de Citrix,

Si estamos utilizando la imagen base Debian Wheezy (en el modelo B) no podremos instalar el cliente de Citrix, ya que Citrix genera clientes para linux x86, x64 y ARM (el ARM no nos vale ya que está basado en ARMEL y no en armhf, que es la arquitectura de la imagen base que trae). Así que sin indagar más y esperando un próximo documento os remito al utilizar una imagen llamada: ‘RPiTC – Raspberry Pi Thin Client Project‘ que es una distribución basada en Thin Client con las siguientes utilidades:

– VMWare View Client 1.6.0
– Citrix Receiver para Linux 12.2.3
– Quest vWorkspaces 7.0b.
– RDesktop 1.7.1.
– SPICE Client (virt-viewer 0.5.3).
– IceWeasel 10.x con extension de Citrix.
– …

Donde podremos personalizar fácilmente la apertura de cualquiera de ellas con los parámetros que necesitemos!! Bueno, con esto finalizamos este documento, donde podremos apreciar bastantes características y podremos dar rienda suelta a nuestra imaginación con nuestras queridas RPi!

Héctor Herrero

Autor del blog Bujarra.com
Cualquier necesidad que tengas, no dudes en contactar conmigo, os intentare ayudar siempre que pueda, compartir es vivir 😉 . Disfrutar de los documentos!!!

Últimos Posts de: Héctor Herrero (ver todos)