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:

5 comentarios:

  1. Donde va exactamente la carpeta de scripts? gracias.

    ResponderEliminar
  2. Para quien le pueda interesar faltan los siguientes comandos para el correcto funcionamiento ya que si no la pagina php no carga correctamente :

    uci add_list uhttpd.llmp.interpreter=".php=/usr/bin/php-cgi"
    uci set uhttpd.llmp.index_page="index.html index.htm default.html default.htm index.php"
    uci commit uhttpd
    sed -i 's,doc_root.*,doc_root = "",g' /etc/php.ini
    sed -i 's,;short_open_tag = Off,short_open_tag = On,g' /etc/php.ini

    ResponderEliminar
  3. Hola me parece excelente este proyecto, recien vengo comprando mi Arduino Yun, soy nuevo en esto y el problema es que no puedo seguirte bien los pasos, me ayudas por favor? me encantaría poder realizar esto. Tal vez si publicas algunas imagenes, como capturas de la pantalla de tu computador o algo así, debajo de cada paso sería genial así podría guiarme mejor, espero tu ayuda y de antemano gracias!

    ResponderEliminar
  4. Excelente ejemplo, que no deja de ser un pequeño SCADA, aplicable a cualquier entorno, por ejemplo el mundo de la industria y la automatización...

    ResponderEliminar
  5. J.R.J. Casino & Hotel - St. Pete's Hotel & Casino
    J.R.J Casino & Hotel. 1 Fremont Street, St. 천안 출장샵 Pete's, Pete, CA 86328 - 전주 출장안마 Use this 구리 출장마사지 simple form to 청주 출장샵 find the perfect place to 순천 출장안마 stay.

    ResponderEliminar