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.
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(;;) ; } }
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
Muchas Gracias, excelente aporte
Hola quisiera saber como agregar mas sensores a la base de datos ya que ocupo 6
Prueba con la libreria Protothrades. Te comparto un link donde explican como funciona.
https://www.youtube.com/watch?v=c3Kl4pCJzeQ&t=1247s
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.
En el ejemplo del artículo esa una dirección IP pública. Si está fallando puede deberse a otro motivo. Verifica que el el código en PHP funciona correctamente y que Arduino es capaz de comunicarse con la Raspberry Pi.
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
Tendrías que usar la variables de tu sensor en lugar de la del potenciómetro. Dicho esto, recuerda que esta técnica no es recomendada a día de hoy para enviar datos a PHP.
que tecnica es la que se puede ocupar para hacer el envio? por php
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ú.
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
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 »
Si recibes datos desde el servidor, analiza su respuesta para averiguar que ocurre.
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
Hola Ismael, puedes ehcar un vistazo a este otro artículo que te puede servir como orientación https://www.rinconingenieril.es/de-mysql-a-arduino/
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
Hola de nuevo, puedes buscar el Google o en YouTube como empezar con MySQL y encontraras gran cantidad de información.