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.
En Panama Hitek ya se ha escrito bastante sobre MySQL:
- Lo que no se debe hacer: palabras reservadas en MySQL
- Creación de bases de datos MySQL con Xampp
- Crear formulario de registro con PHP y MySQL
- Los 7 pasos a seguir para el manejo de MySQL con Java
- Comunicar Java con base de datos MySQL
En esta ocasión, sin embargo, vamos a publicar cómo lograr la conexión entre un Arduino y MySQL. 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 analógicos. 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 embebida en nuestra placa.
El Conector fue desarrollado por Dr. Charles Bell, Senior Software Developer, MySQL Utilities Team Lead.
Detalles sobre la licencia: 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
- Servidor Msql instalado (windows/Linux/Mac) (Para Windows ver: Creación de bases de datos MySQL con Xampp)
- MySQL Conector/Arduino
- Arduino Uno/ Mega
Primer Paso Instalación de MySQL
Iniciamos con la instalación de MySQ. En este paso me enfocaré en la instalación dentro de sistema operativo Linux, enfocado en distribución derivada de Debian, Raspbian, basándome en Software/Hardware open source.
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
1 |
sudo apt-get update |
- Actualizamos los paquetes
1 |
sudo apt-get upgrade |
- Ahora instalamos Apache
1 |
sudo apt-get install apache |
- Instalamos MySQL
1 |
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
1 |
sudo mysql_install_db |
- Instalamos PHP
1 |
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:
1 |
sudo nano /var/www/info.php |
- Se abrirá el editor de texto
"nano".
Todo sale en blanco ahora escribimos lo siguiente
1 2 3 |
<? Php phpinfo (); ?> |
- Cerramos con la tecla
"ctrl + x"
aceptamos con"Y"
y le 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.
Ahora instalamos el administrador de base datos phpMyAdmin
que nos permite tener un entrono visual para el manejo de nuestra base de datos.
1 |
sudo apt-get install phpmyadmin apache2-utils |
- Nos preguntara que servidor web estamos utilizando elegimos
Apache2.
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
1 |
sudo nano /etc/apache2/apache2.conf |
- Agregamos PHPMyAdmin al archivo de configuracion apache2.conf.
1 |
include /etc/phpmyadmin/apache.conf |
- Reiniciamos el servidor Apache
1 |
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".
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 o 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 haga lo mismo.
Iniciamos con la Creación 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 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, lo explicare utilizando la interfase web de PHPMyAdmin.
Ingresamos en la opción Users.
Podemos notar que el usuario root esta creado repetidas veces. En la columna Host de usuarios el usuario root mantiene lo siguiente: al conectarse a la base de datos se establece conexión utilizando el nombre de usuario y la dirección 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 sesion 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:
- Con opción any host
- Con opción local
- Con opción Use text field e ingresamos el IP de nuestro Arduino.
Atención:
Esta parte es importante y me dio problemas con el servidor LAMP. El servidor WAMP me funciono sin complicaciones.
Debemos probar 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:
1 |
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.
Llo importante es poder ingresar por medio del IP de nuestra tarjeta de red ya sea la ethernet o la inalámbrica. Si no podemos acceder desde el IP, verificamos el acceso por localhost.
Podemos verificar el IP de nuestro PC escribiendo en consola ipconfig. 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 modificar el archivo de configuración.
Observemos la imagen donde trato de ingresar por medio del IP del servidor y me devuelve un error. Luego acceso al archivo de configuración, realizo los cambios y listo! Se 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 raíz principal .
Luego con «cd etc/mysql/» ingreso dentro del archivo MySQL donde esta el archivo de configuración que debemos editar. Para ello:
1 |
sudo nano my.cnf |
En bind-address ingresamos el IP de nuestra interfaz de red, ya sea la física o la inalambrica.
Luego detenemos el servidor MySQL
1 |
sudo service mysql stop |
Lo iniciamos con
1 |
sudo service mysql start |
O bien solo lo reiniciamos (por experiencia es mejor detener e iniciar).
1 |
sudo service mysql restart |
Ahora nos conectamos con el IP de la interfaz.
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* 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"); }else Serial.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 devuelve un error de acceso al puerto el cual se corrige cambiando los atributos de acceso al puerto desde la consola de comando.
Digitamos
1 |
sudo chmod 777 /dev/ttyACM0 |
Debe salir el mensaje de conexión. Cabe mencionar que existen limitantes por lo que se recomienda leer el manual adjunto al Conector MySQL/Arduino. De tener algún problema o duda estamos para apoyarles.
Saludos
Javier A. Brathwaite V.
buenas días amig@, quisiera que me ayudaran, estoy haciendo un prototipo de SAE y me toco el area de telemetria , ya tengo montado el arduino con mi esp8266 ya hice pruebas con comando AT, me salio muy bien el pero el problema es que que estoy utilizando el programa intouch quiero mandar aunque sea un dato para que se muestre en mi intouch, he probado con el protocolo modbus y no me funciono. en este caso que podria hacer gracias.
Buenas noches, compañero estoy iniciando un nuevo proyecto con arduino y java; pero anteriormente ya he trabajado con comunicación serial y desarrolle un proyecto que funciono perfectamente. En este nuevo caso quiero hacer la comunicación por ethernet pero tengo unas dudas y me gustaría poder despejarlas con su ayuda ya que es notable que tienen experiecia en estos temas.
Qué método usará para conectarse a ethernet?
No lo hemos utilizado
Un saludo, me gustaria saber cuales librerias son necesarias a parte de la de mysql_connector y donde me las puedo bajar, por favor aiiuuudaaa!!!!!
http://launchpad.net/mysql-arduino
Buen día, antes que nada gracias por el aporte, quisiera saber si ya cuenta con el método de instalación y puesta en marcha en windows?? y donde subirá esa información. Saludos
en windows es mas facil solo debes descargar e instalar WAMP server
hola y para winows como sería la instalación?
para windows descarga wamp o xamp y pasa a la seccion de registro de usuario desde la web por phpmyadmin
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 Arduino Muestra los valores, que cada que vuelve a cargar la pagina se actualizan o cambian. HELP si me pueden ayudar por favor. Gracias
Escribe en el foro y postea tu código
No te compliques , deja de usar PHP y graba de manera directa.
hola buen dia como seria la coneccion en windows es que tengo que realizar un proyecto y ya namas me falta conectar el arduino con la base de datos del xampp
estoy utilizando un arduino uno con ethernet y rfid y la base de datos en xampp
Hola, estoy haciendo todo como lo indica, pero el mysql lo tengo instalado wn windows, he creado la BBDD y la tabla, paso el codigo al IDE arduino, lo compilo y me da el mismo error, en esta linea,
IPAddress server_addr(192.168.0.169); /* configuración de MySQL Conector/arduino */Connector my_conn; // referencia de conexion del Conector/arduino
esa IP es la que tengo puesta en el etherber shiel, no como configurar el conecta arduino para colocarle la IP, necesit su ayuda por favor, es un proyecto de clase.
Posiblemente necesites crear un script en PHP para gestionar la comunicación entre tu Arduino y la base de datos. PHP se encarga de la parte difícil y Arduino solo envía y recibe texto
Este es el error que mes da.
Arduino:1.8.10 Hourly Build 2019/07/23 10:33 (Windows 10), Tarjeta:»Arduino Ethernet»
prueba:18:86: error: ‘Connector’ does not name a type
IPAddress server_addr(192, 168, 0, 50);/* configuración de MySQL Conector/arduino */Connector my_conn; // referencia de conexion del Conector/arduino
^~~~~~~~~
C:\Users\Richard\Documents\prueba\prueba.ino: In function ‘void setup()’:
prueba:27:5: error: ‘my_conn’ was not declared in this scope
if (my_conn.mysql_connect(server_addr, 3306, user, password)){
^~~~~~~
exit status 1
‘Connector’ does not name a type
Aparentemente no has creado el objeto my_conn. Arriba te hace falta una declaración
buenas amigos disculpen , quiero informarles que esta publicacion requiere actualizacion debido a que la libreria ha sido modificada y en su ultima version cambia su metodo de uso en los proyectos
adjunto un link con un codigo que funciona con la libreira actual . este codigo fue un apollo al compañero Felipe el año pasado
https://drive.google.com/drive/folders/1DHYn6sjoCt9e8npAKGNzsYS6S8-IBT4Z?usp=sharing
Hola, utilizando la librería MySQL connector del Dr. Bell es posible conectar sin interfaces Arduino con la base de datos, alguien ha realizado algún tipo de ejemplo interactivo con Arduino y SQL?
Buen día, me podrian ayudar con este procedimiento de conexion para windows??