ESP8266 - MySQL
Este tutorial le enseña cómo usar el ESP8266 para insertar o actualizar datos en una base de datos MySQL, o leer los datos de la 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) |
ESP8266 - MySQL
Hay dos términos en MySQL que los principiantes suelen confundir: Base de datos de MySQL y servidor de MySQL. Son diferentes. Sin embargo, si eres principiante, puedes suponer que son lo mismo. Más tarde, encontrarás las diferencias en tu proceso de aprendizaje.
ESP8266 puede interactuar con la base de datos MySQL de dos maneras:
- Directamente: ESP8266 se conecta directamente al servidor MySQL y interactúa con él usando el protocolo MySQL
- Indirectamente: ESP8266 se conecta indirectamente al servidor MySQL a través de un servidor web usando el protocolo HTTP/HTTPS
¿Cuál es el mejor para el ESP8266? ¡Vamos a averiguarlo!
ESP8266 interactúa directamente con el servidor MySQL

Interactuar con MySQL directamente parece sencillo, pero hay muchas desventajas:
- Tenemos que conceder permisos de acceso remoto a una cuenta de usuario de MySQL ⇒ Esto es arriesgado desde el punto de vista de la seguridad, incluso si concedemos privilegios limitados a la cuenta de usuario.
- ESP8266 DEBE almacenar y enviar consultas MySQL al servidor MySQL ⇒ Necesita escribir mucho código para ESP8266, y también agotar los recursos de ESP8266 (uso de memoria y CPU).
- ESP8266 DEBE procesar una respuesta MySQL compleja (tamaño de datos muy grande en algunos casos) ⇒ Esto puede hacer que ESP8266 se quede sin memoria.
- El servidor MySQL debe procesar los datos sin procesar ⇒ aumenta la complejidad del script de MySQL.
- La mayoría de las bibliotecas de MySQL para ESP8266 no admiten SSL/TLS ⇒ Los datos y el nombre de usuario y la contraseña se envían sin cifrado ⇒ otro problema de seguridad.
ESP8266 interactúa indirectamente con el servidor MySQL mediante HTTP/HTTPS
Interactuar con MySQL indirectamente a través de HTTP/HTTPS soluciona todos los problemas del acceso directo.
Cómo funciona
- Step 1: ESP8266 incluye los datos para la solicitud HTTP/HTTPS y envía la solicitud al servidor web
- Step 2: El servidor web ejecuta un script PHP que maneja la solicitud de ESP826826
- Step 3: El script PHP extrae los datos de la solicitud HTTP, procesa los datos y luego interactúa con la base de datos MySQL.
- Step 4: El script PHP procesa el resultado y devuelve solo el resultado necesario al ESP8266 mediante la respuesta HTTP

Vamos a instalar el servidor MySQL, un servidor web y PHP en la PC. De hecho, podemos instalarlo en un servidor dedicado o en un servicio en la nube como AWS EC2.
A continuación se muestra cómo la vía indirecta resuelve los problemas de la vía directa.
- Podemos instalar el servidor HTTP y el servidor MySQL en el mismo servidor físico. Podemos restringir el acceso a una cuenta de usuario de MySQL (p. ej. acceso localhost ÚNICO) ⇒ seguro
- El nombre de usuario y la contraseña de la cuenta de MySQL se almacenan en el servidor ⇒ seguro.
- Los datos son procesados por un script PHP ⇒ Esto reduce la carga y la complejidad para ESP8266 y el servidor MySQL.
- El script PHP puede procesar los datos mucho más fácilmente que el código ESP8266 y el script MySQL ⇒ Simplificar el código ESP8266 y el script MySQL.
- El script PHP puede procesar los datos y enviar solo los datos necesarios a ESP8266 (Paso 4) para evitar que ESP8266 se quede sin memoria.
- ESP8266 puede realizar solicitudes HTTPS fácilmente ⇒ los datos están cifrados.
Tenga en cuenta que la autenticación entre ESP8266 y el servidor web debe ser independiente de la autenticación de MySQL. Por ejemplo, el nombre de usuario y la contraseña de HTTP deben ser diferentes de los de MySQL.
Debido a esas ventajas, este tutorial utilizará el método indirecto.
ESP8266 a MySQL mediante HTTP/HTTPS
A continuación se muestran los pasos que debemos realizar:
- Instalando el paquete XAMPP que incluye el servidor MySQL, el servidor web y PHP en tu PC
- Creando una cuenta de usuario de MySQL
- Creando una base de datos MySQL
- Creando una tabla MySQL
- Escribiendo uno o más archivos de script PHP
- Escribiendo código para ESP8266
1. Instalación del servidor MySQL, del servidor web y de PHP en tu PC
- Descarga e instala XAMPP desde este enlace. Después de la instalación, verifica la carpeta C:\xampp\htdocs en tu PC. Aquí es donde colocas código PHP (ver más adelante).
- Abre el Panel de Control de XAMPP
- Haz clic en los botones Iniciar para habilitar MySQL y el servidor web (como se muestra en la imagen de abajo)

2. Creación de una cuenta de usuario de MySQL
Crearemos una cuenta de MySQL con permisos de acceso solo desde localhost.
- Incluso si los atacantes conocen el nombre de usuario y la contraseña, no pueden acceder a su base de datos MySQL a menos que tomen el control de su PC.
- Estas credenciales (nombre de usuario y contraseña) serán utilizadas por PHP para conectarse a la base de datos MySQL.
Este tutorial crea una cuenta de usuario de MySQL con un nombre de usuario y una contraseña que son ESP8266 y newbiely.com, respectivamente:
- 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. Se recomienda encarecidamente establecer la contraseña para la cuenta root (p. ej. YOUR_ROOT_PASSWORD) por motivos de seguridad. Escriba el siguiente comando en el símbolo del sistema:
- Escriba el siguiente comando en el Símbolo del sistema para iniciar sesión en el servidor MySQL:
- Escribe TU_ROOT_PASSWORD y pulsa Enter
- Creamos una cuenta de usuario de MySQL con el nombre de usuario ESP8266 y la contraseña newbiely.com, respectivamente, copiando los comandos siguientes y pegándolos en el símbolo del sistema:
Has creado con éxito una cuenta de usuario de MySQL. Escribe el nombre de usuario y la contraseña. Se utilizará en el script de PHP.
3. Creación de una base de datos MySQL
Crea una base de datos db_esp8266 escribiendo el siguiente comando en el Símbolo del sistema:
4. Creación de una tabla de MySQL
Crea una tabla tbl_temp copiando los comandos siguientes y pégala en el Símbolo del sistema:
6. Escribir archivos de scripts PHP
Crea un insert_temp.php usando cualquier editor de texto (p. ej. Notepad/Notepad++). Escribiremos el script en este archivo para extraer el valor de la temperatura de la solicitud HTTP e insertar ese valor 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 accede a este enlace: http://192.168.0.19/insert_temp.php?temperature=26.2. Ten en cuenta que debes reemplazar la dirección IP anterior por la de tu PC.
- El navegador web se muestra a continuación:

- 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 de 26.2 está almacenada en la base de datos. El siguiente paso es escribir código para ESP8266 que realice una solicitud HTTP al servidor web en tu PC.
7. Escribe código ESP8266
El código ESP8266 de abajo realiza una petición HTTP a tu PC para insertar una temperatura de 30,5 °C en la base de datos.
Pasos R\u00e1pidos
- Si es la primera vez que usas ESP8266, consulta cómo configurar el entorno para ESP8266 en Arduino IDE.
- Realiza el cableado como en la imagen de arriba.
- Conecta la placa ESP8266 a tu PC mediante un cable micro USB
- Cambia la dirección IP en el código por la dirección IP de tu PC
- Compila y sube el código a ESP8266
- Abre el Monitor Serial en el IDE de Arduino
- El resultado en el Monitor Serial
- Verifique si los datos están almacenados en la base de datos utilizando el siguiente comando en la Línea de comandos:
Como se puede ver, la temperatura de 30,5 está almacenada en la base de datos.
Cómo ESP8266 inserta, actualiza o obtiene datos desde y hacia la base de datos MySQL
El ejemplo anterior muestra cómo insertar datos en la base de datos MySQL. Es similar para actualizar y leer datos de la base de datos. Solo necesitas modificar la consulta de MySQL en el código PHP. Puedes aprender más en W3Schools.com
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.