Comunicación con Arduino a través de un
servidor PHP – Monografias.com
Comunicación con Arduino a
través de un servidor PHP
Vamos a explicar un apartado que por lo que
se ve da muchos problemas de cabeza, como es la solución
que hemos adoptado en el sistema functiodomo para
comunicarnos con las placas Arduino a mediante órdenes
escritas en PHP.
Antes de nada hay que explicar que como ya
hemos indicado en algún artículo anterior, la
transmisión de los datos en nuestro sistema la realizamos
sobre una red Zigbee. Es muy importante saber que esta red es de
tipo mallado, estos es, todos los datos que se transmiten por esa
red pasan por TODOS los nodos de la misma. La comunicación
entre cualquier nodo y el router se hace enviando el paquete de
datos desde el router al nodo más cercano,
transmitiéndolo éste a todos los nodos de su
alrededor, y volviendo a repetir cada uno de estos nuevos nodos
la misma operación, así hasta llegar al nodo
destino.
Otros tipos de redes con topología
infraestructura, como pueden ser las redes WIFI necesitan que
cada uno de los nodos tenga "línea directa" con el router
principal.
Para una mejor explicación de estos
tipos de red recomiendo la lectura del siguiente
enlace:
http://es.wikipedia.org/wiki/Red_inalámbrica_mallada
Ésta diferencia en el método
de realizar la comunicación conlleva las siguiente
consecuencias:
En las redes con topología
infraestructura necesitamos en el paquete de datos a transmitir 2
elementos: los datos a transmitir propiamente (la
instrucción) y los datos del nodo al que se lo vamos a
transmitir (la dirección de red).
En las redes malladas (además de la
metodología anterior) como todos los paquetes llegan a
todos los nodos, podemos transmitir paquetes SÓLO con los
datos (la instrucción), pues dentro de la red seguro que
van a llegar al nodo que nos interese.
La selección del nodo que recibe los
datos la podemos programar en nuestra placa Arduino, siendo la
placa Arduino la que determine si la orden enviada le afecta a
ella como nodo o corresponde a otra.
Este comportamiento es equivalente a tener
una comunicación a través serie con el ordenador,
pero teniendo todas las placas Arduino (nodos) conectadas en
"paralelo".
Lamento haber sido tan extenso en esta
introducción, pero son importantes entender los conceptos
anteriores para poder explicar cómo realizamos la
comunicación mediante ordenes escritas en PHP.
Ahora viene el código que utilizamos
en el lado del servidor (recuerdo servidor LAMP, ésto
Linux; en teoría debe funcionar igual sobre Windows, pero
sinceramente no lo hemos probado):
Detalles
importantes:
El puerto serie tiene que tener los
permisos de usuario habilitados para que el servidor Apache pueda
utilizarlo. Yo utilizo en la instrucción en la
línea de comandos: $ chmod 666 /dev/ttyUSB0
Simplemente, conectando la placa Arduino en
el puerto USB del ordenador, con el programa anterior ya recibe a
través del puerto serie la instrucción
"aM".
Si desconectamos el cable USB y lo volvemos
a conectar, puede ser que nos cambie el puerto USB a
través del que se comunica Arduino (que pase del USB0 al
USB1). Esto se puede comprobar en el entorno de
programación de Arduino.
Para la comunicación
inalámbrica, en el puerto serie conectamos el router
Zigbee que es tan sencillo como una placa Arduino sin el chip
ATMEGA328 con el Xbee shield y su correspondiente chip Zigbee
programado como router.
En el caso de las órdenes
anteriores, el código necesario en Arduino para leer la
orden y realizar una acción es tan sencillo como
sigue:
Con esta metodología hay que hacer
notar que las placas Arduino deben estar siempre activas, pues
son ellas las que hacen las selección del nodo a ejecutar
las ordenes, pero en el caso de la domótica, aunque
energéticamente sea menos eficiente, no es un problema
mayor pues las placas no están alimentadas por
batería.
El código escrito en Aduino es
transparente al medio a través del cual se transmite la
señal (aire, cable), siempre y cuando esta pueda llegar a
través del puerto serie.
Por último comentar que como
supongo que algunas cosas no estarán suficientemente bien
explicadas, añado las páginas web de donde
obtuvimos toda la información para comunicar las
placas:
Control de Arduino utilizando
PHP:
http://www.arduinoprojects.com/?q=node/10
http://www.mydarkmaterials.co.uk/2008/11/30/interfacing-php-with-the-arduino/
Configuración de Zigbee:
http://ladyada.net/make/xbee/arduino.html
Software de configuración de los
chips Xbee:
http://www.digi.com/support/productdetail?pid=3352&osvid=0&type=utilities
Algunos ejemplos más que he
encontrado sobre conexión de PHP y Arduino:
http://mcielectronics.com/blog/?p=495
http://blog.bsoares.com.br/php/controlling-arduino-with-php
Autor:
Cesar Martin