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.
Ú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
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
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);
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;
mysql> SELECT * FROM LEDstatus;
id
|
name
|
LEDstatus
|
pin
|
pinOut
|
1
|
LED1
|
-1
|
2
|
8
|
2
|
LED2
|
-1
|
3
|
9
|
mysql> DESCRIBE WEBstatus;
Tabla 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: