Arduino Nano ESP32 - MySQL

Ce tutoriel fournit des instructions sur comment utiliser l'Arduino Nano ESP32 pour insérer/mettre à jour des données dans une base de données MySQL, ou lire les données à partir d'une base de données MySQL.

Arduino Nano ESP32 MySQL

Préparation du matériel

1×Arduino Nano ESP32
1×USB Cable Type-C
1×(Optional) DC Power Jack
1×Breadboard
1×Jumper Wires
1×(Recommended) Screw Terminal Adapter for Arduino Nano

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

Arduino Nano ESP32 - MySQL

Il y a deux termes dans MySQL que les débutants confondent généralement : base de données MySQL et serveur MySQL. Ils sont différents. Cependant, si vous êtes débutant, vous pouvez supposer qu'ils sont identiques. Plus tard, vous découvrirez les différences au cours de votre apprentissage.

Arduino Nano ESP32 peut interagir avec la base de données MySQL de deux manières :

  • Directement : Arduino Nano ESP32 se connecte directement au serveur MySQL et interagit avec le serveur MySQL en utilisant le protocole MySQL.
  • Indirectement : Arduino Nano ESP32 se connecte indirectement au serveur MySQL via un serveur web en utilisant le protocole HTTP/HTTPS.

Lequel est le meilleur pour l'ESP32 ? Découvrons-le !

Arduino Nano ESP32 interagit directement avec le serveur MySQL

Arduino Nano ESP32 directement à MySQL

Interagir directement avec MySQL semble être simple, mais il y a beaucoup d'inconvénients :

  • Nous devons accorder des permissions d'accès à distance à un compte utilisateur MySQL ⇒ Cela représente un risque pour la sécurité, même si nous accordons des privilèges limités au compte utilisateur.
  • L'Arduino Nano ESP32 DOIT stocker et envoyer des requêtes MySQL au serveur MySQL ⇒ Nécessité d'écrire beaucoup de code Arduino Nano ESP32, et également d'épuiser les ressources de l'Arduino Nano ESP32 (utilisation de la mémoire et du CPU).
  • L'Arduino Nano ESP32 DOIT traiter une réponse MySQL complexe (taille de données très grande dans certains cas) ⇒ Cela peut provoquer une saturation de la mémoire de l'Arduino Nano ESP32.
  • Le serveur MySQL doit traiter les données brutes ⇒ cela augmente la complexité du script MySQL.
  • La plupart des bibliothèques MySQL pour l'Arduino Nano ESP32 ne prennent pas en charge SSL/TLS ⇒ Les données et le nom d'utilisateur/mot de passe sont envoyés sans cryptage ⇒ un autre problème de sécurité.

Arduino Nano ESP32 interagit indirectement avec le serveur MySQL via HTTP/HTTPS

Interagir avec MySQL indirectement via HTTP/HTTPS résout tous les problèmes de l'accès direct.

Comment ça fonctionne

  • Étape 1 : Arduino Nano ESP32 inclut les données dans une requête HTTP/HTTPS et envoie la requête au serveur Web.
  • Étape 2 : Le serveur Web exécute un script PHP qui gère la requête de l'Arduino Nano ESP32.
  • Étape 3 : Le script PHP extrait les données de la requête HTTP, traite ces données, puis interagit avec la base de données MySQL.
  • Étape 4 : Le script PHP traite le résultat et renvoie uniquement le résultat nécessaire à l'Arduino Nano ESP32 via une réponse HTTP.
Arduino Nano ESP32 MySQL HTTP

Nous allons installer un serveur MySQL, un serveur Web et PHP sur le PC. En fait, nous pouvons l'installer sur un serveur dédié ou un service cloud tel que AWS EC2.

Voici comment la méthode indirecte résout les problèmes de la méthode directe.

  • Nous pouvons installer un serveur HTTP et un serveur MySQL sur le même serveur physique, nous pouvons limiter l'accès à un compte utilisateur MySQL (par exemple, accès uniquement depuis localhost) ⇒ sécurisé
  • Le nom d'utilisateur et le mot de passe du compte MySQL sont stockés sur le serveur ⇒ sécurisé.
  • Les données sont traitées par un script PHP ⇒ Cela réduit la charge et la complexité pour Arduino Nano ESP32 et le serveur MySQL.
  • Le script PHP peut traiter les données beaucoup plus facilement que le code Arduino Nano ESP32 et le script MySQL ⇒ Simplifie le code Arduino Nano ESP32 et le script MySQL
  • Le script PHP peut traiter les données et envoyer uniquement les données nécessaires à Arduino Nano ESP32 (étape 4) pour éviter que l'Arduino Nano ESP32 ne soit à court de mémoire.
  • Arduino Nano ESP32 peut facilement effectuer une requête HTTPS ⇒ les données sont chiffrées.

Notez que l'authentification entre l'Arduino Nano ESP32 et le serveur Web doit être indépendante de l'authentification MySQL. Par exemple, le nom d'utilisateur/mot de passe HTTP devrait être différent du nom d'utilisateur/mot de passe MySQL.

En raison de ces avantages, ce tutoriel utilisera la méthode indirecte.

Arduino Nano ESP32 vers MySQL via HTTP/HTTPS

Voici les étapes que nous devons suivre :

  • Installer le paquet XAMPP qui comprend le serveur MySQL, le serveur Web et PHP sur votre PC
  • Créer un compte utilisateur MySQL
  • Créer une base de données MySQL
  • Créer une table MySQL
  • Écrire un ou plusieurs fichiers de scripts PHP
  • Écrire du code Arduino Nano ESP32

1. Installation du serveur MySQL, du serveur Web et de PHP sur votre PC

  • Téléchargez et installez XAMPP depuis ce lien. Après l'installation, vérifiez le dossier C:\xampp\htdocs sur votre PC. C'est là que vous placerez le code PHP (voir plus tard).
  • Ouvrez le Panneau de Contrôle XAMPP
  • Cliquez sur les boutons Démarrer pour activer MySQL et le serveur Web (comme sur l'image ci-dessous)
Arduino Nano ESP32 XAMPP

2. Création d'un compte utilisateur MySQL

Nous créerons un compte MySQL avec des permissions d'accès localhost uniquement.

  • Même si les attaquants connaissent le nom d'utilisateur/mot de passe, ils ne peuvent pas accéder à votre base de données MySQL à moins de prendre le contrôle de votre PC.
  • Ce nom d'utilisateur/mot de passe sera utilisé par PHP pour se connecter à la base de données MySQL.

Ce tutoriel crée un compte utilisateur MySQL avec comme nom d'utilisateur et mot de passe ESP32 et newbiely.fr, respectivement :

  • Ouvrez l'Invite de commandes sur votre PC. Ne le fermez pas jusqu'à la fin du tutoriel.
  • Tapez la commande suivante dans l'Invite de commandes :
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\YOUR_USER>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • Par défaut, MySQL possède un compte root sans mot de passe. Il est fortement recommandé de définir un mot de passe pour le compte root (par exemple, VOTRE_MOT_DE_PASSE_ROOT) pour des raisons de sécurité. Tapez la commande ci-dessous dans l'invite de commande :
mysqladmin -u root password YOUR_ROOT_PASSWORD
Command Prompt
C:\xampp\mysql\bin>mysqladmin -u root password YOUR_ROOT_PASSWORD C:\xampp\mysql\bin>
  • Tapez la commande ci-dessous dans l'invite de commande pour vous connecter au serveur MySQL :
mysql.exe -u root -p
  • Tapez VOTRE_MOT_DE_PASSE_ROOT et appuyez sur Entrée
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)]>
  • Créons un compte utilisateur MySQL avec comme nom d'utilisateur et mot de passe ESP32 et newbiely.fr, respectivement, en copiant les commandes ci-dessous et en les collant dans l'invite de commande :
CREATE USER 'ESP32'@'localhost' IDENTIFIED BY 'newbiely.fr'; GRANT ALL PRIVILEGES ON *.* TO 'ESP32'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ESP32'@'localhost' IDENTIFIED BY 'newbiely.fr'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ESP32'@'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)]>

Vous avez créé un compte utilisateur MySQL avec succès. Notez le nom d'utilisateur et le mot de passe. Ils seront utilisés dans le script PHP.

3. Création d'une base de données MySQL

Créez une base de données db_nano_esp32 en tapant la commande suivante dans l'invite de commande:

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

4. Création d'une table MySQL

Créez une table tbl_temp en copiant les commandes ci-dessous et en les collant dans l'Invite de commandes :

USE db_nano_esp32; CREATE TABLE tbl_temp ( temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, temp_value FLOAT DEFAULT 0.00, PRIMARY KEY (temp_id) );
Command Prompt
MariaDB [(none)]> USE db_nano_esp32; Database changed MariaDB [db_nano_esp32]> MariaDB [db_nano_esp32]> CREATE TABLE tbl_temp ( -> 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_nano_esp32]>

6. Écrire des fichiers de scripts PHP

Créez un insert_temp.php en utilisant n'importe quel éditeur de texte (par exemple Notepad/Notepad++). Nous écrirons le script dans ce fichier pour extraire la valeur de la température de la requête HTTP et insérer cette valeur dans la base de données.

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "ESP32"; $password = "newbiely.fr"; $database_name = "db_nano_esp32"; // Create MySQL connection fom PHP to MySQL server $connection = new mysqli($servername, $username, $password, $database_name); // Check connection if ($connection->connect_error) { die("MySQL connection failed: " . $connection->connect_error); } $sql = "INSERT INTO tbl_temp (temp_value) VALUES ($temperature)"; if ($connection->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . " => " . $connection->error; } $connection->close(); } else { echo "temperature is not set in the HTTP request"; } ?>
  • Placez ce fichier dans le dossier C:\xampp\htdocs
  • Obtenez l'adresse IP de votre PC. Si vous ne savez pas comment faire, cherchez sur Google.
  • Testez le code PHP en ouvrant un navigateur web (par exemple, Chrome) et accédez à ce lien : http://192.168.0.19/insert_temp.php?temperature=26.2. Notez que vous devez remplacer l'adresse IP ci-dessus par celle de votre PC.
  • Le navigateur web affichera comme ci-dessous :
Test MySQL
  • Vérifiez si les données sont stockées dans la base de données en tapant la commande suivante dans l'invite de commande :
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_nano_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_nano_esp32]>

Comme vous pouvez le voir, la température de 26,2 est enregistrée dans la base de données. L'étape suivante consiste à écrire le code Arduino Nano ESP32 qui effectue une requête HTTP vers le serveur web sur votre PC.

7. Écrire le code Arduino Nano ESP32

Le code Arduino Nano ESP32 ci-dessous effectue une requête HTTP vers votre PC pour insérer une température de 30,5°C dans la base de données.

/* * Ce code Arduino Nano ESP32 a été développé par newbiely.fr * Ce code Arduino Nano ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/arduino-nano-esp32/arduino-nano-esp32-mysql */ #include <WiFi.h> #include <HTTPClient.h> const char* WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE IT const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE IT String HOST_NAME = "http://192.168.0.19"; // change to your PC's IP address String PATH_NAME = "/insert_temp.php"; String queryString = "?temperature=30.5"; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); HTTPClient http; http.begin(HOST_NAME + PATH_NAME + queryString); //HTTP int httpCode = http.GET(); // httpCode will be negative on error if(httpCode > 0) { // file found at server if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { }

Étapes rapides

  • Si c'est la première fois que vous utilisez un Arduino Nano ESP32, consultez comment configurer l'environnement pour Arduino Nano ESP32 sur Arduino IDE.
  • Faites le câblage comme sur l'image ci-dessus.
  • Connectez la carte Arduino Nano ESP32 à votre PC via un câble USB
  • Modifiez l'adresse IP dans le code par l'adresse IP de votre PC
  • Compilez et téléchargez le code sur l'Arduino Nano ESP32
  • Ouvrez le moniteur série sur Arduino IDE
Comment ouvrir le moniteur série sur Arduino IDE
  • Le résultat sur le moniteur série
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  
  • Vérifiez si les données sont stockées dans la base de données en utilisant la commande suivante dans l'invite de commande :
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_nano_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_nano_esp32]>

Comme vous pouvez le voir, la température de 30,5 est enregistrée dans la base de données.

Comment Arduino Nano ESP32 insère, met à jour ou récupère des données depuis/vers une base de données MySQL

L'exemple ci-dessus montre comment insérer des données dans la base de données MySQL. Il est similaire pour la mise à jour et la lecture des données de la base. Il suffit de modifier la requête MySQL dans le code PHP. Vous pouvez en apprendre davantage sur W3Schools.com

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!