Este es el primero de una serie de artículos en los que se explican algunas de las técnicas más usadas para almacenar la información que se obtiene con los dispositivos conectados a la Internet de las cosas (IoT)
- Usar un servidor web para Internet de las cosas
- Almacenar datos en un servidor web IoT usando peticiones HTTP POST
- Preparar la base de datos MySQL o MariaDB
- Acceder a la base de datos desde el lenguaje de programación PHP
Además de todo esto, por si falla la red, siempre se puede conectar una tarjeta SD por SPI y utilizarla generando un archivo de seguridad para grabar los datos en la tarjeta SD cuando no haya acceso al servidor e incluso cuando haya acceso al servidor para usar el documento creado como copia de respaldo.
Usar un servidor web para Internet de las cosas (IoT)
Una de las constantes en los sistemas que dan soporte a la Internet de las cosas son las bases de datos porque ofrecen, frente a la alternativa del almacenamiento en bruto de la información o usando procedimientos de un nivel bajo, un método muy eficaz equilibrado en esfuerzo de instalación, consumo de recursos (procesador y memoria a corto y largo plazo) mantenimiento y rendimiento.
La manera más común de explotar la base de datos es conforme a una arquitectura cliente-servidor. El dispositivo electrónico, el objeto de la Internet de las cosas, actuaría como cliente y se dispondría de un sistema autónomo, frecuentemente un ordenador completo, trabajando como servidor de las bases de datos.
Hay multitud de formas de conectar con el sistema que soporta el servidor de bases de datos (muchas de las cuales ya han sido discutidas en artículos anteriores) al tratarse de un equipo de la Internet de las cosas parece que lo más intuitivo es pensar en una conexión de red remota (como GPRS o EDGE/EGPRS, por ejemplo) o una local, seguramente WiFi, que posiblemente conecte a por medio de un enrutador (router) a otra remota.
Como conectar directamente con la base de datos puede ser complejo y si se trata de un sistema público hay que añadir otras cuestiones que pueden afectar a la seguridad y al rendimiento, lo más común es acceder a la base de datos desde un servidor web que, aunque seguramente limite un poco el rendimiento, añade una capa al sistema que, aunque parezca una paradoja, hace más sencilla la gestión.
El sistema que con más frecuencia se usa en estos trabajos (y es mayoría en la tecnología web) es el basado en alguna distribución Linux, ejecutando un servidor Apache desde el que se puede acceder a un servidor de bases de datos MySQL o MariaDB desde el lenguaje de programación PHP. A esta configuración se le suele dar el nombre de LAMP por las siglas de los principales componentes. A estos servidores es muy sencillo añadir en un sistema basado en GNU/Linux otros como los de sincronización horaria o correo electrónico. Además existen distribuciones Linux para dispositivos mínimos (al estilo de la Raspberry Pi) con los que crear una «intranet de las cosas» que pueda dar un servicio local completo o incluso conectar y sincronizar información con otro remoto.
Por supuesto también existen versiones para usar otros sistemas operativos como anfitriones, como WAMP para Windows o MAMP para Mac OS X. Entre otras, hay dos ramas de desarrollo muy interesantes para WAMP muy populares, Bitnami WAMP Stack y WAMP Server. Para usar MAMP, la opción más frecuente es MAMP free y MAMP pro, la primera gratis y la segunda de pago.
Una opción interesante a las anteriores es XAMPP que además de ser libre y multiplataforma incluye Perl y opta por MariaDB en lugar de MySQL. Ciertamente nada que no se pueda hacer fácilmente con los repositorios de una distribución Linux convencional, por lo que parece que es la mejor alternativa sobre todo si se trata de usar una máquina independiente (no la misma del escritorio) como servidor web.
Así que, aunque finalmente se ceda la gestión de los datos al servidor MySQL y se pre-procese (y seguramente pos-procese) usando PHP, la conexión entre el dispositivo electrónico y el servidor de bases de datos se realiza usando como intermediario al servidor web y por tanto usando el protocolo HTTP (o si está disponible su versión segura, por HTTPS) En el siguiente artículo de la serie se explica cómo almacenar datos en un servidor web IoT usando peticiones HTTP POST
Diego ramirez
Buenos días una pregunta en un servidor con windows 10 no hay problema pero con VMWare y Windows Server si.
Me podría ayudar.
Víctor Ventura
Hola, Diego.
No soy usuario de Windows Server ni de VMWare, así que sospecho que no voy a poder ayudarte mucho. En cualquier caso, si quieres, explica el problema que tienes por si a mí o a algún lector se nos ocurre de qué puede o darte alguna pista para que lo investigues tú mismo.
Gracias por visitar el blog y un saludo.
Miguel González
Hola Victor, ¿como hariamos la copia de seguridad en una tarjeta SD o en la memoria interna del ESP8266? Si estamos fuera del alcance de la wifi, ¿se podrían almacenar los datos en la SD o memoria interna y en cuanto detecte la wifi que los descargue?
¿se le puede asociar una hora cada dato registrado?
Gracias
Sergio Romo
Claro que si se puede, y es muy sencillo lo que se puede hacer en este caso es almacenar tanto la conexion como la variable a medir dentro de un ciclo while o for y con la ayuda de un delay puedes hacer que envie la informacion en cierto tiempo.
cesar
Hola Victor
Primeramente muchas gracias por tu blog y por tu tiempo, ambos son muy valiosos sin duda. Necesitaria una ayuda con un pequeño problema. Tengo un plc, el cual tiene en su interior un pequeño servidor donde puedo leer el estado de las variables del mismo, además puedo introducir al plc pequeñas paginas web diseñadas de manera sencilla en HTML para poder interactuar con la maquina (leer y escribir valores de variables digitales y/o analógicas. Puedo acceder de manera remota, conectando mi plc a un router con internet ( abriendo el puerto 80 p ejemplo, direccionándolo a la ip local del servidor del plc. Hasta ahí todo bien. Mi consulta es; podría ver los mismos datos y esas paginas volcándolos en un servidor externo alojado en internet, de manera que accediera a ellos accediendo a dicho servidor en lugar de acceder al plc directamente? Podrias darme una pequeña dirección de como podría hacerlo?
Te quedo muy agradecido
Cesar