jueves, 16 de enero de 2014


Domotica con Arduino Yun

Esta es una prueba de la potencia de la nueva placa arduino-Yun, la cual la utilizamos como control de iluminación. Configuramos un servidor web en arduino-Yun con soporte de MySQL y PHP. Utilizando la librería <Process.h>, el estado de la luz se controla con las consultas de MySQL e incluso cuando se pulsa un botón se activa una consulta MySQL, esta es la ventaja del puente de Arduino-Yun, se puede interactuar entre el ATmega 32U4 (lado Arduino) y el Linino AR9331 (lado Linux). A continuación se presentan algunas imágenes de la instalación y también un vídeo de demostración.


vídeo demostrativo:


 Antes de proceder con la instalación, hay que mencionar en este momento, que en este proyecto, no se trata el aspecto de control de seguridad y acceso.
Use it at your own risk. Úselo bajo su propia responsabilidad. Si va a acceder desde internet o acceso público está expuesto y vulnerable a los ataques.
Configuración del lado Linino (Linux) de Arduino:
Descargar todos los archivos necesarios desde el siguiente enlace:
https://drive.google.com/file/d/0B-CQXux6nrNkbXJ4OVRfZFo1SGs/edit?usp=sharing
Instalamos LAMP más información en el siguiente sitio web:

Instalación y configuración del servidor web 
lº Paso entramos en Linino por SSH.
Putty
usuario: root contraseña la que tengamos por defecto en arduino-Yun. 
Debemos tener conectado Linino a internet, para que pueda descargar los paquetes por cable o Wifi.
Ya hay un servidor Web en ejecución en arduino-YUN para la interfaz Web de usuario.
Instalamos otro para ser independiente de las paginas de configuración.
uHTTPd 
→ http.uhttpd es un servidor web bajo BSD-licencia. Luci WebUI ya utiliza este servidor. Si uHTTPd no está instalado puede instalarlo con:

>opkg update
>opkg install uhttpd

La imagen predeterminada ejecuta un WebUI para OpenWrt en el puerto 80 (HTTP) y el puerto 443 (HTTPS).
Para  habilitar nuestro servidor web PHP5, iniciamos uHTTPd en una nueva instancia con un puerto diferente.
Aquí utilizamos el puerto 81.

>uci set uhttpd.llmp=uhttpd
>uci set uhttpd.llmp.listen_http=81
>uci set uhttpd.llmp.home=/mnt/sda1/www
>uci commit uhttpd

Creamos un directorio para el contenido del servidor web dentro de la SD


>mkdir -p $(uci get uhttpd.llmp.home)

Si uHTTPd ya estaba instalado y funcionando reiniciamos con

>/etc/init.d/uhttpd restart

Si hemos instalado uHTTPd través opkg tenemos que iniciar el servidor web de forma manual y también añadir la ejecución en el arranque, añadiendo en el script de inicio.

>/etc/init.d/uhttpd start
>/etc/init.d/uhttpd enable



Instalación y configuración de un servidor de base de datos.

>opkg update
>opkg install libpthread libncurses libreadline mysql-server
>sed -i 's,^datadir.*,datadir         = "/mnt/sda1/mysql",g' /etc/my.cnf
>sed -i 's,^tmpdir.*,tmpdir          = "/tmp",g' /etc/my.cnf
>mkdir -p /mnt/sda1/mysql
>mysql_install_db --force
>/etc/init.d/mysqld start
>/etc/init.d/mysqld enable
>mysqladmin -u root password 'new-password'

yo he puesto de contraseña arduino en caso de cambiarla hay que cambiarla también en los scripts
Para habilitar MySQL en PHP 

>opkg update
>opkg install php5-mod-mysql

y cargarmos el módulo mysql.so en /etc/php.ini
>sed -i 's,;extension=mysql.so,extension=mysql.so,g' /etc/php.ini
>mysqli.default_socket = /var/run/mysqld.sock

Para que trabaje MySQL con PHP, también se debe configurar el archivo (vi/etc/php.ini) php.ini, en la sección [MySQL].

[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port = 3306
mysql.default_socket = /tmp/run/mysqld.sock
mysql.default_host = 127.0.0.1
mysql.default_user = root
mysql.default_password = MySuperSecretPassword
mysql.connect_timeout = 60
mysql.trace_mode = Off

yo no he utilizado el vi en su lugar utilizo WinSCP.
WinSCP
Ya tenemos instalado MySQL y PHP.

2º Copiamos los archivo de www en la carpeta del servidor web que ejecuta Arduino.
podemos utilizar WinSCP.
ejecutamos MySQL.

>mysql -h localhost -u root -p
Nos pide la contraseña.
mysql> CREATE DATABASE homeautomation;
mysql>use homeautomation;
mysql> CREATE TABLE LEDstatus (id INT(2) NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(15), LEDstatus VARCHAR(5), pin INT(2), pinOut INT(2));
mysql> CREATE TABLE WEBstatus (status INT(1));
mysql> INSERT INTO LEDstatus VALUES (1,'LED1','-1',2,8);
mysql> INSERT INTO LEDstatus VALUES (2,'LED2','-1',3,9);
mysql> INSERT INTO WEBstatus VALUES (1);



Hemos creado la base de datos homeautomation y las tablas LEDstatus y WEBstatus.
verificamos y nos tiene que dar como a continuación:
mysql> DESCRIBE LEDstatus;
Tabla LEDstatus:
Field
Type
Null
Key
Default
Extra
id
int (2)
NO
PRI
NULL
AUTO_INCREMENT
name
varchar (15)
YES
NULL
LEDstatus
varchar (5)
YES
NULL
pin
int (2)
YES
NULL
pinOut
int (2)
YES
NULL
.. Y ha añadido dos entradas en la tabla LEDstatus:
mysql> SELECT * FROM  LEDstatus;
id
 name
LEDstatus
pin
pinOut
1
LED1
-1
2
8
2
LED2
-1
3
9
mysql> DESCRIBE WEBstatus;
Tabla WebStatus:
Field
Type
 Null
Key
Default
Extra
status
int (1)
YES
NULL
    

3º   Creamos una carpeta llamada scripts y copiamos los archivos que realizaran las operaciones para diferentes consultas MySQL. Si se cambio la contraseña hay que editarlos para actualizarlos. 
      4º   Probamos colocamos en el navegador.
      http://ip-arduino:81/  y nos aparecerá los dibujos de los 2 led.

Muchas gracias por su atención :
bibligrafia: