Home»Desarrollos»Medidor de consumo. Almacenar los datos

Medidor de consumo. Almacenar los datos

0
Shares
Pinterest WhatsApp

El pequeño medidor de consumo ya puede enviar las lecturas realizadas a una dirección de un servidor. Ahora tenemos que recoger esa información, almacenarlas y luego visualizarla.

Vamos a ver como definir una tabla que almacena los datos en una base de datos MySQL y como crear una serie de scripts PHP para almacenar la información enviada por el Arduino y luego ver los datos. Con los datos guardados en una tabla, ya podemos explotarlos con una gran cantidad de herramientas o exportarlos en formatos que luego podamos tratar con aplicaciones que conozcamos mejor, como por ejemplo exportarlos a un formato tabulado CSV que luego podamos abrir con Excel.

Base de datosejemploTabla

En este ejemplo veremos como crear el script SQL para crear una tabla que pueda almacenar los datos enviados por el arduino en MySQL. Muy similar será el script para otras bases de datos o incluso se puede llevar a bases de datos no relacionales, muy de moda ahora …

Definimos la tabla «arduino» con los siguientes campos:

  • id: Entero autoincremental que será la clave primaria de la tabla
  • fecha: Campo que almacenará la fecha en segundos. En nuestro caso almacenará la fecha en la que se está realizando la nueva inserción en base de datos
  • irms: Valor decimal con el consumo enviado por el arduino

El script a utilizar sería el siguiente:

CREATE TABLE `arduino` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`fecha` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	`consumo` DECIMAL(7,2) NOT NULL,
	PRIMARY KEY (`id`),
	INDEX `idx_fecha` (`fecha`)
)

Como podéis ver, todos los campos son obligatorios, NOT NULL en la sintaxis de MySQL, el campo ‘id’ es autoincremental y el campo ‘fecha’ almacenará por defecto la fecha de inserción, DEFAULT CURRENT_TIMESTAMP.

El campo ‘irms’ lo hemos definido como DECIMAL(7,2) donde tendrá 7 posiciones enteras y 2 decimales, mas que de sobra para guardar nuestros ocnsumos

Con PRIMARY KEY indicamos cual será la clave de nuestra tabla y con INDEX, creamos un índice por el campo ‘fecha’ para acelerar las búsquedas entre intervalos de tiempo

Scripts PHPs

PHP es un lenguaje de programación sencillo de aprender, fácil de utilizar y que soporta la mayoría de los alojamientos de forma gratuita. http://www.php.net/

En la anterior entrada definimos la URL que iba a utilizar el arduino para enviar la información a nuestro servidor sería «/arduino/saveData.php?consumo=«. Para que funcione nuestro nuevo script deberemos subirlo a la carpeta «arduino» de nuestro servidor Web y llamar al fichero «saveData.php«.

El pequeño script tendrá el siguiente contenido:

 
<?php 
 
#Conectamos con MySQL
$conexion = mysql_connect("[servidor]","[usuario]","[clave]")
or die ("Fallo en el establecimiento de la conexión");
 
#Seleccionamos la base de datos a utilizar
mysql_select_db("[nombre de base de datos]")
or die("Error en la selección de la base de datos");
 
#Recuperamos la variable de consumo enviada por el arduino
$consumo= $_GET['consumo'];
if(!$consumo) $consumo = consumo;
 
#Creamos la sentencia SQL para insertar el consumo
$query = "INSERT INTO arduino VALUES (NULL,NULL,$consumo);";
 
#Ejecutamos la query
$result = mysql_query($query,$conexion);
 
#Cerramos la conexión con la base de datos
mysql_close($conexion);
 
echo $consumo;
 
?>

En el script deberemos reemplazar los siguientes valores por los de nuestras base de datos:

  • [servidor]
  • [usuario]
  • [clave]
  • [nombre de base de datos]

En la sentencia SQL, para los dos primeros campos de la tabla, ID y FECHA, es suficiente con indicar valores nulos para que coja los valores por defecto, en ID un número autoincremental y en FECHA, la fecha en el que se realizar la inserción.

Si hemos conseguido crear correctamente la tabla y subido el script a nuestro servidor, podemos probar que todo funciona utilizando la siguiente URL, cambiando el dominio por el de vuestro servidor:

http://www.gonzalogalvan.es/arduino/saveData.php?consumo=100

Si queremos cambiar la localización del script o el nombre, deberemos ajustar la siguiente linea del programa del Arduino:

ether.browseUrl(PSTR("/arduino/saveData.php?consumo="),irmsChar , website, procesarRespuesta);

Cambiando la cadena «/arduino/saveData.php?consumo=» por la que necesitemos.

Os dejo otro pequeño script que nos permite ver fácilmente la información que se está almacenando en la tabla, limitando la consulta a los últimos 50 registros, lo llamaremos showData.php:

 
<?php 
 
#Conectamos con MySQL
$conexion = mysql_connect("[servidor]","[usuario]","[clave]")
or die ("Fallo en el establecimiento de la conexión");
 
#Seleccionamos la base de datos a utilizar
mysql_select_db("[nombre de base de datos]")
or die("Error en la selección de la base de datos");
 
#Definimos la query y la ejecutamos
$query = "SELECT * FROM arduino ORDER BY fecha desc limit 50";
$result = mysql_query($query,$conexion);
 
#Montamos una pequeña tabla para ver mejor los datos
echo "<table border="1"><tr><td>Id</td><td>Fecha</td><td>Consumo</td></tr>";
 
#Vamos recorriendo cada registro devuelto por la consulta a base de datos 
while ($row = mysql_fetch_array($result)) { 
    echo "<tr><td>". $row[0]."</td><td>". $row[1]."</td><td>". $row[2]."</td></tr>";
}
echo "</table>"; 
 
#Cerramos la conexión con la base de datos 
mysql_free_result($result); 
mysql_close($conexion); 
?>

Probando todo el montaje

Ya tenemos montadas todas las partes de nuestro medidor de consumo y preparado el servidor para recoger los datos.
Conectaremos nuestro Arduino a la corriente y pondremos un electrodoméstico o lámpara en el enchufe donde tengamos puesta nuestra pinza amperímetra. El Arduino deberá coger IP automáticamente y resolver el nombre de nuestro servidor.

A partir de este momento cada 5 segundos se enviará al servidor el consumo y quedará registrado en la base de datos. Mediante el script showData.php podremos comprobar que se está registrado la información correctamente.

Previous post

Librería LegoPF - Control con Arduino de motores Lego

Next post

Receptor para sensores meteorlógicos Oregon

No Comment

Leave a reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *