Arduino Nano - MySQL
El Arduino Nano puede recopilar datos de sensores y almacenarlos en una base de datos MySQL. También puede recuperar datos (como comandos) de la base de datos MySQL para controlar dispositivos como LEDs, motores y actuadores.
Este tutorial le mostrará cómo usar el Arduino Nano y el módulo Ethernet para interactuar con la base de datos MySQL. Específicamente, cubriremos:
- La mejor manera de que Arduino Nano se comunique con una base de datos MySQL
- Cómo programar Arduino Nano para insertar datos en una base de datos MySQL
- Cómo programar Arduino Nano para actualizar datos en una base de datos MySQL
- Cómo programar Arduino Nano para recuperar datos de una base de datos MySQL

Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Arduino Nano - MySQL
Si eres nuevo en la arquitectura de sistemas, está bien pensar en la base de datos MySQL y en el servidor MySQL como si fueran lo mismo por ahora. A medida que adquieras más conocimientos, entenderás las diferencias entre ellos.
Existen dos métodos para que Arduino Nano se comunique con una base de datos MySQL:
- Conectarse directamente al servidor MySQL usando una conexión MySQL (el enfoque directo)
- Comunicarse con el servidor MySQL de forma indirecta a través de una conexión HTTP (el enfoque indirecto)
Vamos a explorar la mejor opción.
Arduino Nano interactúa directamente con el Servidor MySQL

Esto podría parecer más sencillo, pero tiene varios inconvenientes:
- Permitir que una cuenta de usuario de MySQL acceda de forma remota a la base de datos MySQL plantea riesgos de seguridad, incluso si la cuenta tiene privilegios limitados.
- Procesar datos en el Arduino Nano y/o en el servidor MySQL aumenta la complejidad tanto del código del Arduino Nano como de los scripts de MySQL, y consume muchos de los recursos del Arduino Nano (memoria y CPU).
- En algunos casos, el servidor MySQL puede devolver una gran cantidad de datos al Arduino Nano, lo que podría hacer que el Nano se quede sin memoria.
- La mayoría de las bibliotecas de MySQL disponibles no admiten SSL/TLS, lo que significa que datos sensibles, como nombres de usuario y contraseñas, se enviarán en texto claro, creando un riesgo de seguridad adicional.
Arduino Nano interactúa indirectamente con un servidor MySQL a través de HTTP/HTTPS
El enfoque indirecto aborda todos los problemas que tiene el método directo. Antes de profundizar en cómo supera las desventajas del método directo, veamos primero cómo funciona.
Cómo funciona
- Paso 1: Arduino Nano envía una solicitud HTTP al servidor web.
- Paso 2: El servidor web ejecuta un script PHP.
- Paso 3: El script PHP obtiene datos de la solicitud HTTP, los procesa e interactúa con la base de datos MySQL.
- Paso 4: El script PHP procesa el resultado y lo envía de vuelta al Arduino Nano en una respuesta HTTP.

En este tutorial, tanto el servidor web como el servidor de MySQL se instalarán en una PC.
Puede que parezca complicado, pero no lo es. Así es como el método indirecto resuelve los problemas del enfoque directo:
- Al instalar MySQL y servidores HTTP en la misma máquina, podemos restringir la cuenta de usuario de MySQL para que acceda únicamente a localhost. Además, el nombre de usuario y la contraseña de MySQL se almacenan de forma segura en el servidor (paso 3), lo que mejora la seguridad.
- Los datos se procesan mediante un script PHP (pasos 3 y 4), reduciendo la carga de trabajo y la complejidad tanto para Arduino Nano como para el servidor MySQL. Procesar datos con código PHP es mucho más fácil que usar código de Arduino Nano o scripts de MySQL.
- El script PHP puede filtrar los datos y enviar solo lo necesario al Arduino Nano (paso 4), evitando la sobrecarga de memoria.
- La mayoría de las bibliotecas Ethernet/WiFi soportan TLS/SSL, lo que nos permite realizar solicitudes HTTPS. Usar HTTPS garantiza que los datos estén cifrados y se intercambien de forma segura en línea.
En el paso 1, podemos usar un nombre de usuario y una contraseña diferentes para la autenticación entre Arduino Nano y el servidor web. Por razones de seguridad, el nombre de usuario y la contraseña HTTP no deben ser las mismas que las credenciales de MySQL.
El siguiente tutorial mostrará cómo usar el método indirecto con Arduino Nano y MySQL, explicando sus numerosas ventajas.
Diagrama de cableado entre Arduino Nano y el módulo Ethernet W5500

This image is created using Fritzing. Click to enlarge image
Ver La mejor forma de alimentar Arduino Nano y otros componentes.
Arduino Nano - MySQL vía HTTP/HTTPS
Aquí están los pasos que debemos seguir:
- Instala el servidor MySQL, el servidor web y PHP en tu PC.
- Activa el servidor MySQL y el servidor web.
- Crea una cuenta de usuario de MySQL.
- Configura una base de datos MySQL.
- Crea una tabla MySQL.
- Escribe uno o más archivos de script PHP.
- Escribe el código para Arduino Nano.
Lo haremos paso a paso. Vamos a realizar el proceso poco a poco.
1. Instalar el servidor MySQL, el servidor web y PHP en tu PC
Afortunadamente, el paquete XAMPP incluye todos estos.
Solo hay que instalarlo una vez:
- Obtén XAMPP desde este enlace
- Ejecuta la instalación.
Una vez que haya instalado, observará la carpeta C:\xampp\htdocs en su ordenador. Este es el lugar donde debe colocar su código PHP (como se discutirá más adelante).
2. Habilitar MySQL y el servidor web
- Abre el Panel de Control de XAMPP.
- Presiona el botón Iniciar para activar MySQL y el servidor web. (Ver 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 el nombre de usuario y la contraseña quedan expuestos, los atacantes no podrán acceder a la base de datos MySQL a menos que tengan control de la computadora.
- Como PHP y MySQL están instalados en la misma PC, PHP puede usar este nombre de usuario y esta 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 computadora. Mantén esta ventana abierta hasta que termine el tutorial.
- Escribe el siguiente comando en el símbolo del sistema:
- Por defecto, MySQL tiene una cuenta root que no tiene contraseña.
- Se recomienda añadirle una contraseña.
Introduce tu-contraseña-de-root para la cuenta root escribiendo este comando en el Símbolo del sistema:
- Escribe este comando en el Símbolo del sistema:
- Introduzca su contraseña de root y pulse la tecla Intro.
- Cree una cuenta de usuario de MySQL con el nombre de usuario Arduino y la contraseña ArduinoGetStarted.com copiando los comandos a continuación y pegándolos en el Símbolo del sistema:
Ahora has creado una cuenta de usuario de MySQL. Recuerda el nombre de usuario y la contraseña, ya que serán necesarios para el script de PHP.
4. Crear una base de datos MySQL
Vamos a generar una base de datos titulada db_arduino ingresando el siguiente comando en el Símbolo del sistema:
5. Crear una tabla en MySQL
Vamos a crear una tabla llamada tbl_temp copiando los comandos que se muestran a continuación y pegándolos en el Símbolo del sistema:
6. Escribe uno o más archivos PHP
Crea un archivo PHP. Nómbralo insert_temp.php. Recupera la temperatura de la solicitud HTTP. Inserta la temperatura en la base de datos.
- Coloca este archivo en el directorio C:\xampp\htdocs.
- Averigua la dirección IP de tu PC. Si no sabes cómo hacerlo, búscala en Google.
- Para probar el código PHP, abre un navegador web (por ejemplo, Chrome) y ve a este enlace: http://192.168.0.26/insert_temp.php?temperature=27.5. Recuerda sustituir la dirección IP por la tuya.
- El navegador debería mostrar "La temperatura 27.5 se ha guardado".

- Verifique si los datos están almacenados en la base de datos ingresando el siguiente comando en el Símbolo del sistema:
Es evidente que la temperatura de 27,5 se almacena en la base de datos. La siguiente acción es componer un código para Arduino Nano que genere una solicitud HTTP similar a la de tu PC.
7. Escribe código para Arduino Nano
Utilizaremos el Arduino Nano y Ethernet Shield para la prueba.
El código de Arduino Nano a continuación envía una solicitud HTTP a tu PC, con una temperatura de 29.1°C, para ser insertada en la base de datos.
Pasos R\u00e1pidos
- Conecte el Arduino Nano al módulo Ethernet de acuerdo con el diagrama de cableado anterior.
- Conecte un cable Ethernet al módulo Ethernet.
- Conecte el Arduino Nano a un PC mediante un cable USB.
- Abra el IDE de Arduino en su PC.
- Seleccione la placa Arduino Nano y el puerto COM correspondiente
- Haga clic en el icono Bibliotecas en la barra izquierda del IDE de Arduino.
- Busque “Ethernet”, luego encuentre la biblioteca Ethernet por Various
- Haga clic en el botón Instalar para instalar la biblioteca Ethernet.

- Modifica el código para reflejar la dirección IP del PC.
- Compila y carga el código al Arduino Nano.
- Abre el Monitor Serial.
- La salida del Monitor Serial mostrará la dirección IP del Ethernet Shield.
- Verifique si los datos están almacenados en la base de datos ingresando el siguiente comando en el Símbolo del sistema:
Es evidente que la base de datos contiene la temperatura de 29,1.
Cómo insertar, actualizar u obtener datos con Arduino Nano en la base de datos MySQL
En el ejemplo anterior, aprendimos cómo insertar datos en una base de datos MySQL. Actualizar y recuperar datos de la base de datos funciona de manera similar. Solo necesitas ajustar las consultas MySQL en el script PHP. Para obtener más información, puedes visitar W3Schools.
※ Nota:
Para construir un sistema altamente seguro, tendríamos que tomar medidas adicionales (por ejemplo, prevenir la inyección de MySQL, convertir HTTPS a una API REST, usar el formato JSON para los datos, etc.). Sin embargo, este tutorial está diseñado para que los principiantes aprendan con Arduino Nano, así que lo hemos mantenido lo más simple posible. Una vez que completes este tutorial, podrás ampliarlo para agregar características más avanzadas.
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.