ESP32 - MySQL
Ce tutoriel vous explique comment utiliser l'ESP32 pour insérer/mettre à jour des données dans une base de données MySQL, ou lire les données depuis une base de données MySQL.
Préparation du matériel
1 | × | ESP-WROOM-32 Dev Module | |
1 | × | USB Cable Type-C | |
1 | × | (Optional) DC Power Jack | |
1 | × | Breadboard | |
1 | × | Jumper Wires | |
1 | × | (Recommended) ESP32 Screw Terminal Adapter |
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
ESP32 - MySQL
Il existe deux termes dans MySQL qui prêtent souvent à confusion chez les débutants : 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.
ESP32 peut interagir avec la base de données MySQL de deux manières :
- Directement : L'ESP32 se connecte directement au serveur MySQL et interagit avec le serveur MySQL en utilisant le protocole MySQL.
- Indirectement : L'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 !
ESP32 interagit directement avec le serveur MySQL
Interagir directement avec MySQL semble être simple, mais il y a beaucoup d'inconvénients :
- Nous devons accorder des autorisations d'accès à distance à un compte utilisateur MySQL ⇒ Cela est risqué sur le plan de la sécurité, même si nous accordons des privilèges limités au compte utilisateur.
- L'ESP32 DOIT stocker et envoyer des requêtes MySQL au serveur MySQL ⇒ Nécessité d'écrire beaucoup de code ESP32, et également d'épuiser les ressources de l'ESP32 (utilisation de la mémoire et du CPU).
- L'ESP32 DOIT traiter une réponse MySQL complexe (très grande taille de données dans certains cas) ⇒ Cela peut entraîner une saturation de la mémoire de l'ESP32.
- Le serveur MySQL doit traiter les données brutes ⇒ augmente la complexité du script MySQL.
- La plupart des bibliothèques MySQL pour l'ESP32 ne prennent pas en charge SSL/TLS ⇒ Les données et le nom d'utilisateur/mot de passe sont envoyés sans chiffrement ⇒ un autre problème de sécurité.
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 : L'ESP32 intègre les données à la 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 provenant de l'ESP32.
- Étape 3 : Le script PHP extrait les données de la requête HTTP, les traite, 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'ESP32 via la réponse HTTP.
Nous allons installer le serveur MySQL, le 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 manière indirecte résout les problèmes de la manière directe.
- Nous pouvons installer le serveur HTTP et le 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/le mot de passe du compte MySQL est stocké sur le serveur ⇒ sécurisé.
- Les données sont traitées par un script PHP ⇒ Cela réduit la charge et la complexité pour l'ESP32 et le serveur MySQL.
- Le script PHP peut traiter les données beaucoup plus facilement que le code ESP32 et le script MySQL ⇒ Simplifie le code ESP32 et le script MySQL.
- Le script PHP peut traiter les données et envoyer uniquement les données nécessaires à l'ESP32 (Étape 4) pour empêcher l'ESP32 de manquer de mémoire.
- L'ESP32 peut facilement effectuer une requête HTTPS ⇒ les données sont cryptées.
Notez que l'authentification entre l'ESP32 et le serveur Web doit être indépendante de l'authentification MySQL. Par exemple, le nom d'utilisateur/mot de passe HTTP doit être différent du nom d'utilisateur/mot de passe MySQL.
En raison de ces avantages, ce tutoriel utilisera la méthode indirecte.
ESP32 vers MySQL via HTTP/HTTPS
Les étapes ci-dessous sont celles que nous devons suivre :
- Installation du package XAMPP qui inclut un serveur MySQL, un serveur Web et PHP sur votre PC
- Création d'un compte utilisateur MySQL
- Création d'une base de données MySQL
- Création d'une table MySQL
- Écriture d'un ou plusieurs fichiers de script PHP
- Écriture du code 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 mettrez 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)
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 dont le nom d'utilisateur et le mot de passe sont respectivement ESP32 et newbiely.fr :
- Ouvrez l'Invite de Commande sur votre PC. Ne le fermez pas jusqu'à la fin du tutoriel.
- Tapez la commande suivante dans l'Invite de Commande :
- Par défaut, MySQL possède un compte root sans mot de passe. Il est vivement 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 :
- Tapez la commande ci-dessous dans l'invite de commande pour vous connecter au serveur MySQL :
- Tapez VOTRE_MOT_DE_PASSE_ROOT et appuyez sur Entrée
- Créons un compte utilisateur MySQL avec le nom d'utilisateur et le mot de passe ESP32 et newbiely.fr, respectivement en copiant les commandes ci-dessous et en les collant dans l'invite de commande :
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_esp32 en tapant la commande suivante dans l'invite de commande :
4. Création d'une table MySQL
Créez une table tbl_temp en copiant les commandes ci-dessous et collez-les dans l'invite de commande :
6. Écrire des fichiers de scripts PHP
Créez un fichier 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 de température dans la base de données.
- 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 en accédant à 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 affiche comme ci-dessous :
- 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 :
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 ESP32 qui effectue une requête HTTP vers le serveur web sur votre PC.
7. Écrire le code ESP32
Le code ESP32 ci-dessous effectue une requête HTTP à votre PC pour insérer une température de 30,5°C dans la base de données.
Étapes rapides
- Si vous utilisez l'ESP32 pour la première fois, consultez comment configurer l'environnement pour ESP32 sur Arduino IDE.
- Faites le câblage comme sur l'image ci-dessus.
- Connectez la carte ESP32 à votre PC via un câble micro USB.
- Modifiez l'adresse IP dans le code par l'adresse IP de votre PC.
- Compilez et téléchargez le code sur l'ESP32.
- Ouvrez le moniteur série sur Arduino IDE.
- Le résultat sur le moniteur série
- 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 :
Comme vous pouvez le voir, la température de 30,5 est enregistrée dans la base de données.
Comment ESP32 insère, met à jour ou récupère des données dans/depuis une base de données MySQL
L'exemple ci-dessus montre comment insérer des données dans la base de données MySQL. Cela est similaire pour la mise à jour et la lecture des données de la base de données. Vous devez simplement modifier la requête MySQL dans le code PHP. Vous pouvez en apprendre davantage sur W3Schools.com.