Arduino Nano - MySQL
Arduino Nano est capable de collecter les données des capteurs et de les stocker dans une base de données MySQL. Il peut également récupérer des données (commandes) de la base de données MySQL et gérer des LED, moteurs, actionneurs et autres dispositifs.
Ce tutoriel vous explique comment utiliser Arduino Nano pour contrôler MySQL. En détail, nous apprendrons :
- L'approche optimale pour permettre à un Arduino Nano de communiquer avec une base de données MySQL
- Comment l'Arduino Nano peut insérer des données dans une base de données MySQL
- Comment l'Arduino Nano peut mettre à jour des données dans une base de données MySQL
- Comment l'Arduino Nano peut récupérer des données d'une base de données MySQL
Préparation du matériel
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
Arduino Nano - MySQL
Si vous ne connaissez pas bien l'architecture du système, on peut considérer que la base de données MySQL et le serveur MySQL sont une seule et même chose. À mesure que vous approfondirez vos connaissances sur l'architecture du système, vous verrez les distinctions entre eux.
Il existe deux méthodes pour que l'Arduino Nano communique avec la base de données MySQL :
- Connexion directe au serveur MySQL à l'aide d'une connexion MySQL (désignée comme l'approche directe)
- Interaction indirecte avec le serveur MySQL via une connexion HTTP (connue sous le nom d'approche indirecte)
Cherchons l'option optimale.
Arduino Nano interagit directement avec le serveur MySQL
Cela peut sembler plus simple, mais il y a de nombreux inconvénients :
- Permettre à un compte utilisateur MySQL d'accéder à distance à la base de données MySQL est dangereux du point de vue de la sécurité, même si des privilèges limités ont été accordés au compte utilisateur.
- Traiter des données dans Arduino Nano et/ou sur un serveur MySQL augmente la complexité du code Arduino Nano et du script MySQL et consomme beaucoup de ressources d'Arduino Nano (mémoire et utilisation du CPU).
- Le serveur MySQL peut retourner une très grande quantité de données à l'Arduino Nano dans certains cas, ce qui peut entraîner une saturation de la mémoire de l'Arduino Nano.
- La plupart des bibliothèques MySQL disponibles ne prennent pas en charge SSL/TLS, ce qui signifie que les données, y compris le nom d'utilisateur et le mot de passe, seront envoyées en texte clair, posant un autre problème de sécurité.
Arduino Nano interagit indirectement avec le serveur MySQL via HTTP/HTTPS
La méthode indirecte résout tous les problèmes que présente l'approche directe. Avant d'explorer comment la méthode indirecte surpasse les inconvénients de l'approche directe, examinons d'abord son fonctionnement.
Comment cela fonctionne
- Étape 1 : Arduino Nano envoie une requête HTTP au serveur web
- Étape 2 : Le serveur web exécute un script PHP
- É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 l'envoie de retour à Arduino Nano dans une réponse HTTP
Dans ce tutoriel, le serveur Web et le serveur MySQL seront installés sur un PC.
Il peut sembler complexe, mais ce n'est pas le cas. Explorons comment l'approche indirecte peut pallier les inconvénients de l'approche directe :
- En installant des serveurs MySQL et HTTP sur le même serveur physique, nous pouvons restreindre un compte utilisateur MySQL pour accéder uniquement à localhost. De plus, le nom d'utilisateur et le mot de passe du compte MySQL sont stockés sur le serveur (étape 3), ce qui renforce la sécurité du système.
- Les données sont traitées par un script PHP (étapes 3 et 4). Cela réduit la charge de travail et la complexité tant pour les serveurs Arduino Nano que MySQL. Traiter les données à l'aide de code PHP est beaucoup plus facile qu'avec le code Arduino Nano ou les scripts MySQL.
- Le script PHP peut traiter les données et envoyer uniquement les données nécessaires à l'Arduino Nano (étape 4) pour éviter qu'il ne manque de mémoire.
- La plupart des bibliothèques Ethernet/WiFi supportent TLS/SSL, ce qui nous permet de faire des requêtes HTTPS. En utilisant HTTPS, les données sont cryptées et échangées de manière sécurisée sur Internet.
À l'étape 1, nous pouvons utiliser un nom d'utilisateur/mot de passe différent pour l'authentification entre l'Arduino Nano et le serveur Web. Il est important de se rappeler que le nom d'utilisateur/mot de passe HTTP ne doit pas être identique au nom d'utilisateur/mot de passe MySQL pour des raisons de sécurité.
Le tutoriel suivant démontrera comment utiliser l'Arduino Nano de manière indirecte avec MySQL. Il présente plusieurs avantages qui seront discutés.
Arduino Nano - MySQL via HTTP/HTTPS
Nous devons prendre les mesures suivantes :
- Installez le serveur MySQL, le serveur Web et PHP sur votre PC
- Activez le serveur MySQL et le serveur Web
- Créez un compte utilisateur MySQL
- Générez une base de données MySQL
- Construisez une table MySQL
- Rédigez un ou plusieurs fichiers de script PHP
- Écrivez le code Arduino Nano
Prenons les choses étape par étape. Nous pouvons avancer progressivement. Avançons pas à pas.
1. Installez le serveur MySQL, le serveur Web et PHP sur votre PC.
Heureusement, le package XAMPP inclut tout cela.
Il suffit de l'installer une seule fois :
- Obtenez XAMPP depuis ce lien
- Exécutez l'installation.
Une fois l'installation terminée, vous observerez le dossier C:\xampp\htdocs sur votre ordinateur. C'est là que vous devrez placer votre code PHP (comme cela sera discuté plus tard).
2. Activer MySQL et le serveur Web
- Ouvrez le panneau de contrôle XAMPP.
- Appuyez sur le bouton Démarrer pour activer MySQL et le serveur Web. (Voir l'image ci-dessous.)
3. Créer un compte utilisateur MySQL
Nous créerons un compte MySQL qui pourra se connecter à la base de données MySQL depuis localhost uniquement.
- Même si le nom d'utilisateur et le mot de passe sont exposés, les attaquants ne pourront pas accéder à la base de données MySQL à moins qu'ils ne contrôlent l'ordinateur.
- Comme PHP et MySQL sont installés sur le même PC, PHP peut utiliser ce nom d'utilisateur et ce mot de passe pour se connecter à la base de données MySQL.
Créons un compte utilisateur MySQL avec le nom d'utilisateur Arduino et le mot de passe ArduinoGetStarted.com :
- Démarrez l'invite de commande sur votre ordinateur. Gardez cette fenêtre ouverte jusqu'à ce que le tutoriel soit terminé.
- Entrez la commande suivante dans l'invite de commande :
- Par défaut, MySQL possède un compte root qui n'a pas de mot de passe.
- Il est recommandé d'y ajouter un mot de passe.
Entrez le your-root-password pour le compte root en tapant cette commande dans l'invite de commande :
- Entrez cette commande dans l'invite de commande :
- Entrez votre mot de passe root et appuyez sur la touche Entrée.
- Créez un compte utilisateur MySQL avec le nom d'utilisateur Arduino et le mot de passe ArduinoGetStarted.com en copiant les commandes ci-dessous et en les collant dans l'invite de commande :
Vous avez maintenant créé un compte utilisateur MySQL. N'oubliez pas le nom d'utilisateur et le mot de passe, car ils seront nécessaires pour le script PHP.
4. Créer une base de données MySQL
Créons une base de données intitulée db_arduino en entrant la commande suivante dans l'invite de commande :
5. Créer une table MySQL
Créons une table appelée tbl_temp en copiant les commandes ci-dessous et en les collant dans l'invite de commande :
6. Écrivez un ou plusieurs fichiers PHP
Créez un fichier PHP. Nommez-le insert_temp.php. Récupérez la température à partir de la requête HTTP. Insérez la température dans la base de données.
- La température 27,5 est enregistrée.
- Placez ce fichier dans le répertoire C:\xampp\htdocs.
- Découvrez l'adresse IP de votre PC. Si vous ne savez pas comment faire, cherchez sur Google.
- Pour tester le code PHP, ouvrez un navigateur web (par exemple, Chrome) et rendez-vous sur ce lien : http://192.168.0.26/insert_temp.php?temperature=27.5. N'oubliez pas de remplacer l'adresse IP par la vôtre.
- Le navigateur web devrait afficher "La température 27,5 est enregistrée".
- Vérifiez si les données sont stockées dans la base de données en saisissant la commande suivante dans l'invite de commande :
Il est évident que la température de 27,5 est enregistrée dans la base de données. L'action suivante consiste à composer un code Arduino Nano qui générera une requête HTTP similaire à votre PC.
7. Écrire le code Arduino Nano
Nous utiliserons l'Arduino Nano et le Shield Ethernet pour le test.
Le code Arduino Nano ci-dessous envoie une requête HTTP à votre PC, avec une température de 29,1°C, pour être insérée dans la base de données.
Étapes rapides
- Affichera l'adresse IP du Shield Ethernet
- Empilez le Shield Ethernet sur l'Arduino Nano.
- Connectez un câble Ethernet au Shield Ethernet.
- Connectez l'Arduino Nano à un PC à l'aide d'un câble USB.
- Modifiez le code pour refléter l'adresse IP du PC.
- Compilez et téléchargez le code sur l'Arduino Nano.
- Ouvrez le moniteur série.
- La sortie sur le moniteur série affichera l'adresse IP du Shield Ethernet.
- Vérifiez si les données sont stockées dans la base de données en entrant la commande suivante dans l'invite de commande :
Il est évident que la base de données indique une température de 29,1.
Comment Arduino Nano insère, met à jour ou récupère des données depuis/vers une base de données MySQL
Dans l'exemple ci-dessus, nous avons découvert comment saisir des données dans une base de données MySQL. Pour mettre à jour et récupérer des données de la base de données, le processus est similaire. Vous devez simplement modifier les requêtes MySQL dans le script PHP. Pour en savoir plus, vous pouvez visiter W3Schools.
Utilisation avancée
Pour renforcer la sécurité :
- Modifiez le code Arduino Nano pour utiliser HTTPS au lieu de HTTP. Référez-vous à Arduino Nano - Requête HTTPS - Client WebSSL.
- Utilisez une combinaison nom d'utilisateur/mot de passe pour l'authentification entre l'Arduino Nano et le serveur Web. Voir Authentification par accès de base
※ Note:
Pour créer un système avec la sécurité la plus élevée, nous devons prendre des mesures supplémentaires (par exemple, prévention de l'injection MySQL, transformation du HTTPS en une API REST, utilisation du format Json pour les données...). Néanmoins, ce tutoriel est destiné aux débutants pour apprendre l'Arduino Nano, et a été rendu aussi simple que possible. Après avoir complété ce tutoriel, les utilisateurs peuvent l'étendre.