ESP32 - MySQL
Hay dos términos en MySQL que los principiantes suelen confundir: base de
datos MySQL y servidor MySQL . Ellos son diferentes. Sin embargo, si eres un
principiante, puedes asumir que son iguales. Más tarde, encontrará las
diferencias en su proceso de aprendizaje.
ESP32 puede interactuar con la base de datos MySQL de dos formas:
• Directamente : ESP32 se conecta directamente al servidor MySQL e
interactúa con el servidor MySQL usando el protocolo MySQL
• Indirectamente : ESP32 se conecta indirectamente al servidor MySQL
a través de un servidor web mediante el protocolo HTTP / HTTPS.
¿Cuál es el mejor para ESP32? ¡Vamos a averiguar!
ESP32 interactúa directamente con MySQL Server
Interactuar con MySQL directamente parece ser simple, pero hay muchos
inconvenientes:
• Tenemos que otorgar permisos de acceso remoto a una cuenta de
usuario de MySQL ⇒ Esto es arriesgado en el aspecto de seguridad,
incluso si otorgamos privilegios limitados a la cuenta de usuario.
• ESP32 DEBE almacenar y enviar consultas MySQL al servidor MySQL ⇒
Necesita escribir mucho código ESP32 y también agotar los recursos
ESP32 (uso de memoria y CPU).
• ESP32 DEBE procesar una respuesta MySQL compleja (tamaño de
datos muy grande en algunos casos) ⇒ Esto puede hacer que ESP32
se quede sin memoria
• El servidor MySQL debe procesar los datos sin procesar ⇒ aumenta la
complejidad del script MySQL.
• La mayoría de las bibliotecas MySQL para ESP32 no admiten SSL / TLS
⇒ Los datos y el nombre de usuario / contraseña se envían sin cifrado
⇒ otro problema de seguridad.
ESP32 interactúa indirectamente con MySQL Server a través de HTTP / HTTPS
Interactuar con MySQL indirectamente a través de HTTP / HTTPS resuelve
todos los problemas del acceso directo.
Cómo funciona
• Paso 1: ESP32 incluye los datos para la solicitud HTTP / HTTPS y envía la
solicitud al servidor web
• Paso 2: el servidor web ejecuta un script PHP que maneja la solicitud
de ESP32
• Paso 3: el script PHP extrae 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 solo el resultado
necesario a ESP32 a través de la respuesta HTTP
Vamos a instalar el servidor MySQL, el servidor web y PHP en la PC. De hecho,
podemos instalarlo en un servidor dedicado o 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 dar un límite de acceso a una cuenta de
usuario de MySQL (por ejemplo, acceso a localhost SOLAMENTE) ⇒
seguro
• El nombre de usuario / contraseña de la cuenta MySQL se almacena
en el servidor ⇒ seguro.
• Los datos se procesan mediante un script PHP ⇒ Esto reduce la carga
y la complejidad para ESP32 y el servidor MySQL.
• El script PHP puede procesar los datos mucho más fácilmente que el
código ESP32 y el script MySQL ⇒ Simplifique el código ESP32 y el script
MySQL
• El script PHP puede procesar los datos y enviar solo los datos
necesarios a ESP32 (paso 4) para evitar que ESP32 se quede sin
memoria.
• ESP32 puede realizar solicitudes HTTPS fácilmente ⇒ los datos están
encriptados.
Tenga en cuenta que la autenticación entre ESP32 y el servidor web debe
ser independiente de la autenticación MySQL. Por ejemplo, el nombre de
usuario / contraseña HTTP debe ser diferente del nombre de usuario /
contraseña de MySQL.
Debido a esas ventajas, este tutorial se utilizará de forma indirecta.
ESP32 a MySQL a través de HTTP / HTTPS
Los siguientes son pasos que debemos seguir:
• Instalación del paquete XAMPP que incluye servidor MySQL, servidor
web y PHP en su PC
• Crear una cuenta de usuario de MySQL
• Creando una base de datos MySQL
• Creando una tabla MySQL
• Escribir uno o más archivos de script PHP
• Escribir código ESP32
1. Instalar el servidor MySQL, el servidor web y PHP en su PC
• Descargue e instale el XAMPP desde este enlace . Después de la
instalación, verifique la carpeta C: \ xampp \ htdocs en su PC. Aquí
es donde pones el código PHP (ver más adelante).
• Abra el panel de control de XAMPP
• Haga clic en los botones de Inicio 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 MySQL con permisos de acceso localhost
únicamente.
• Incluso si los atacantes conocen el nombre de usuario / contraseña,
no pueden acceder a su base de datos MySQL a menos que tomen el
control de su PC.
• PHP utilizará este nombre de usuario / contraseña para conectarse a
la base de datos MySQL.
Este tutorial crea una cuenta de usuario de MySQL con nombre de usuario
y contraseña ESP32 y [Link] , respectivamente:
• Abra el símbolo del sistema en su PC. No lo cierre hasta el final del
tutorial.
• Escriba el siguiente comando en el símbolo del sistema:
cd C: \ xampp \ mysql \ bin
Símbolo del sistema
C: \ Usuarios \ SU_USUARIO> cd C: \ xampp \ mysql \ bin C: \
xampp \ mysql \ bin>
• Por defecto, MySQL tiene la cuenta raíz sin contraseña. Se recomienda
encarecidamente establecer la contraseña para la cuenta raíz (por
ejemplo, YOUR_ROOT_PASSWORD ) por motivos de
seguridad. Escriba el siguiente comando en el símbolo del sistema:
mysqladmin -u contraseña de root YOUR_ROOT_PASSWORD
Símbolo del sistema
C: \ xampp \ mysql \ bin> mysqladmin -u contraseña de root
YOUR_ROOT_PASSWORD C: \ xampp \ mysql \ bin>
• Escriba el siguiente comando en el símbolo del sistema para iniciar
sesión en el servidor MySQL:
[Link] -u root -p
• Escriba YOUR_ROOT_PASSWORD y presione Entrar
Símbolo del sistema
C: \ xampp \ mysql \ bin> [Link] -u root -p Ingrese la
contraseña: ****************** Bienvenido al monitor MariaDB.
Los comandos terminan con; o \ g. Su identificación de conexión
MariaDB es 9 Versión del servidor: 10.4.6-MariaDB distribución
binaria [Link] Copyright (c) 2000, 2018, Oracle, MariaDB
Corporation Ab y otros. Escriba 'ayuda'; o '\ h' para obtener
ayuda. Escriba '\ c' para borrar la declaración de entrada
actual. MariaDB [(ninguno)]>
• Creemos una cuenta de usuario de MySQL con el nombre de usuario
y la contraseña son ESP32 y [Link] , respectivamente,
haciendo frente a los siguientes comandos y pegándolos en el
símbolo del sistema:
CREAR USUARIO 'ESP32' @ 'localhost' IDENTIFICADO POR
'[Link]'; OTORGAR TODOS LOS PRIVILEGIOS EN *. * A 'ESP32'
@ 'localhost' CON OPCIÓN DE OTORGAMIENTO; PRIVILEGIOS DE FLUSH;
Símbolo del sistema
MariaDB [(ninguno)]> CREAR USUARIO 'ESP32' @ 'localhost'
IDENTIFICADO POR '[Link]'; Consulta OK, 0 filas afectadas
(0.005 seg) MariaDB [(ninguna)]> OTORGAR TODOS LOS PRIVILEGIOS
EN *. * A 'ESP32' @ 'localhost' CON OPCIÓN DE GRANT; Consulta
OK, 0 filas afectadas (0.005 seg) MariaDB [(ninguna)]> DESCARGAR
PRIVILEGIOS; Consulta OK, 0 filas afectadas (0,001 s) MariaDB
[(ninguna)]>
Ha creado una cuenta de usuario de MySQL correctamente. Anote el
nombre de usuario / contraseña. Se utilizará en el script PHP.
3. Creando una base de datos MySQL
Cree una base de datos db_esp32 escribiendo el siguiente comando en el
símbolo del sistema:
CREAR BASE DE DATOS db_esp32 CONJUNTO DE CARACTERES = 'utf8'
COLLATE = 'utf8_general_ci';
Símbolo del sistema
MariaDB [(ninguno)]> CREAR BASE DE DATOS db_esp32 CONJUNTO DE
CARACTERES = 'utf8' COLLATE = 'utf8_general_ci'; Consulta
correcta, 1 fila afectada (0,003 s) MariaDB [(ninguna)]>
4. Creando una tabla MySQL
Cree una tabla tbl_temp haciendo frente a los siguientes comandos y
péguela en el símbolo del sistema:
USE db_esp32; CREAR TABLA tbl_temp (temp_id INT UNSIGNED NOT
NULL AUTO_INCREMENT, temp_value FLOAT DEFAULT 0.00, PRIMARY KEY
(temp_id));
Símbolo del sistema
MariaDB [(ninguno)]> USE db_esp32; Base de datos cambiada
MariaDB [db_esp32]> MariaDB [db_esp32]> CREAR TABLA tbl_temp (-
> temp_id INT SIN FIRMAR NO NULL AUTO_INCREMENT, -> temp_value
FLOAT DEFAULT 0.00, -> CLAVE PRIMARIA (temp_id) ->); Consulta
OK, 0 filas afectadas (0.044 s) MariaDB [db_esp32]>
6. Escriba archivos de script PHP
Cree un insert_temp.php utilizando cualquier editor de texto (por
ejemplo, Bloc de notas / Bloc de notas ++). Escribiremos el script en este
archivo para extraer el valor de temperatura de la solicitud HTTP e
insertaremos el valor de temperatura en la base de datos.
<? php
if (isset ($ _ GET [ "temperatura" ])) {
$ temperatura = $ _GET [ "temperatura" ]; // obtener el valor
de temperatura de HTTP GET
$ servername = "localhost" ;
$ nombre de usuario = "ESP32" ;
$ contraseña = "[Link]" ;
$ nombre_base_datos = "db_esp32" ;
// Crear una conexión MySQL desde PHP al servidor MySQL
$ connection = new mysqli ($ servername, $ username, $
password, $ database_name);
// Verifique la conexión si ($ conexión-> connect_error) {
die ( "Error de conexión MySQL:" . $ Conexión-> connect_error);
}
$ sql = "INSERT INTO tbl_temp (temp_value) VALUES ($
temperatura)" ;
if ($ conexión-> consulta ($ sql) === VERDADERO) {
echo "Nuevo registro creado con éxito" ;
} else {
echo "Error:" . $ sql. "=>" . $ conexión-> error ;
}
$ conexión-> cerrar ();
} else {
echo "la temperatura no está configurada en la solicitud
HTTP" ;
}
?>
• Poner este archivo dentro de C: xampp htdocs \ \ carpeta
• Obtenga la dirección IP de su PC. Si no sabe cómo, búsquelo en
Google.
• Pruebe el código PHP abriendo un navegador web (por ejemplo,
Chrome) y acceda a este
enlace: [Link] . Teng
a en cuenta que debe reemplazar la dirección IP anterior con la
dirección de su 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:
SELECCIONAR * de tbl_temp;
Símbolo del sistema
MariaDB [db_esp32]> SELECCIONAR * de tbl_temp; + --------- + -
----------- + | temp_id | temp_value | + --------- + ---------
--- + | 1 | 26,2 | + --------- + ------------ + 1 fila en el
conjunto (0,001 seg) MariaDB [db_esp32]>
Como puede ver, la temperatura de 26,2 se almacena en la base de
datos. El siguiente paso es escribir el código ESP32 que realiza una solicitud
HTTP al servidor web de su PC.
7. Escribe el código ESP32
El siguiente código ESP32 hace HTTP a su PC para insertar una temperatura
de 30.5 ° C en la base de datos
/ *
* Este código ESP32 es creado por [Link]
*
* Este código ESP32 es de dominio público
*
* Para más detalles (instrucciones y diagrama de cableado),
visite [Link]
* /
# incluye < WiFi .h>
# incluye <HTTPClient.h>
const char WIFI_SSID [] = "YOUR_WIFI_SSID" ;
const char WIFI_PASSWORD [] = "YOUR_WIFI_PASSWORD" ;
Cadena HOST_NAME =
Cadena HOST_NAME =
Cadena HOST_NAME =Cadena HOST_NAME =tring HOST_NAME = ring
HOST_NAME = ing HOST_NAME = ng HOST_NAME = g HOST_NAME =
HOST_NAME = HOST_NAME = OST_NAME = ST_NAME = T_NAME = _NAME =
NOMBRE = AME = " ME = " h E = "ht = " htt = "http " http:
//[Link]"; // cambia a la dirección IP de tu PC
String PATH_NAME = "/insert_temp.php" ;
String queryString = "? Temperature = 30.5" ;
void setup () {
Serial . comenzar (9600);
WiFi . comenzar (WIFI_SSID, WIFI_PASSWORD);
Serial . println ( "Conectando" ); while ( WiFi . status ()! =
WL_CONNECTED) { retraso (500); Serial . imprimir ( "." ); }
Serial . println ( "" );
Serial . imprimir ( "Conectado a la red WiFi con dirección IP:"
); Serial . println ( WiFi . localIP ()); HTTPClient http;
http. comenzar (HOST_NAME + PATH_NAME + queryString); // HTTP
int httpCode = [Link] ();
// httpCode será negativo en
caso de error si (httpCode> 0) { // archivo encontrado en el
servidor if (httpCode == HTTP_CODE_OK) { String payload =
[Link] (); Serial . println (carga útil); } else {
// Se ha enviado el encabezado HTTP y se ha manejado el
encabezado de respuesta del servidor Serial .printf ( "[HTTP]
GET ... código:% d \ n" , httpCode); } } else { Serial
.printf ( "[HTTP] GET ... falló, error:% s \ n" ,
[Link] (httpCode) .c_str ()); }
http. fin ();
}
bucle vacío () {
}
Instrucciones rapidas
• Si es la primera vez que usa ESP32, vea cómo configurar el entorno
para ESP32 en Arduino IDE .
• Realice el cableado como en la imagen de arriba.
• Conecte la placa ESP32 a su PC mediante un cable micro USB
• Cambie la dirección IP en el código por la dirección IP de su PC
• Compile y cargue el código en ESP32
• Monitor serial abierto en Arduino IDE
• El resultado en Serial Monitor
COM6
Enviar
Conectado al servidor HTTP / 1.1 200 OK Fecha: martes, 12
de enero de 2021 [Link] GMT Servidor: Apache / 2.4.39
(Win64) OpenSSL / 1.1.1c PHP / 7.3.8 X-Powered-By: PHP /
7.3 .8 Longitud de contenido: 31 Conexión: cerrar Tipo de
contenido: texto / html; charset = UTF-8 Nuevo registro
creado exitosamente desconectado
Desplazamiento automático Mostrar marca de tiempo
Salida clara
9600 baudios
Nueva línea
• Verifique si los datos están almacenados en la base de datos usando
el siguiente comando en el símbolo del sistema:
SELECCIONAR * de tbl_temp;
Símbolo del sistema
MariaDB [db_esp32]> SELECCIONAR * de tbl_temp; + --------- + -
----------- + | temp_id | temp_value | + --------- + ---------
--- + | 1 | 26,2 | | 2 | 30,5 | + --------- + ------------ + 2
filas en el conjunto (0.000 seg) MariaDB [db_esp32]>
Como puede ver, la temperatura 30,5 se almacena en la base de datos.
Cómo ESP32 inserta, actualiza u obtiene datos hacia
/ desde 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
necesita modificar la consulta MySQL en el código PHP. Puede obtener más
información en [Link]
ESP32 – SOLICITUD HTTP
Este tutorial le indica cómo usar ESP32 para realizar una solicitud HTTP al
servidor web, API o servicio web. En detalle, aprenderá:
• Cómo usar ESP32 para realizar una solicitud HTTP (GET y POST)
• Cómo incluir los datos del sensor en una solicitud HTTP
Hardware utilizado en este tutorial
1 × Módulo de desarrollo ESP-WROOM-32
1 × Cable micro USB
Divulgación: algunos de estos enlaces son enlaces de afiliados. Podemos
ganar una comisión por su compra sin costo adicional para usted. Lo
apreciamos.
Conceptos básicos de cliente web y servidor web
Hay algunos conceptos básicos de web como: dirección web (URL), nombre
de host, nombre de ruta, cadena de consulta, solicitud HTTP ... Puede
obtener información detallada sobre ellos en el tutorial de HTTP
Cómo realizar una solicitud HTTP
•Declarar método de solicitud, puerto HTTP, nombre de host , nombre
de ruta , cadena de consulta
const int HTTP_PORT = 80;
const String HTTP_METHOD = "OBTENER" ; // o "POST"
const char HOST_NAME [] = "[Link]" ; // nombre de host
del servidor web:
const String PATH_NAME = "" ;
• Declarar un objeto de cliente web
• Conectarse al servidor web
if (client. connect (HOST_NAME, HTTP_PORT)) {
Serial . println ( "Conectado al servidor" ); } else { Serial .
println ( "conexión fallida" ); }
• Si está conectado al servidor, envíe una solicitud HTTP
// envía el
cliente de
encabezado de solicitud HTTP . println (HTTP_METHOD + "" +
PATH_NAME + "HTTP / 1.1" ); cliente. println ( "Anfitrión:" +
Cadena (HOST_NAME));
cliente. println ( "Conexión: cerrar" );
cliente. println (); // finaliza el encabezado de la solicitud
HTTP
• Leer los datos de respuesta del servidor web
while (cliente. disponible ())
{
// leer un byte entrante del servidor e imprimirlo en el monitor
serie: char c = cliente. leer (); Serial . imprimir (c); }
if (! client. connected ())
{
// si el servidor está desconectado, detenga el cliente: Serial
. println ( "desconectado" ); cliente. detener (); }
Cómo incluir datos en una solicitud HTTP
Podemos enviar datos al servidor web al incluir datos en la solicitud HTTP. El
formato de datos depende del método de solicitud HTTP:
• Para solicitud HTTP GET
o Los datos solo se pueden enviar en una cadena de consulta
en el nombre de la ruta.
• Solicitud HTTP POST
o Los datos se pueden enviar NO SÓLO en formato de cadena
de consulta, SINO TAMBIÉN en cualquier otro formato como
Json, XML, imagen ...
Los datos se colocan en el cuerpo de la solicitud HTTP.
o
Aprendamos a enviar datos en formato de cadena de consulta para HTTP
GET y POST
• Crea una cadena de consulta
int temp = // del sensor
int humi = // del sensor
String queryString = String ( "? temperature =" ) + String
(temp) + String ( "& humedad =" ) + String (humi);
• HTTP GET: agregue una cadena de consulta al nombre de la ruta
// envía el
cliente de
encabezado HTTP . println ( "OBTENER" + PATH_NAME + queryString
+ "HTTP / 1.1" ); cliente. println ( "Anfitrión:" + Cadena
(HOST_NAME));
cliente. println ( "Conexión: cerrar" );
cliente. println (); // finaliza el encabezado HTTP
• HTTP POST: coloque la cadena de consulta en el cuerpo HTTP
// envía el
cliente de
encabezado HTTP . println ( "POST" + PATH_NAME + "HTTP / 1.1"
); cliente. println ( "Anfitrión:" + Cadena (HOST_NAME));
cliente. println ( "Conexión: cerrar" );
cliente. println (); // finaliza el encabezado HTTP
// enviar el cuerpo del
cliente HTTP . println (queryString);
• Tanto para GET como POST, lea los datos de respuesta del servidor
web
while (cliente. disponible ()) {
// leer un byte entrante del servidor e imprimirlo en el monitor
serie: char c = cliente. leer (); Serial . imprimir (c); }
if (! client. connected ()) {
// si el servidor está desconectado, detenga el cliente: Serial
. println ( "desconectado" ); cliente. detener (); }
Complete el código ESP32 para realizar una solicitud
HTTP
El golpe es el código ESP32 completo para realizar una solicitud HTTP GET /
POST
/ *
* Este código ESP32 es creado por [Link]
* Este código ESP32 es de dominio público
* Para más detalles (instrucciones y diagrama de cableado),
visite [Link] solicitud
* /
Código ESP32 completo para realizar una solicitud
HTTP GET con datos
/ *
* Este código ESP32 es creado por [Link]
*
* Este código ESP32 es de dominio público
*
* Para más detalles (instrucciones y diagrama de cableado),
visite [Link] solicitud
* /
Código ESP32 completo para realizar solicitudes HTTP
POST con datos
/ *
* Este código ESP32 es creado por [Link]
*
* Este código ESP32 es de dominio público
*
* Para más detalles (instrucciones y diagrama de cableado),
visite [Link] solicitud
* /