Arduino UNO R4 - MySQL

Este tutorial te enseña cómo usar Arduino UNO R4 para recopilar datos de sensores y guardarlos en una base de datos MySQL. En detalle, aprenderemos:

Arduino UNO R4 MySQL

Arduino UNO R4 - MySQL

El Arduino UNO R4 puede conectarse a la base de datos MySQL de dos maneras diferentes:

  • Arduino UNO R4 se conecta directamente al servidor MySQL usando un protocolo MySQL (este es el método directo).
  • Arduino UNO R4 se conecta al servidor MySQL a través de un protocolo HTTP (este es el método indirecto).

Veamos cuál es mejor.

Arduino UNO R4 interactúa directamente con Servidor MySQL

Arduino directamente a MySQL

Esto podría parecer fácil, pero hay varias desventajas:

  • Permitir que un usuario de MySQL acceda a la base de datos de forma remota puede ser arriesgado para la seguridad, incluso con privilegios de usuario limitados.
  • Procesar datos en Arduino UNO R4 o en un servidor MySQL hace que el código de Arduino y el script de MySQL sean más complejos y consuman de manera intensiva la memoria y la CPU de Arduino.
  • El servidor MySQL podría enviar una gran cantidad de datos al Arduino UNO R4, lo que podría hacer que se quede sin memoria.
  • Muchas bibliotecas de MySQL no soportan SSL/TLS, lo que significa que los nombres de usuario y las contraseñas se envían sin cifrado, lo que representa otro riesgo de seguridad.

Arduino UNO R4 interactúa indirectamente con el servidor MySQL a través de HTTP/HTTPS

Este método indirecto resuelve todos los problemas que tiene el método directo. Primero veamos cómo funciona este método indirecto antes de explorar cómo evita los problemas del método directo.

Cómo funciona

  • Paso 1: Arduino UNO R4 envía una solicitud HTTP al servidor web
  • Paso 2: El servidor web ejecuta un script PHP
  • Paso 3: El script PHP recibe datos de la solicitud HTTP, los procesa y se comunica con la base de datos MySQL.
  • Paso 4: El script PHP procesa los resultados y los envía de vuelta a Arduino UNO R4 a través de la respuesta HTTP
Arduino UNO R4 MySQL HTTP

Esta guía también te indicará cómo instalar un servidor web y un servidor MySQL en tu PC. Parece complejo, pero no lo es.

Ahora, exploremos cómo el método indirecto ayuda a evitar las desventajas del método directo.

  • Al colocar el servidor MySQL y el servidor HTTP en la misma máquina, puedes configurar la cuenta de usuario de MySQL para que solo acceda desde esa máquina. El nombre de usuario y la contraseña de esta cuenta se guardan en el servidor (mencionado en el paso 3), lo que ayuda a aumentar la seguridad.
  • Un script PHP (los pasos 3 y 4) maneja el procesamiento de datos. Esto simplifica las cosas y reduce la complejidad tanto para el Arduino UNO R4 como para los servidores MySQL. Usar PHP para el procesamiento de datos es más fácil que usar el código de Arduino UNO R4 o scripts de MySQL.
  • El script PHP procesa los datos y luego envía solo lo necesario al Arduino UNO R4 (paso 4). Esto ayuda a evitar que el Arduino UNO R4 se quede sin memoria.
  • La mayoría de las bibliotecas Ethernet/WiFi admiten TLS/SSL, lo que permite las solicitudes HTTPS. Con HTTPS, los datos están cifrados y se transfieren de forma segura a través de Internet.

En el paso 1, puedes usar un nombre de usuario y una contraseña diferentes para conectar el Arduino UNO R4 con el servidor web. Es importante que el nombre de usuario y la contraseña HTTP no sean los mismos que el nombre de usuario y la contraseña de MySQL para mantener la seguridad.

Esta guía mostrará cómo conectar Arduino UNO R4 a MySQL de forma indirecta.

Arduino UNO R4 - MySQL vía HTTP/HTTPS

Necesitamos dar el siguiente paso:

  • Instalar el servidor MySQL, el servidor web y PHP en tu computadora
  • Activar MySQL y el servidor web
  • Crear una cuenta de usuario de MySQL
  • Crear una base de datos MySQL
  • Crear una tabla de MySQL
  • Escribir scripts en PHP
  • Programar Arduino UNO R4

Ahora, vamos a hacerlo paso a paso.

Instalar el servidor MySQL, el servidor web y PHP en tu PC

El paquete de XAMPP ya incluye todo. Solo necesitamos instalarlo una vez.

Después de la instalación, la carpeta llamada C:\xampp\htdocs aparecerá en tu PC. Esta carpeta contendrá el código PHP (explicado más tarde).

Habilitar MySQL y servidor web

  • Abrir el panel de control de XAMPL
  • Haga clic en el botón Inicio para encender MySQL y el servidor web (Consulte la imagen que se encuentra a continuación)
Arduino UNO R4 XAMPP

Crear una cuenta de usuario de MySQL

Configuraremos una cuenta de MySQL que solo pueda acceder a la base de datos de MySQL desde la computadora local.

  • Incluso si alguien conoce tu nombre de usuario y tu contraseña, no puede acceder a tu base de datos MySQL de forma remota.
  • Dado que PHP y MySQL están en la misma PC, PHP puede usar el nombre de usuario y la contraseña para conectarse a la base de datos MySQL.

Vamos a crear una cuenta de usuario de MySQL con el nombre de usuario ArduinoUnoR4 y la contraseña newbiely.com.

  • Abre el Símbolo del sistema en tu computadora. Manténlo abierto hasta que termines el tutorial.
  • Escribe este comando en el Símbolo del sistema:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\youruser>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • La configuración predeterminada de MySQL incluye una cuenta root que no tiene contraseña. Se recomienda que cree una contraseña para esta cuenta.

Escribe el siguiente comando en el Símbolo del sistema para establecer la contraseña de la cuenta root: (p. ej. TU-CONTRASEÑA-RAÍZ)

mysqladmin -u root password YOUR-ROOT-PASSWORD
Command Prompt
C:\xampp\mysql\bin>mysqladmin -u root password YOUR-ROOT-PASSWORD C:\xampp\mysql\bin>
  • Ingrese este comando en el Símbolo del sistema:
mysql.exe -u root -p
  • Ingrese su contraseña de root y presione Enter.
Command Prompt
C:\xampp\mysql\bin>mysql.exe -u root -p Enter password: ****************** Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.4.6-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
  • Crea una cuenta de usuario de MySQL con el nombre de usuario 'ArduinoUnoR4' y la contraseña 'newbiely.com'. Copia los siguientes comandos y pégalos en el símbolo del sistema:
CREATE USER 'ArduinoUnoR4'@'localhost' IDENTIFIED BY 'newbiely.com'; GRANT ALL PRIVILEGES ON *.* TO 'ArduinoUnoR4'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ArduinoUnoR4'@'localhost' IDENTIFIED BY 'newbiely.com'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ArduinoUnoR4'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]>

Ahora has creado con éxito una cuenta de usuario de MySQL. Recuerda el nombre de usuario y la contraseña, ya que los necesitarás para el script de PHP.

Crear una base de datos de MySQL

Crea una base de datos llamada db_arduino introduciendo este comando en la línea de comandos:

CREATE DATABASE db_arduino CHARACTER SET = 'utf8' COLLATE = 'utf8_general_ci';
Command Prompt
MariaDB [(none)]> CREATE DATABASE db_arduino CHARACTER SET = 'utf8' COLLATE = 'utf8_general_ci'; Query OK, 1 row affected (0.003 sec) MariaDB [(none)]>

Crear una tabla de MySQL

Vamos a crear una tabla llamada tbl_temperature. Copie los siguientes comandos y péguelos en el Símbolo del sistema:

USE db_arduino; CREATE TABLE tbl_temperature ( temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, temp_value FLOAT DEFAULT 0.00, PRIMARY KEY (temp_id) );
Command Prompt
MariaDB [(none)]> USE db_arduino; Database changed MariaDB [db_arduino]> MariaDB [db_arduino]> CREATE TABLE tbl_temperature ( -> temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, -> temp_value FLOAT DEFAULT 0.00, -> PRIMARY KEY (temp_id) -> ); Query OK, 0 rows affected (0.044 sec) MariaDB [db_arduino]>

Escribe uno o más archivos PHP

Crea un archivo PHP llamado insert_temp.php en C:\xampp\htdocs

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "ArduinoUnoR4"; $password = "newbiely.com"; $dbname = "db_arduino"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "INSERT INTO tbl_temperature (temp_value) VALUES ($temperature)"; if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . " => " . $conn->error; } $conn->close(); } else { echo "temperature is not set"; } ?>

Este código PHP toma la temperatura de la solicitud HTTP y la inserta en la base de datos.

  • Averigua la dirección IP de tu ordenador. Busca en Google si no sabes cómo encontrarla.
  • Para verificar si el código PHP funciona, abre un navegador web (como Chrome) y ve a este enlace: http://192.168.0.4/insert_temp.php?temperature=25.3. Recuerda usar la dirección IP de tu propio ordenador en lugar de '192.168.0.4'.
  • Verás los resultados mostrados en tu navegador.
Prueba de MySQL
  • Para ver si los datos están guardados en la base de datos, escribe este comando en el Símbolo del sistema:
SELECT * from tbl_temperature;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temperature; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 25.3 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_arduino]>

La temperatura 25.3 se ha guardado en la base de datos. A continuación, necesitamos programar el Arduino UNO R4 para enviar una solicitud HTTP similar a la de tu ordenador.

Escribe código para Arduino UNO R4

Este código de Arduino UNO R4 envía una solicitud HTTP a tu ordenador para añadir una temperatura de 30,5 °C a la base de datos.

Código para Arduino UNO R4 R4 WiFi

/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-mysql */ #include <WiFiS3.h> const char ssid[] = "YOUR_WIFI_SSID"; // change your network SSID (name) const char pass[] = "YOUR_WIFI_PASSWORD"; // change your network password (use for WPA, or use as key for WEP) WiFiClient client; int status = WL_IDLE_STATUS; int HTTP_PORT = 80; String HTTP_METHOD = "GET"; char HOST_NAME[] = "192.168.0.4"; // change to your PC's IP address String PATH_NAME = "/insert_temp.php"; String queryString = "?temperature=30.5"; void setup() { Serial.begin(9600); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } // attempt to connect to WiFi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); // connect to web server on port 80: if (client.connect(HOST_NAME, HTTP_PORT)) { // if connected: Serial.println("Connected to server"); // make a HTTP request: // send HTTP header client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1"); client.println("Host: " + String(HOST_NAME)); client.println("Connection: close"); client.println(); // end HTTP header while (client.connected()) { if (client.available()) { // read an incoming byte from the server and print it to serial monitor: char c = client.read(); Serial.print(c); } } // the server's disconnected, stop the client: client.stop(); Serial.println(); Serial.println("disconnected"); } else { // if not connected: Serial.println("connection failed"); } } void loop() { }

Pasos R\u00e1pidos

Siga estas instrucciones paso a paso:

  • Si es la primera vez que usa el Arduino UNO R4 WiFi/Minima, consulte el tutorial sobre configurar el entorno para Arduino UNO R4 WiFi/Minima en el IDE de Arduino.
  • Conecte la placa Arduino UNO R4 a su ordenador utilizando un cable USB.
  • Inicie el IDE de Arduino en su ordenador.
  • Seleccione la placa Arduino UNO R4 adecuada (p. ej., Arduino Uno R4 WiFi) y el puerto COM.
  • Reemplace la dirección IP en el código por la dirección IP de su ordenador.
  • Compile y suba el código a la placa Arduino UNO R4.
  • Abra el Monitor Serial.
  • Vea la salida en el Monitor Serial.
COM6
Send
Connected to server HTTP/1.1 200 OK Date: Tue, 12 Jan 2021 07:52:22 GMT Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1c PHP/7.3.8 X-Powered-By: PHP/7.3.8 Content-Length: 31 Connection: close Content-Type: text/html; charset=UTF-8 New record created successfully disconnected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Para ver si la información está guardada en la base de datos, escribe este comando en el Símbolo del sistema:
SELECT * from tbl_temperature;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temperature; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 25.3 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_arduino]>

La temperatura 30,5 se guarda en la base de datos.

Cómo Arduino UNO R4 inserta, actualiza u obtiene datos en la base de datos MySQL

En el ejemplo, aprendimos cómo agregar datos a la base de datos MySQL. Para actualizar o recuperar datos, el proceso es similar. Simplemente cambie las consultas MySQL en el script PHP. Para obtener más información, visite W3Schools.

Uso Avanzado

Para mejorar la seguridad,

  • Puedes modificar el código de Arduino UNO R4 para usar HTTPS en lugar de HTTP. Para saber cómo hacerlo, visita Arduino UNO R4 - HTTPS.
  • Puedes autenticarte utilizando un nombre de usuario y una contraseña al conectar el Arduino UNO R4 a un servidor web. Obtén más información en Autenticación básica.

※ Nota:

Para crear un sistema completo con la máxima seguridad, debemos añadir más características (como prevenir la inyección de MySQL, convertir HTTPS en una API REST y utilizar el formato JSON para los datos). Sin embargo, esta guía está destinada a principiantes que están aprendiendo Arduino UNO R4. Lo mantuvimos muy simple. Después de terminar esta guía, podrás aprender temas más avanzados.

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.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!