Arduino UNO R4 - MySQL

Ce tutoriel vous explique comment utiliser Arduino UNO R4 pour collecter des données à partir de capteurs et les enregistrer dans une base de données MySQL. Plus en détail, nous apprendrons :

Arduino UNO R4 MySQL

Arduino UNO R4 - MySQL

L'Arduino UNO R4 peut se connecter à la base de données MySQL de deux méthodes différentes :

  • L'Arduino UNO R4 se connecte directement au serveur MySQL en utilisant le protocole MySQL (il s'agit de la méthode directe).
  • L'Arduino UNO R4 se connecte au serveur MySQL par le protocole HTTP (il s'agit de la méthode indirecte).

Voyons lequel est le meilleur.

Arduino UNO R4 interagit directement avec le serveur MySQL

Arduino directement vers MySQL

Cela pourrait sembler facile, mais il y a plusieurs inconvénients :

  • Autoriser un utilisateur MySQL à accéder à la base de données à distance peut présenter des risques pour la sécurité, même avec des privilèges d'utilisateur limités.
  • Le traitement des données sur l'Arduino UNO R4 ou sur un serveur MySQL rend le code Arduino et le script MySQL plus complexes et nécessite une utilisation intensive de la mémoire et du processeur d'Arduino.
  • Le serveur MySQL pourrait envoyer une grande quantité de données à l'Arduino UNO R4, ce qui pourrait entraîner une pénurie de mémoire.
  • De nombreuses bibliothèques MySQL ne prennent pas en charge SSL/TLS, ce qui signifie que les noms d'utilisateur et les mots de passe sont envoyés sans chiffrement, posant ainsi un autre risque pour la sécurité.

Arduino UNO R4 interagit indirectement avec le serveur MySQL via HTTP/HTTPS

Cette méthode indirecte résout tous les problèmes que présente la méthode directe. Commençons d’abord par voir comment cette méthode indirecte fonctionne avant d’examiner comment elle évite les problèmes de la méthode directe.

Comment cela fonctionne

  • Étape 1 : Arduino UNO R4 envoie une requête HTTP au serveur Web
  • Étape 2 : Le serveur Web exécute un script PHP
  • Étape 3 : Le script PHP reçoit les données de la requête HTTP, les traite et interagit avec la base de données MySQL.
  • Étape 4 : Le script PHP traite les résultats et les renvoie à l'Arduino UNO R4 via une réponse HTTP
Arduino UNO R4 MySQL HTTP

Ce guide vous expliquera également comment installer un serveur Web et un serveur MySQL sur votre PC. Cela semble complexe, mais ce ne l'est pas.

Maintenant, explorons comment la méthode indirecte permet d’éviter les inconvénients de la méthode directe.

  • En plaçant le serveur MySQL et le serveur HTTP sur la même machine, vous pouvez configurer le compte utilisateur MySQL pour n'accéder qu'à partir de cette machine. Le nom d'utilisateur et le mot de passe de ce compte sont enregistrés sur le serveur (mentionné à l'étape 3), ce qui contribue à renforcer la sécurité.
  • Un script PHP (étapes 3 et 4) gère le traitement des données. Cela rend les choses plus simples et moins complexes pour l'Arduino UNO R4 et les serveurs MySQL. Utiliser PHP pour le traitement des données est plus facile que d'utiliser le code Arduino UNO R4 ou des scripts MySQL.
  • Le script PHP traite les données puis envoie uniquement ce qui est nécessaire à l'Arduino UNO R4 (étape 4). Cela permet d'éviter que l'Arduino UNO R4 manque de mémoire.
  • La plupart des bibliothèques Ethernet/WiFi prennent en charge TLS/SSL, ce qui permet les requêtes HTTPS. Avec HTTPS, les données sont chiffrées et transférées en toute sécurité sur Internet.

À l'étape 1, vous pouvez utiliser un nom d'utilisateur et un mot de passe différents pour connecter l'Arduino UNO R4 au serveur Web. Il est important que le nom d'utilisateur et le mot de passe HTTP ne soient pas les mêmes que le nom d'utilisateur et le mot de passe MySQL afin de garantir la sécurité.

Ce guide montrera comment connecter l'Arduino UNO R4 à MySQL indirectement.

Arduino UNO R4 - MySQL via HTTP/HTTPS

Nous devons passer à l'étape suivante :

  • Installer le serveur MySQL, le serveur Web et PHP sur votre ordinateur
  • Activer le serveur MySQL et le serveur Web
  • Créer un compte utilisateur MySQL
  • Créer une base de données MySQL
  • Créer une table MySQL
  • Écrire des scripts PHP
  • Programmer l'Arduino UNO R4

Maintenant, prenons cela étape par étape.

Installer le serveur MySQL, le serveur Web et PHP sur votre PC

Le paquet XAMPP contient tout ce qu'il faut. Nous n'avons besoin de l'installer qu'une fois.

  • Téléchargez XAMPP à partir de ce lien
  • Installez-le

Après l'installation, le dossier nommé C:\xampp\htdocs apparaîtra sur votre PC. Ce dossier contiendra le code PHP (qui sera expliqué plus tard).

Activer MySQL et le serveur Web

  • Ouvrez le panneau de configuration XAMPL
  • Cliquez sur le bouton Démarrer pour activer MySQL et le serveur Web (voir l'image ci-dessous)
Arduino UNO R4 XAMPP

Créer un compte utilisateur MySQL

Nous allons configurer un compte MySQL qui ne peut accéder à la base de données MySQL qu'à partir de l'ordinateur local.

  • Même si quelqu'un connaît votre nom d'utilisateur et votre mot de passe, il ne peut pas accéder à votre base de données MySQL à distance.
  • Puisque PHP et MySQL sont sur le même PC, PHP peut utiliser le nom d'utilisateur et le mot de passe pour se connecter à la base de données MySQL.

Créons un compte utilisateur MySQL avec le nom d'utilisateur ArduinoUnoR4 et le mot de passe newbiely.com.

  • Ouvrez l'invite de commandes sur votre ordinateur. Gardez-la ouverte jusqu'à ce que vous ayez terminé le tutoriel.
  • Saisissez cette commande dans l'invite de commandes:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\youruser>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • Le paramètre par défaut de MySQL inclut un compte root qui n'a pas de mot de passe. Il est recommandé de créer un mot de passe pour ce compte.

Tapez la commande suivante dans l'invite de commandes pour définir le mot de passe du compte root : (par exemple YOUR-ROOT-PASSWORD)

mysqladmin -u root password YOUR-ROOT-PASSWORD
Command Prompt
C:\xampp\mysql\bin>mysqladmin -u root password YOUR-ROOT-PASSWORD C:\xampp\mysql\bin>
  • Entrez cette commande dans l'invite de commandes:
mysql.exe -u root -p
  • Entrez 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éer un compte utilisateur MySQL avec le nom d'utilisateur 'ArduinoUnoR4' et le mot de passe 'newbiely.com'. Copiez les commandes suivantes et collez-les dans l'invite de commandes :
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)]>

Vous avez maintenant créé avec succès un compte utilisateur MySQL. Souvenez-vous du nom d'utilisateur et du mot de passe, car vous en aurez besoin pour le script PHP.

Créer une base de données MySQL

Créez une base de données appelée db_arduino en saisissant cette commande dans l'invite de commandes :

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)]>

Créer une table MySQL

Créons une table appelée tbl_temperature. Copiez les commandes suivantes et collez-les dans l'invite de commandes:

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]>

Écrivez un ou plusieurs fichiers PHP

Créez un fichier PHP nommé insert_temp.php à l'emplacement 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"; } ?>

Ce code PHP prend la température à partir de la requête HTTP et l'insère dans la base de données.

  • Trouvez l’adresse IP de votre ordinateur. Faites une recherche sur Google si vous n’êtes pas sûr de la façon de la trouver.
  • Pour vérifier que le code PHP fonctionne, ouvrez un navigateur web (comme Chrome) et allez sur ce lien : http://192.168.0.4/insert_temp.php?temperature=25.3. N'oubliez pas d'utiliser l’adresse IP de votre propre ordinateur au lieu de « 192.168.0.4 ».
  • Vous verrez les résultats s’afficher dans votre navigateur.
Test de MySQL
  • Pour vérifier si les données sont enregistrées dans la base de données, saisissez cette commande dans l'invite de commandes:
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 température 25,3 est enregistrée dans la base de données. Ensuite, nous devons programmer l'Arduino UNO R4 pour envoyer une requête HTTP similaire à votre ordinateur.

Écrire du code Arduino UNO R4

Ce code Arduino UNO R4 envoie une requête HTTP à votre ordinateur pour ajouter une température de 30,5 °C à la base de données.

Arduino UNO R4 Code pour Arduino UNO R4 R4 WiFi

/* * Ce code Arduino UNO R4 a été développé par newbiely.fr * Ce code Arduino UNO R4 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-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() { }

Étapes rapides

Suivez ces instructions étape par étape :

  • Si c'est la première fois que vous utilisez l'Arduino Uno R4 WiFi/Minima, reportez-vous au tutoriel sur Arduino UNO R4 - Installation du logiciel..
  • Connectez la carte Arduino Uno R4 à votre ordinateur à l'aide d'un câble USB.
  • Lancez l'IDE Arduino sur votre ordinateur.
  • Sélectionnez la carte Arduino Uno R4 appropriée (par exemple, Arduino Uno R4 WiFi) et le port COM.
  • Remplacez l'adresse IP dans le code par l'adresse IP de votre ordinateur.
  • Compilez et téléversez le code sur l'Arduino UNO R4.
  • Ouvrez le moniteur série.
  • Affichez la sortie dans 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  
  • Pour vérifier si les informations sont enregistrées dans la base de données, tapez cette commande dans l'invite de commandes :
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 température 30,5 est enregistrée dans la base de données.

Comment Arduino UNO R4 insère, met à jour ou récupère des données dans une base de données MySQL

Dans l'exemple, nous avons appris comment ajouter des données à la base de données MySQL. Pour mettre à jour ou récupérer des données, le processus est similaire. Il suffit de modifier les requêtes MySQL dans le script PHP. Pour plus d'informations, visitez W3Schools.

Utilisation avancée

Pour améliorer la sécurité,

  • Vous pouvez modifier le code de l'Arduino UNO R4 pour utiliser HTTPS plutôt que HTTP. Pour savoir comment faire, consultez Arduino UNO R4 - Requête HTTPS..
  • Vous pouvez vous authentifier en utilisant un nom d'utilisateur et un mot de passe lors de la connexion de l'Arduino UNO R4 à un serveur Web. En savoir plus sur Basic access authentication.

※ Note:

Pour créer un système complet avec une sécurité maximale, nous devons ajouter davantage de fonctionnalités (comme prévenir les injections MySQL, transformer HTTPS en API REST et utiliser le format JSON pour les données). Cependant, ce guide est destiné aux débutants qui apprennent l'Arduino UNO R4. Nous l'avons rendu très simple. Après avoir terminé ce guide, vous pourrez apprendre des sujets plus avancés.

Vidéo

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !