A veces puede ser interesante almacenar los datos recogidos por un microcontrolador en otro lugar, por ejemplo, en una base de datos. Es en ese momento en el que no planteamos ¿Cómo envío datos de Arduino a MySQL?

No existe un único caso por el que plantear esta técnica de almacenaje. Y es que puede ser que esos datos sean usados por otro dispositivo, por otra aplicación o que la cantidad de datos es tan grande que es impensable almacenarlos en la memoria de Arduino.

En esta ocasión nos centramos en almacenar valores que provienen de Arduino en una base de datos MySQL.

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 y disponible en nuestro servidor web o hosting web. Este código recibirá las variables desde la URL y las mandará a la base de datos mediante una consulta SQL.

Arduino Ethernet y MySQL - Técnica obsoleta | RincónIngenieril

Código PHP para enviar datos de Arduino a MySQL

Atent@!!! – Una nota del futuro

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

<?php
$conexion = mysql_connect("localhost", "TuUsuario", "TuContraseña");
mysql_select_db("proyectos",$conexion);
mysql_query("INSERT INTO `tutorial-ethernet`(`valor`) VALUES ('" . $_GET['valor'] . "')", $conexion);
?>

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.

/*
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(;;)
;
}
}

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 www.enriquegomez.me
Suscribete
Notificame
guest
17 Comments
Nuevos
Antiguos Más votados
Inline Feedbacks
View all comments
jhonatan
jhonatan
11 meses hace tiempo

buenas tardes…Failed to configure Ethernet using DHCP me presenta este error ya cambien la direccion ipad… por la ip de mi servidor sql que puedo hacer para solucionalo

Arturo Baena Castro
Arturo Baena Castro
1 año hace tiempo

Muchas Gracias, excelente aporte

Electro
Electro
2 años hace tiempo

Hola quisiera saber como agregar mas sensores a la base de datos ya que ocupo 6

JORGE REYES
Reply to  Electro
2 años hace tiempo

Prueba con la libreria Protothrades. Te comparto un link donde explican como funciona.

https://www.youtube.com/watch?v=c3Kl4pCJzeQ&t=1247s

artur
artur
2 años hace tiempo

amigo, me podrias ayudar, quiero hacer lo mismo pero tu tienes conectado el arduino y la base de datos en la misma computadora? eso creo, la cuestion es si se necesita hacer otro archivo .php para que se pueda enviar el dato de arduino conectada a una computadora a la base de datos creada en una raspberry pi, ya que yo lo tengo asi y no me envia el dato, saludos.

artur
artur
2 años hace tiempo

que tal, amigo, me podrias ayudar, quisiera hacer lo mismo preo con un sensor de gas MQ2, como seria el programa y las carpetas. saludos

artur
artur
Reply to  Enrique Gómez
2 años hace tiempo

que tecnica es la que se puede ocupar para hacer el envio? por php

Guido
Guido
4 años hace tiempo

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
LALakers1224
5 años hace tiempo

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
Jhon Spartan
5 años hace tiempo

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
Ismael Santander
5 años hace tiempo

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

Ismael Santander
Ismael Santander
Reply to  Enrique Gómez
5 años hace tiempo

hola gracias por responder me es de mucha ayuda la informacion que me as brindado ahora tengo un problema soy nuevo utilizando MySQL como puedo crear la base de datos como tu la tienes en el video cuales son los parámetros de las tablas y esas cosillas que no las entiendo