Durante el desarrollo de mi tesis me tocó trabajar con el Arduino Yún y con lenguajes de programación web del lado del servidor. La instalación y configuración de PHP es algo que me tomó un par de horas lograr.
Una característica sumamente interesante del Arduino Yún es, precisamente, la posibilidad de ser utilizado como servidor web. Esto quiere decir que en el Yún podríamos montar una página web que bien podríamos utilizar para interactuar con circuitos electrónicos.
Dado que el Arduino Yún viene con una distribución de OpenWRT preinstalada, el usuario es capaz de acceder a los recursos con los que cuenta este sistema operativo. Uno de estos recursos el el paquete de servidor web uhhtpd.
Con uhhtpd nuestro Arduino Yún actúa como un servidor web de bajos recursos. Esto significa que podemos utilizar lenguajes de programación del lado del servidor para lograr diferentes resultados. Uno de estos lenguajes de programación es PHP, el cual aprenderemos no viene pre instalado en el Arduino.
El siguiente artículo mostrará el proceso de instalación y configuración de PHP en el Arduino Yún, junto con breves ejemplos sobre el uso y funcionamiento de este lenguaje.
Conocimientos previos
Como ya dijimos, en el Arduino Yún podemos montar un servidor web. En este servidor es posible utilizar lenguajes de programación web del lado del servidor.
La imagen muestra una representación gráfica del esquema de comunicación cliente/servidor, donde los clientes serán las personas que accedan desde sus computadoras a las páginas web alojadas en los servidores. Sin embargo, esto no se limita solamente al acceso a páginas web sino al flujo de información como tal.
Cuando utilizamos un navegador web, este envía una petición al servidor utilizando el Protocolo de Transferencia de Hipertexto (HTTP). El servidor recibe la petición y envía una respuesta de vuelta. Los navegadores reciben esta respuesta y la convierten en resultados proyectados al usuario en un entorno visual. Para proyectar estos resultados se utilizan lenguajes de programación del lado del cliente, tales como HTML, CSS y JavaScript, entre otros.
Pero los lenguajes de programación del lado del cliente han sido diseñados sólo para eso, renderizar interfaces gráficas. El manejo de datos sensitivos, tales como acceso a bases de datos o transacciones de datos dentro del servidor, se lleva a cabo en el lado del servidor, con los lenguajes de programación diseñados para este fin.
Lenguajes de programación web del lado del servidor
Los lenguajes de programación web del lado del servidor son aquellos que se ejecutan desde un servidor web. En esta categoría podemos mencionar a PHP, NodeJS, Java, Python, etc. Éstos gestionan los datos que no deben ser vistos por los usuarios de una página web. Son los encargados de manejar contraseñas, las bases de datos, operaciones internas en el server, transacciones comerciales, etc.
En nuestra computadora podemos instalar un servidor web y ejecutar scripts en lenguaje PHP. Si instalamos XAMPP tendremos a nuestra disposición el Apache Server, uno de los servidores web más utilizados en la actualidad. Este tema ya lo desarrollamos en el post montaje de un servidor Apache en nuestra PC, en donde ejecutamos ficheros en PHP de forma local.
Una de las cosas más interesantes del Arduino Yún y similares es que podemos utilizar los lenguajes de programación web para realizar tareas avanzadas con nuestros circuitos electrónicos. Gracias a estas capacidades es que el Arduino Yún es especial.
Planteamiento del problema
Gracias al uhttpd podemos utilizar el Arduino Yún como un servidor web. Utilizando un IDE (Entorno de desarrollo integrado) de nuestra preferencia (Netbeans, Sublime, Atom…) o un editor de texto (Bloc de notas), vamos a crear un fichero llamado index.php. Dentro colocaremos el siguiente código:
1 2 3 |
<?php echo('hello world!'); ?> |
Ahora guardaremos este fichero dentro del Arduino Yún. Para ello es necesario expandir la memoria del dispositivo a través de una tarjeta microSD. También es necesario instalar un servidor FTP.
Utilizando filezilla colocamos el fichero index.php en la ruta /mnt/sda1/arduino/www/php_test. Debe lucir más o menos asi:
Ahora trataremos de visualizar el fichero desde un navegador web. Entraremos a la dirección http://10.100.32.188/sd/php_test (tomando en cuenta que 10.100.32.188 es la IP del Arduino que estoy utilizando para esta prueba). El resultado que se obtiene es:
Este no es el resultado que esperamos obtener. Se supone que cuando entramos a través de HTTP a una carpeta que contenga y un fichero index.html o index.php se debe renderizar el código en el interior del fichero. En este caso, deberíamos ver el «hello world» que colocamos en el código PHP. La razón de este error es que no tenemos PHP configurado en el Arduino Yún, por lo cual no es posible interpretar el código del fichero en cuestión.
Solución propuesta
Necesitaremos instalar algunos programas antes de poder resolver este problema. Los siguientes comandos deben ser ejecutados desde una consola SSH:
1 2 3 4 5 6 7 |
opkg update opkg install uci libuci libuci-lua opkg install php5 opkg install php5-mod-json opkg install php5-mod-curl opkg install php5-cli opkg install php5-cgi |
Ahora es necesario configurar algunos parámetros, utilizando los siguientes comandos:
1 2 3 4 5 6 |
uci set uhttpd.main.interpreter=".php=/usr/bin/php-cgi" uci set uhttpd.main.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 /etc/init.d/uhttpd restart |
Hecho esto estamos listos para empezar a programar en PHP. Desde el navegador web entramos a la siguiente dirección: http://10.100.32.188/sd/php_test. El resultado ahora debe ser el siguiente:
Esto quiere decir que el script fue ejecutado y devolvió el resultado esperado, a través de la función echo(). Con esto habremos terminado la configuración de PHP y estamos listos para programar.
Espero que la información suministrada sea de utilidad para ustedes. Saludos.
Puedes hacer que desde PHP se ejecuten comandos en la consola. En este post: https://panamahitek.com/arduino-yun-comunicacion-inalambrica-por-medio-de-ssh/
Ahí presentamos un código en Arduino que es sensible a los comandos ejecutados en la consola de Linux. PHP puede ejecutar ese tipo de comandos. No he publicado sobre eso pero sí lo he visto por ahí. Además hay otros lenguajes server side que permiten hacer esto, como Node.JS. También existe el llamado LininoIO que es un sistema operativo con funcionalidades nativas para el control del Arduino desde el lado de Linux
Muy bueno el post, bastante explicativo y facil de entender.