martes, 24 de febrero de 2015

Conexión a Raspberry Pi con un móvil por USB

Pretendo conectar a la Raspberry Pi con un móvil Android por cable USB. Y no será necesario estar conectado a la red. Sería el caso de tener que utilizar la Raspberry Pi en un lugar donde no tenemos conexión de red.



Requisitos
  • Cable USB de un cargador, como el de la imagen. Con el conector apropiado.
  • Software para instalar en el móvil Android: 
  • Existe un requisito más, se trata de añadir una línea al fichero /etc/network/interfaces. Para ello, necesitamos conectarnos a la Raspberry estando esta conectada a la red, antes de moverla de sitio. 
    • Iniciar sesión en la Raspberry Pi
    • Editar el fichero /etc/network/interfaces
    • Añadir la línea: iface usb0 inet dhcp, con esto conseguiremos que al conectar el móvil, obtenga una dirección IP del móvil,
    • Grabar el fichero y salir.
Procedimiento
  • El siguiente paso sería instalar los dos programas en el móvil Android: JuiceSSH y Network Scanner.
  • Ahora ya podemos trasladar la Raspberry Pi a la ubicación que nos interese.
  • Encendemos la Raspberry.
  • En el móvil, activamos el ‘Tethering USB': Configuración - Ajustes - Más - Vinculación y zona Wi-Fi portátil. Depende un poco de la versión de Android instalada.
Sin cable conectado
  • Conectamos el cable USB y unimos la Raspberry con el móvil.
Cable USB conectado
  • Al activarse, marcamos la opción “Vinculación de USB”.
Casilla marcada
  • Salimos de aquí.Vamos a buscar qué IP tiene la Raspberry. Porque al conectar el móvil con el 'Tethering USB' activado, este le habrá asignado una dirección IP de la red 192.168.42.0 a la Raspberry Pi, pero no sabemos cuál. Tardará unos segundos.
  • Abrir el programa 'Network Scanner'. El programa tiene mucha publicidad, pero es gratis.
Configuración
  • Para decirle el rango de direcciones IPs donde buscar la asignada a la Raspberry, ir al botón de Configuración - Option - Host scan option - End of IP y escribir la dirección 192.168.42.254, luego en 'Start IP' escribir 192.168.42.1. Aceptar y cerrar las opciones.
  • Ahora pulsar el botón escanear (la lupa) y después de unos segundos, nos aparecerán dos direcciones IP.
  • Tenemos dos direcciones IP, una es la del propio movil (192.168.42.129) y la otra debe ser de  la Raspberry Pi (192.168.42.144), pulsando sobre la segunda y rastreando puertos, nos dice que tiene el puerto 22 (ssh) abierto y que se trata de una Debian. Ya la hemos encontrado.
  • Cerramos el 'Network Scanner' y abrimos el 'JuiceSSH' para conectarnos a la Raspberry Pi con la IP que hemos descubierto.
  • El usuario y contraseña, será el tenga la Raspberry Pi y ya tenemos la sesión iniciada desde el móvil Android con un cable USB.

lunes, 23 de febrero de 2015

Controlar TV conectado por HDMI CEC

El tema a tratar es cómo controlar el TV conectado por HDMI, desde una Raspberry Pi.

Muchos de los televisores actuales, utilizan el protocolo CEC para comunicarse con otros dispositivos vía HDMI.

HDMI Consumer Electronics Control
Consiste en controlar diferentes dispositivos con el mismo mando del TV, conectados por HDMI.

Las marcas de TV tienen un nombre diferente para referirse al "HDMI CEC":

- Anynet : Samsung
- Aquos Link : Sharp
- Bravia Sync o Bravia Link : Sony
- Kuro Link : Pioneer
- CE-Link o Regza Link : Toshiba
- RIHD : Onkyo
- Simplink : LG
- HDAVI, EZ-Sync, Viera Link : Panasonic
- EasyLink : Philips
- NetCommand : Mitsubishi

El “HDMI CEC” está presente desde la versión 1.0 del HDMI, aunque sólo se está utilizando a partir de la 1.3.

El control del “HDMI CEC” es bidireccional, por lo que se supone que desde otro dispositivo se puede ‘controlar’ la TV.

Depende de lo que haya implementado cada marca, el “control” permitirá hacer unas cosas u otras.

Lo primero que hay que hacer es activar el “HDMI CEC” en el televisor. Cada marca tiene su forma de hacerlo, consultad el manual de vuestro televisor.

Por ejemplo, para un televisor LG:


Existen unas librerías para el control "HDMI CEC". Se trata de "libCEC" y se instalan en la Raspberry Pi.

Librerías libCEC

Para descargar e instalar las librerías "libCEC" en la Raspberry, ejecutar la siguiente secuencia de comandos:

$ sudo apt-get -y install udev libudev-dev autoconf automake libtool gcc liblockdev1 pkg-config liblockdev1-dev
$ git clone https://github.com/Pulse-Eight/libcec
$ cd libcec
$ ./bootstrap
$ ./configure --with-rpi-include-path=/opt/vc/include --with-rpi-lib-path=/opt/vc/lib --enable-rpi
$ make
$ sudo make install
$ sudo ldconfig

Comandos a enviar al TV
Chequear que el cliente encuentra el dispositivo:

$ cec-client –l
Found devices: 1
device: 1
com port: RPI
vendor id: 2708
product id: 1001
firmware version: 1
type: Raspberry Pi
Comando para encender el TV desde la Raspberry Pi, por HDMI:
$ echo “on 0” | cec-client –s
Comando para apagar el TV desde la Raspberry Pi, por HDMI:
$ echo “standby 0” | cec-client –s 
Algunos scripts

/home/pi/bin/tv-on
#!/bin/bash
# Encender TV
echo “on 0” | cec-client –d 1 –s 
/home/pi/bin/tv-off
#!/bin/bash
# Apagar TV
echo “standy 0” | cec-client –d 1 –s
Dispositivos compatibles
Según PULSE-EIGHT, desarrollador de la librería, lo que algunas marcas implementan en sus dispositivos: (pulsa sobre la imagen para ir a la página original, por si se ha actualizado)



Hay que resaltar que para los televisores LG, el ‘Standby’ o apagado, no está soportado. Yo lo he probado con mis dos televisores LG y es cierto, cuando lanzo el script de apagado no funciona, el de encendido sí funciona.

Gracias al “HDMI CEC” se puede utilizar el mando del televisor para manejar el XBMC/Kodi de una Raspberry Pi conectada por HDMI. La versión de XBMC debe ser superior a la v11.

Enlaces de interés
High-Definition Multimedia Interface.
Pulse-Eight libcec.
LG: Simplink.
SAMSUNG: HDMI Anynet+.
SONY: ‘Bravia Sync’ con ‘Control por HDMI’.