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