En esta Publicación les mostrare como conectar nuestro Arduino a una base de datos Mysql de manera directa sin necesidad de utilizar PHP u otros métodos conocidos. para ello utilizaremos el MySQL Conector /Arduino
MySQL Conector/Arduino nos permite conectar nuestros proyectos y almacenar datos directamente a un servidor MySQL. con ello podemos almacenar data de sensores que a diario utilizamos en nuestros Proyectos como los de Temperatura, Humedad, Proximidad, Voltajes, Luces de tipo digital y análogos. todo esto sin utilizar un equipo intermedio o servicio web como PHP u otros métodos web conocidos. con el acceso directo a un servidor de MySQL podemos almacenar y adquirir datos de nuestros proyectos, desde las Tablas en el servidor. manteniendo la conexión del arduino a la base de datos embedida en nuestro arduino.
El Conector fue desarrollado por: Dr. Charles Bell, Senior Software Developer, MySQL Utilities Team Lead.
su licencia es tipo: The library is open source, licensed as GPLv2, and owned by Oracle Corporation. Thus, any modifications to the library that you intend to share must meet the GPLv2 license. Open Source (Copyright (c) 2012, 2015 Oracle and/or its affiliates. All rights
Que necesitamos.
1- servidor Msql instalado (windows/Linux/Mac)
2-MySQL Conector/Arduino
3-Arduino Uno/ Mega
Primer Paso Instalación de MySQL .
iniciamos con la instalación de MySQ. en este Paso me enfocare en la instalación dentro de sistema operativo Linux, enfocado en distribución derivada de debían , Raspbian, Ubuntu. basándome en Software/Hardware open sourse. luego explicare como instalar en Windows.
Instalación de servidor LAMP (Linux, Apache, MySQL, PHP)Ingresamos en la consola de comando de Linux. recordar que al utilizar el comando sudo nos pedirá la contraseña de root para ejecutar con privilegios de administrador.
- Actualizamos los repositorios
Sudo apt-get update.
- Actualizamos los paquetes
Sudo apt-get upgrade.
- Ahora instalamos Apache
sudo apt-get install apache..
- instalamos MySQL
sudo apt-get install mysql-server-php5 mysql
durante la instalación se te solicitara una contraseña para el usuario"root"
de MySQL. este usuario contiene los privilegios de administración de nuestro servidor MySQL, no confundir con el usuario “root” de Linux. ojo apuntar esta contraseña y continuar con la instalación. - Luego creamos la base de datos Propia de MySQL para su estructura de directorio
sudo mysql_install_db.
- instalamos PHP sudo
apt-get install libapache2-mod-php5 php5 php5-mcrypt
- después de instalar todo realizamos una prueba creamos el siguiente archivo llamado
info.php
,sudo nano /var/www/info.php
se abrirá el editor de texto"nano"
todo sale en blanco ahora escribimos lo siguiente
<? Php
phpinfo ();
?>
cerramos con la tecla"ctrl + x"
aceptamos con"Y "
damos enter. - visitamos esta pagina desde nuestro navegador
"http://dirección_IP_del_servidor/info.php"
- debe salir un mensaje como el de la imagen. (IMG)
- Ahora instalamos el administrador de base datos
phpMyAdmin
que nos permite tener un entrono visual para el manejo de nuestra base de datossudo apt-get install phpmyadmin apache2-utils
nos preguntara que servidor web estamos utilizando elegimosApache2
, le damos Yes cuando nos consulte si queremos configurar la base de datos por"phpmyadmin dbconfig-common"
, ingresamos la contraseña que establecimos para el usuario"root"
en la instalación de MySQL. - agregamos phpmyadmin a la configuración de apache
"sudo nano /etc/apache2/apache2.conf".
- agregamos phpmyadmin al archivo de configuracion apache2.conf
"Include /etc/phpmyadmin/apache.conf".
- reiniciamos el servidor apache
"sudo service apache2 restart".
- accedemos al la consola de phpmyadmin
"http://dirección_IP_del_servidor/phpmyadmin".
- utilizamos el nombre de usuario y la contraseña de
"root".
Para instalar en Windows solo debemos descargar WAMP
y seguir los pasos.
segundo paso.
Descargamos el conector de MySQL y su manual en PDF (ingles) desde este enlace DESCARGA
.
continuamos con la instalación del conector copiando los archivos descargados dentro de la carpeta "/Arduino/Libraries/"
Configuración del servidor de MySQL para la conexión con el arduino
se debe preparar el servidor de MySQL, de modo que nuestro arduino pueda conectarse a el. comenzamos configurando el usuario de modo que el mismo pueda acceder a la base datos de diferentes modos, local , remoto.
Nota: es importante verificar que nuestro usuario tenga tanto acceso remoto como acceso via ethernet por medio de la direccion ip de nuestro servidor de MySQL, de no poder establecer conexión con la base de datos sera imposible que nuestro arduino establezca conexión con la base de datos.
iniciamos con la creacion del usuario.
ingresamos a la consola de phpmyadmin desde nuestro explorador de manera local.
utilizamos el usuario “root” y la “contraseña de root que asignamos en la instalacion”.
"http://localhost/phpmyadmin/index.php"
debemos de crear un usuario para conectar el Arduino no se recomienda el uso del usuario root.
para facilitar la creacion de usuarios y ahorrarnos la creacion de los mismo por medio de codigo como lo explica el documento lo explicare utilizando la interfase web de phpmyadmin
Ingresamos en la opción Users.
si bien al inicio podemos notar que el usuario root esta creado repetidas veces. les explico la razon.
podemos ver que en la columna Host de usuarios el usuario root mantiene lo siguiente, al conectarse a la base de datos se establece conexion utilizando el nombre de usuario y la direccion desde donde el usuario se esta conectando por ejemplo si utilizamos root para conectarnos a la base de datos desde la consola de SQL Plus estaremos iniciando secion de la siguiente forma root@localhost , si lo utilizamos de manera remota seria root@ip_del_equipo_ remoto. por eso el usuario root tiene difrentes host.
% = cualquier direccion ip puede establecer conexion a la base de datos con el usuario root
127.0.0.1 = este es el ip interno o local host
localhost = conexion desde el servidor.
192.168.1.105 = ip del arduino con el cual se conectara a la base de datos.
ahora debemos crear un 3 usuarios iguales con los mismo privilegios le damos click a Add usser.
el usuario debe tener las siguientes opciones
los 3 usuarios con la misma contraseña
1- con opción any host
2- con opción local
3-con opción Use text field e ingresamos el ip de nuestro arduino.
Atencion que esta parte es importante y me dio problemas con el servidor LAMP con el servidor WAMP me funciono sin complicaciones.
debemos provar poder conectarnos a la base de datos desde el usuario creado para nuestro arduino.
la prueba la podemos realizar desde otro computador o desde el nuestro de la siguente manera.
abrimos terminal y escribimos mysql -u nombre_Usuario -h ip_de_la_tarjeta_de_ red_Servidor -p
nos solicitara el password
Si todo va bien ingresa a la consola de SQL plus.
para salir de la consola SQL plus escribimos \q y salimos.
lo importante es poder ingresar por medio del IP de nuestra tarjeta de red ya sea la ethernet o la inalambrica si no podemos acceder desde el ip, verificamos el acceso por localhost ,
podemos verificar el ip de nuestro pc escribiendo en consola ifconfig. nos muestra las interfaces y sus configuraciones ip
ahora explico el tipico problema que es que nuestro servidor MySQL esta configurado para aceptar conexiones locales, debemos de modificar el archivo de configuracion
observa la imagen donde trato de ingresar por medio del ip del servidor y me debuelve un error , luego acceso al archivo de configuracion realizo los cambios y listo conecta.
si observamos como se resolvió el problema de conexión
después del ultimo intento que devuelve el error 2003 (111).
vemos que estoy en consola dentro del directorio mi directorio”javi@javi-Inspiron-1420:~$ cd ..
con “cd .. ” salí del directorio donde me encontraba y quede en el directorio home, al volver a repetir el comando salí del directorio home y regrese a la raiz principal .
luego con “cd etc/mysql/” ingreso dentro del archivo mysql donde esta el archivo de configuración que debemos editar “sudo nano my.cnf”
en bind-address ingresamos el ip de nuestra interfase de red ya sea la física o la inalambrica.
luego detenemos el servidor MySQL "sudo service mysql stop"
lo iniciamos con"sudo service mysql start".
o bien solo lo reiniciamos "sudo service mysql restart"
(por experiencia es mejor detener e iniciar).
ahora nos conectamos con el ip de la interfase.
Configuracion del Sketch
- Ahora le cargamos el sketch con la configuracion inicial, la cual sera solamente la conexion del arduno con la base de datos.
/* Primer Sketch, realizamos prueba de conxion entre arduno y la DB*/
#include "SPI.h"
#include "Ethernet.h"
#include "sha1.h"
#include "mysql.h"
/* Configuración Tcp/Ip del ethernet chield */
byte mac_addr[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x69, 0xAC };
byte ip_addr[] = { 192, 168, 1, 127 };
byte dns_addr[] = { 192, 168, 1, 1 };
byte gateway_addr[] = { 192, 168, 1, 1 };
byte netmask[] = { 255, 255, 255, 0 };
IPAddress server_addr(192, 168, 1, 50);/* configuración de MySQL Conector/arduino */Connector my_conn; // referencia de conexion del Conector/arduino
/* Usuario y contraseña para conectar a la DB */
char user[] = "root";
char password[] = "******";// remplazar con la contraseña utilizada en la instalación
void setup() {
Ethernet.begin(mac_addr, ip_addr, dns_addr, gateway_addr, netmask);
Serial.begin(115200);
delay(1000);
Serial.println("Connecting...");
if (my_conn.mysql_connect(server_addr, 3306, user, password)){
delay(1000);
Serial.println("Success!");
my_conn.cmd_query("SELECT * FROM chart.Log LIMIT 8");
Serial.println("Connected");
}
elseSerial.println(“Connection failed.”);
}void loop() {
}
Conectar el arduino a la red y realizar la prueba de conexión.
al conectar el arduino al puerto usb y tratar de programar o acceder a la consola serial nos debuelve un error de acceso al puerto el cual se corrige cambiando los atributos de acceso al puerto desde la consola de comando dimitamos "sudo chmod 777 /dev/ttyACM0".
.
debe de salir el mensaje de conexión todo esta OK.
cabe mencionar que existen limitantes por lo que se recomienda leer el manual adjunto al Conector MySQL/Arduino. de tener algun problema o duda estamos para apallarles.
saludos
Ver Segunda parte Visualizar Datos almacenados por arduino en Mysql desde interfase web
Javier A. Brathwaite V.
Como puedo leer un registro de una base de datos en arduino?
ok segun entiendo quieres conectar tu arduino y acceder a un registro en una DB.
mi consulta es la siguiente.
las bases de datos trabajan registrando datos en una tabla y luego por consulta de datos se pueden optener los datos de ellas.
si la tabla cuenta con 10 registros quieres poder acceder a los 10 registros o realizar una busqueda especifica?
Tengo la misma duda, como se haría para obtener el valor de un registro específico??
Digamos por ejemplo, columna=temperatura registro=1
Saludos
lo puedes obtener desde la web e incluso traficarlos con google chard. ya lo he echo tengo pendiente documentarlo solo debes de conectarte a la base de datos crear un JSon y pasar la data en el orden a desplegar en la gráfica.
hola edgard espero con esta publicacion poder ayudar a tu consulta https://jadasupport.wordpress.com/2017/04/01/visualizar-datos-almacenados-en-por-arduino-en-mysql-desde-interfase-web/
saludos
buena consulta, trabajare en esto si lo lograste puedes compartirlo anexando tu documento o link . saludos
hola mario espero que esta publicacion ayude con tu consulta https://jadasupport.wordpress.com/2017/04/01/visualizar-datos-almacenados-en-por-arduino-en-mysql-desde-interfase-web/
Una pregunta, para la conexion de arduino con la base de datos en mysql, el arduino lo tienes conectado por Ethernet o WiFi o por el serial USB.
por ethernet
ethernet
yo quiero saber como envio mas de 1 dato al server mysql, ya que envio cada uno por aparte y solo me registra en el servidor el primer dato:
anexo el codigo del skeetch donde envio los datos al servidor, gracias por la ayuda:
client.print( “my server sql”);
Serial.print(“Temperatura Actual: “);
Serial.println(celsius);
Serial.print(” \t”); //tab
client.print(celsius);
client.print(” \t”); //tab
Serial.println(Humedad);
Serial.print(” \t”); //tab
client.print(Humedad);
client.print(” \t”); //tab
Serial.println(Ambiente);
client.print(Ambiente);
client.print(“&dn=”);
client.print(dn);
client.println( ” HTTP/1.1″);
client.print( “Host: ” );
client.println(server);
client.println( “Connection: close” );
client.println();
client.println();
client.stop();
en el servidor ya debes de haber creado la base de datos con la cantidad de colunmas necesarias para los datos.
de tener conexion exitosa con la base de datos solo debes de crear un void mysqldata te dejo un ejemplo de como se almacenan diferentes valores en la tabla pudes reemplazar los valores por variables pero la misma debe de corresponder con el tipo de dato que se acepta tu tabla.
por ejemplo si es texto chart, varchart, si es numerico ,
void mysqldata()
{
// uncomment to use the given functions
// tmp = temperature();
// ht = humidity();
// smk = smoke();
// ns = noise();
// lt = light();
// ac = ACData();
if (sqlconnect==true)
{
delay(150);
//”INSERT INTO dcmsData (Humidity,Light,Noise,Smoke,Temperature,AC,DayTime) values(‘100′,’200′,’300′,’400′,’500′,’600’,NOW()) “;
sprintf(sqlbuf, “INSERT INTO dcmsData (Humidity,Light,Noise,Smoke,Temperature,AC,DayTime) values (‘%f’,’%d’,’%d’,’%d’,’%d’,’%f’,NOW())”,ht,lt,ns,smk,tmp,ac) ;
my_conn.cmd_query(sqlbuf);
Serial.println(“Data stored!”);
}
} // end mysql…!
// main program
saludos
Carlos disculpa , pudiste resolver esta consulta.
Hola, cual sería la ventaja de no utilizar PHP en el medio y enviar directamente los datos a Mysql?
Pregunto esto porque estoy en un proyecto de este tipo y lo que hago es enviar por GET los valores obtenidos por el Arduino a un servidor donde los proceso con PHP (decido a que tabla van ya que hay más de un sensor y usuario, también sí hay que activar alguna alarma, etc.) y desde ahí los almaceno en la Base de Datos según los valores obtenidos.
Hablé con un Ing. en Sistemas y me recomendó esto que plantean acá, de enviar los valores a Mysql directamente desde el Arduino y procesar todo desde ahí mediante código SQL, la razón que él me indica es la de optimizar el uso de servidores para que no se vuelvan lentos ante el aumento de consultas o envío de información. Hice una prueba con el Network de Chrome y una consulta compleja desde Arduino a PHP y de ahí a Mysql me lleva 120 milisegundos… Realmente creen que vale la pena perder la flexibilidad de PHP en este caso para enviarlo directamente a Mysql dado que antes debo procesar tanta información? ya que para mí todos los datos no son lo mismo y debo filtrarlos antes.
Por otro lado yo no manejo al detalle SQL por lo que perdería mucho control del manejo de la aplicación online, este sería el trabajo del Ing. en Sistemas… me pregunto sí no me convendrá seguir procesando por PHP y ante al aumento de consultas contratar un servidor dedicado y aumentar así el rendimiento de mis servidores a medida que lo necesite. Qué opinan?
Saludos a todos
Amigo, funciona con XAMPP instalado en Linux Ubuntu 16.04, en XAMPP trae defecto MariaDB. gracias y felicitaciones, un gran tema.
Buenos días.
Quería saber si existe alguna limitante para la toma de datos en MySQL (velocidad), ya que necesito tomar algunos datos con diferencia de unos 20ms entre ellos.
Muchas gracias.