Arduino - MySQL
Arduino puede recopilar datos de sensores y almacenarlos en la base de datos MySQL. Arduino también puede obtener datos (comandos) de la base de datos MySQL y controlar un LED, un motor, un actuador y un dispositivo.
En este tutorial, vamos a aprender:
- La mejor forma en que Arduino interactúa con la base de datos MySQL
- Cómo Arduino inserta datos en la base de datos MySQL
- Cómo Arduino actualiza datos en la base de datos MySQL
- Cómo Arduino obtiene datos de la base de datos MySQL

El tutorial proporciona el código de Arduino para dos casos:
- Arduino Uno R4 WiFi
- Arduino Uno/Mega con Ethernet Shield
Hardware Requerido
| 1 | × | Arduino UNO R4 WiFi | |
| 1 | × | Alternatively, DIYables STEM V4 IoT | |
| 1 | × | Cable USB Tipo-A a Tipo-C (para PC USB-A) | |
| 1 | × | Cable USB Tipo-C a Tipo-C (para PC USB-C) |
Alternatively if using Ethernet:
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Arduino - MySQL
Si no tienes mucho conocimiento de la arquitectura del sistema, dos términos: Base de datos MySQL y Servidor MySQL pueden entenderse como lo mismo. Encontrarás las diferencias más adelante cuando sepas mucho sobre la arquitectura del sistema.
Hay dos formas en las que Arduino puede interactuar con la base de datos MySQL:
- Arduino interactúa directamente con el servidor MySQL a través de una conexión MySQL (llamada vía directa)
- Arduino interactúa indirectamente con el servidor MySQL a través de una conexión HTTP (llamada vía indirecta)
Vamos a encontrar el mejor.
Arduino interactúa directamente con el servidor MySQL

Esto suena más sencillo, pero hay muchas desventajas:
- Esto permite que una cuenta de usuario de MySQL acceda de forma remota a la base de datos de MySQL ⇒ Esto es peligroso desde el punto de vista de seguridad, incluso si se concedieron privilegios limitados a la cuenta de usuario.
- Los datos DEBEN procesarse en Arduino y/o servidor MySQL ⇒ Esto aumenta la complejidad del código de Arduino y del script de MySQL. Especialmente, consume muchos recursos de Arduino (memoria y uso de CPU).
- El servidor MySQL puede devolver una gran cantidad de datos a Arduino en algunos casos ⇒ Esto puede hacer que Arduino se quede sin memoria.
- La mayoría de las bibliotecas de MySQL disponibles no admiten SSL/TLS. Los datos, incluyendo el nombre de usuario y la contraseña, se enviarán en texto plano ⇒ Otro problema de seguridad.
Arduino interactúa indirectamente con el servidor MySQL vía HTTP/HTTPS
Este enfoque indirecto soluciona todos los problemas que presenta el enfoque directo. Antes de ver cómo el enfoque indirecto supera las desventajas del enfoque directo, veamos primero cómo funciona.
Cómo funciona
- Paso 1: Arduino realiza una solicitud HTTP al servidor web
- Paso 2: El servidor web ejecuta un script PHP
- Paso 3: El script PHP obtiene los datos de la solicitud HTTP, procesa los datos y luego interactúa con la base de datos MySQL.
- Paso 4: El script PHP procesa el resultado y devuelve el resultado a Arduino a través de la respuesta HTTP

En este tutorial, el servidor web y el servidor MySQL se instalarán en la PC.
Parece complicado, pero no. Ahora veamos cómo el camino indirecto supera las desventajas del camino directo.
- Al instalar el servidor MySQL y el servidor HTTP en el mismo servidor físico, podemos limitar una cuenta de usuario de MySQL para que acceda SOLO a localhost. Además, el nombre de usuario y la contraseña de la cuenta de MySQL se almacenan en el servidor (paso 3); esto hace que el sistema sea más seguro.
- Los datos son procesados por un script PHP (paso 3 y paso 4). Esto reduce el trabajo y la complejidad para los servidores Arduino y MySQL. Procesar datos usando código PHP es mucho más fácil que el código de Arduino y el script de MySQL.
- El script PHP puede procesar los datos y enviar solo los datos necesarios al Arduino (Paso 4) para evitar que Arduino se quede sin memoria.
- La mayoría de las bibliotecas Ethernet/WiFi soportan TLS/SSL, lo que nos permite realizar solicitudes HTTPS. Al usar HTTPS, los datos están cifrados y se intercambian de forma segura a través de Internet.
En el paso 1, podemos usar otro nombre de usuario y contraseña para realizar la autenticación entre Arduino y el servidor web. Tenga en cuenta que el nombre de usuario y la contraseña HTTP deben ser diferentes de las credenciales de MySQL por motivos de seguridad.
Con esas ventajas, el resto de este tutorial mostrará cómo usar Arduino con MySQL mediante un enfoque indirecto.
Arduino - MySQL vía HTTP/HTTPS
Necesitamos realizar el siguiente paso:
- Instala el servidor MySQL, el servidor web y PHP en tu PC
- Habilita MySQL y el servidor web
- Crea una cuenta de usuario de MySQL
- Crea una base de datos MySQL
- Crea una tabla de MySQL
- Escribe uno o más archivos de script PHP
- Escribe código para Arduino
Ahora hagámoslo paso a paso.
1. Instalar el servidor MySQL, el servidor web y PHP en tu PC
Afortunadamente, el paquete XAMPP incluye todos estos. Solo necesitamos instalarlo una vez.
- Descarga XAMPP desde este enlace
- Instálalo.
Después de instalar, verás la carpeta C:\xampp\htdocs en tu PC. Aquí es donde colocas código PHP (ver más adelante).
2. Habilitar MySQL y servidor web
- Abra el Panel de Control de XAMPP
- Haga clic en el botón Inicio para habilitar MySQL y el servidor web (Vea la imagen a continuación)

3. Crear una cuenta de usuario de MySQL
Crearemos una cuenta de MySQL que solo pueda conectarse a la base de datos MySQL desde localhost.
- Incluso si se revelan el nombre de usuario y la contraseña, los atacantes aún no pueden acceder a su base de datos MySQL a menos que tomen el control de su PC.
- Debido a que PHP y MySQL están instalados en la misma PC, PHP puede usar este nombre de usuario y contraseña para conectarse a la base de datos MySQL.
Vamos a crear una cuenta de usuario de MySQL con el nombre de usuario Arduino y la contraseña ArduinoGetStarted.com:
- Abre el símbolo del sistema en tu PC. No lo cierres hasta el final del tutorial.
- Escribe el siguiente comando en el símbolo del sistema:
- Por defecto, MySQL tiene la cuenta root sin contraseña. Deberías añadir una contraseña
(p. ej. your-root-password) para la cuenta raíz escribiendo el siguiente comando en el Símbolo del sistema:
- Escribe el siguiente comando en el Símbolo del sistema:
- Escribe tu contraseña de root y presiona Enter
- Crear una cuenta de usuario de MySQL con el nombre de usuario Arduino y la contraseña ArduinoGetStarted.com copiando los siguientes comandos y pegándolos en el Símbolo del sistema:
Ahora has creado con éxito una cuenta de usuario de MySQL. Memoriza el nombre de usuario y la contraseña; se utilizarán en el script de PHP.
4. Crear una base de datos de MySQL
Vamos a crear una base de datos llamada db_arduino escribiendo el siguiente comando en el símbolo del sistema:
5. Crear una tabla de MySQL
Vamos a crear una tabla llamada tbl_temp copiando los comandos a continuación y pegándolos en el Símbolo del sistema:
6. Escribe uno o más archivos PHP
Crea un archivo PHP llamado insert_temp.php que obtenga la temperatura de la solicitud HTTP y la inserte en la base de datos.
- Coloca este archivo dentro de la carpeta C:\xampp\htdocs.
- Obtén la dirección IP de tu PC. Si no sabes cómo hacerlo, búscala en Google.
- Prueba el código PHP abriendo un navegador web (p. ej. Chrome) y accediendo a este enlace: http://192.168.0.26/insert_temp.php?temperature=27.5. Ten en cuenta que necesitas reemplazar la dirección IP anterior por la de tu PC.
- La salida en el navegador web.

- Compruebe si los datos están almacenados en la base de datos escribiendo el siguiente comando en el Símbolo del sistema:
Como puedes ver, la temperatura de 27.5 está almacenada en la base de datos. El siguiente paso es escribir código para Arduino que realice una solicitud HTTP similar a la de tu PC.
7. Escribir código de Arduino
Usaremos Arduino Uno y Escudo Ethernet o Arduino Uno R4 WiFi para la prueba
El código de Arduino que se muestra a continuación realiza una solicitud HTTP a tu PC para insertar una temperatura de 29,1 °C en la base de datos.
Código de Arduino para Arduino Uno R4 WiFi
Código de Arduino para Arduino Uno/Mega y Ethernet Shield
Pasos R\u00e1pidos
- Si está utilizando el Ethernet Shield, coloque el Ethernet Shield sobre el Arduino Uno.
- Conecte el cable Ethernet al Ethernet Shield.
- Conecte el Arduino Uno al PC mediante un cable USB.
- Modifique la dirección IP en el código para que coincida con la dirección IP de su PC.
- Compilar y subir el código al Arduino.
- Abra el Monitor Serial.
- El resultado en el Monitor Serial.
- Verifique si los datos están almacenados en la base de datos escribiendo el siguiente comando en el Símbolo del sistema:
Como puedes ver, la temperatura 29.1 está almacenada en la base de datos.
Cómo Arduino inserta, actualiza u obtiene datos desde y hacia la base de datos MySQL
En el ejemplo anterior, hemos aprendido a insertar datos en la base de datos MySQL. Para actualizar y obtener datos de la base de datos, es similar. Solo necesitas cambiar las consultas MySQL en el script PHP. Puedes aprender más en W3Schools
Uso avanzado
Para aumentar la seguridad
- Puedes modificar el código de Arduino para usar HTTPS en lugar de HTTP. Ver Arduino - HTTPS
- Puedes usar un nombre de usuario y una contraseña para realizar la autenticación entre Arduino y el servidor web. Ver Autenticación básica
※ Nota:
Para crear un sistema completo con el nivel de seguridad más alto, necesitamos hacer más (como prevenir inyecciones de MySQL, convertir HTTPS en una API REST, usar el formato JSON para los datos, ...). Sin embargo, este tutorial está dedicado a principiantes que quieren aprender Arduino. Lo hemos hecho lo más simple posible. Después de aprender este tutorial, los usuarios pueden ampliarlo.
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.