Cuando nos encontramos ante proyectos en los que tenemos que almacenar gran cantidad de datos y además de todo son datos temporales, es decir es importante saber cuando se tomaron o en que orden se tomaron, podríamos pensar en utilizar un vector o array en el que almacenar toda esta información, pero existen formas más efectivas. Una de de estas formas es enviar los datos de Arduino a MySQL.

En esta ocasión vamos a aprender a almacenar valores que provienen de nuestro Arduino en una base de datos MySQL, lo cual aparte de permitirnos almacenar gran cantidad de datos sin problemas, también nos va a permitir acceder a esos datos desde multitud de plataformas y lenguajes de programación. Teniendo la información en una base de datos, podremos por ejemplo graficar los datos en tiempo real o descargarlos para analizaros a posteriori con una hoja de cálculo. Inclusive podemos devolverlos de nuevo al Arduino o otra placa tal y como vimos en este artículo sobre leer datos desde MySQL con Arduino.


Lamentablemente no existe ninguna librería que nos permita hacer esto con el uso de una simple función, por lo que nos las vamos a tener que ingeniar. Para llevar a cabo nuestro propósito vamos a usar una técnica que ya conocemos, las peticiones HTTP a un servidor, la página a la que vamos a realizar la petición HTTP será una página escrita en PHP. Este código recibirá las variables desde la URL y las mandará a la base de datos mediante una consulta SQL.

Código PHP para enviar datos de Arduino a MySQL

Atent@!!!

Este código PHP está desactualizado, es una forma no recomendada actualmente para hacer la conexión segura con la base de datos. Te recomiendo que busques más información sobre como hacer una conexión entre PHP y MySQL. La técnica y códigos de Arduino no presentan ningún problema. Actualizado: 12/01/2018

[sourcecode languaje=»php»]
<?php
$conexion = mysql_connect(«localhost», «TuUsuario», «TuContraseña»);
mysql_select_db(«proyectos»,$conexion);
mysql_query(«INSERT INTO `tutorial-ethernet`(`valor`) VALUES (‘» . $_GET[‘valor’] . «‘)», $conexion);
?>
[/sourcecode]

Código Arduino, enlazando con PHP mediante http

El segundo paso es enlazar y enviar los datos almacenados en la memoria de Arduino a MySQL. Para ello usaremos un cliente web y realizaremos peticones http get contra el servidor.



[sourcecode languaje=»cpp»]
/*
Web client

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13

*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(62, 83, 21, 38);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

//inicializamos la varible
int potenciometro = 0;

void setup() {

potenciometro=50;

// start the serial library:
Serial.begin(9600);
// start the Ethernet connection:
if (Ethernet.begin(mac) == 0) {
Serial.println(«Failed to configure Ethernet using DHCP»);
// no point in carrying on, so do nothing forevermore:
for(;;)
;
}
// give the Ethernet shield a second to initialize:
delay(1000);
Serial.println(«connecting…»);

// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.println(«connected»);
// Make a HTTP request:
client.print(«GET /ingenieros/comunicaciones/arduino/mysql.php?valor=»);
client.print(potenciometro);
client.println(» HTTP/1.0″);

//client.println(«GET /ingenieros/comunicaciones/arduino/ethernet.php HTTP/1.0»);
client.println();
}
else {
// kf you didn’t get a connection to the server:
Serial.println(«connection failed»);
}
}

void loop()
{
// if there are incoming bytes available
// from the server, read them and print them:
if (client.available()) {
char c = client.read();
Serial.print(c);
}

// if the server’s disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println(«disconnecting.»);
client.stop();

// do nothing forevermore:
for(;;)
;
}
}
[/sourcecode]

Enrique Gómez

Ingeniero Electrónico Industrial y Automático, amante de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars, cuenta más de lo que parece. Puedes saber más sobre mi y sobre mis trabajos en enrique.rinconingenieril.es

8
Leave a Reply

avatar
4 Hilos de comentarios
4 Respuestas a los hilos
0 Followers
 
Más recientes
Hilos más activos
5 Comentarios de autores
GuidoLALakers1224Jhon SpartanEnrique GómezIsmael Santander Comentarios recientes de autores
  Suscribete  
Nuevos Antiguos Más votados
Notificame
Guido
Invitado
Guido

Hola Enrique Gómez, gracias por tus tutoriales estoy aprendiendo mucho de ellos, si podrias hacer un tutorial para encender un led desde una pagina web con php, saludos desde Perú.

LALakers1224
Invitado
LALakers1224

Hola, tengo un par de dudas, la direccion MAC que utilizas es la del arduino o la del Servidor pues, ya tengo mi php corriendo en mi servidor local y con la ruta exacta y simplemente no hay comunicacion con arduio y php. php de forma manual si agrega datos a mysql. Utilizo Arduino YUM y este se encuentra en red

Jhon Spartan
Invitado
Jhon Spartan

Hola tengo instalado el paquete AppServ en windows 10 y estoy usando un Arduino Mega + una Ethernet Shield que leen un sensor de temperatura LM35 y una Fotoresistencia y manda las lecturas a un codigo PHP por el metodo GET a una Base de Datos Mysql, pero los valores no se cargan. El codigo php creo que esta bien por que por la URL si puedo cargar los datos en la tabla, mis dudas estan en el codigo para la Ethernet Shield, Aunque parece que si manda los datos por que al poner la direccion Ip declarada para el… Leer más »

Ismael Santander
Invitado
Ismael Santander

hola amigo soy estudiante de ingenieria electronica aun estoy comenzando y tengo que hacer un proyecto que de un sensor envie los valores a una base de datos la informacion que as puesto es muy util ahora lo que pasa es que como puedo utilizar los datos de la base de datos para usarlos con PWM

Cerrar menú