lunes, 4 de febrero de 2013

Encencer un led con la Raspberry Pi por wifi

Primer cacharreo, casi equivalente a un "hola mundo". Encender un led conectado a uno de los pines GPIO (entradas y salidas de propósito general).
Tengo un poco abandonada la programación y antes de hacer algo en python o en c necesitaría repasar, así que la mejor opción ha sido utilizar comandos de bash, algo así como el intérprete de ordenes que había en ms-dos (seguro que mas de uno se acuerda).
¿Y como es posible encender y apagar un led escribiendo ordenes en la consola? Pues gracias a un detalle muy curioso que tiene linux y los sistemas unix en general: En la estructura de directorios de Linux no solo está reflejado el contenido de los discos o las tarjetas de memoria, desde ahí se puede acceder a todo. Hay una carpeta con varios archivos para representar cada uno de los componentes del sistema. Concrétamente hay una carpeta con archivos que representan exactamente la salida del chip que está soldada al pin al que he conectado el led. Basta con modificar esos archivos de la forma adecuada para cambiar el estado de esa salida entre 1 y 0 y encender y apagar con ello el led.

La forma de saber cual pin corresponde a tal salida, que directorio es su equivalente en el sistema de archivos y cuales son las ordenes necesarias para modificar su estado está muy bien explicada aquí. Nunca hay que olvidar que estamos accediendo eléctricamente a uno de los pines del chip directamente sin ningún circuito de protección de por medio. Es importante limitar la corriente que circula por el led usando una resistencia de valor adecuado. 330Ω está bien, incluso podría ser un poco mas pequeña (270Ω) porque los "1" que dan estos puertos a la salida son en realidad 3,3V en lugar de 5V.

Básicamente he creado un par de scripts (algo equivalente a lo que eran los archivos "bat" en ms-dos) "ledon.sh" y "ledoff.sh" que hacen lo que su nombre indica.

Pero como es un coñazo tener dos teclados, dos ratones y andar compartiendo monitor a ratos entre el ordenador y la RasPi he optado por acceder remotamente  mediante ssh que viene a ser lo mismo que la consola de ordenes pero usada desde otro ordenador (o cosa) y protegida con contraseña. He usado la aplicación Connectbot para android, que es perfecta para este caso.



Con esto ya se puede encender y apagar un led por wifi de una forma relativamente sencilla. Para poder hacer lo mismo desde internet en general bastaría con utlizar algún servicio "dyndns" si nuestra ip es dinámica para poder conocer la dirección de la RasPi. No estaría de más cambiar la contraseña por defecto de nuestro usuario en Raspbian. Tampoco debería ser muy complicado conseguir que esas órdenes se ejecutaran al pulsar un par de botones en la pantalla del móvil, y en lugar de un led podría haber un relé que abriera y cerrara un circuito de 220v al que estuviera enchufada, por ejemplo, una batidora o cualquier otra cosa cuanto mas bruta mejor.

Seguiré estudiando y aprendiendo cosas sobre linux, la domótica hardcore está cada día mas cerca.

No hay comentarios: