Arduino - Mot de passe du serveur Web

Dans ce tutoriel, nous allons apprendre à créer un serveur web Arduino sécurisé qui nécessite un nom d'utilisateur et un mot de passe pour se connecter. Avant d'accéder à toute page web hébergée sur l'Arduino, les utilisateurs devront saisir leur nom d'utilisateur et leur mot de passe.

Nom d'utilisateur et mot de passe du serveur web Arduino

Préparation du matériel

1×Arduino UNO R4 WiFi
1×USB Cable Type-C
1×(Optional) 9V Power Adapter for Arduino
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

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.

À propos d'Arduino et du serveur Web

Si vous n'êtes pas familiarisé avec Arduino et serveur Web (y compris le schéma des broches, leur fonctionnement et la programmation), vous pouvez en apprendre davantage à leur sujet grâce aux tutoriels suivants :

Code Arduino - Nom d'utilisateur/mot de passe du serveur Web

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino 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/arduino-web-server-password */ #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) int status = WL_IDLE_STATUS; WiFiServer server(80); const char* www_username = "admin"; const char* www_password = "arduino"; void setup() { Serial.begin(9600); delay(1000); 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 5 seconds for connection: delay(5000); } server.begin(); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (client) { Serial.println("Client connected"); boolean authorized = checkAuthorization(client); if (authorized) { Serial.println("Client is authorized"); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); // replaced by your HTML code here: client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head><title>Arduino Web Server</title></head>"); client.println("<body>"); client.println("<h1>Login Successful!</h1>"); client.println("<p>You are now logged in.</p>"); client.println("</body>"); client.println("</html>"); } else { Serial.println("Client is unauthorized"); client.println("HTTP/1.1 401 Unauthorized"); client.println("WWW-Authenticate: Basic realm=\"Arduino\""); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<head><title>401 Unauthorized</title></head>"); client.println("<body><h1>401 Unauthorized</h1></body>"); client.println("</html>"); } // Close the connection delay(1); client.stop(); Serial.println("Client disconnected"); } } boolean checkAuthorization(WiFiClient client) { boolean authorized = false; while (client.connected()) { String header = client.readStringUntil('\n'); //Serial.println(header); if (header.startsWith("Authorization:")) { String encodedCreds = header.substring(21, header.length() - 1); String decodedCreds = base64_decode(encodedCreds); String userPass = String(www_username) + ":" + String(www_password); if (decodedCreds.equals(userPass)) { authorized = true; } } else if (header == "\r") { // Detect empty line to break break; } } return authorized; } String base64_decode(String input) { String decoded = ""; int padding = 0; for (int i = 0; i < input.length(); i += 4) { long value = 0; for (int j = 0; j < 4; j++) { value = value << 6; if (input[i + j] == '=') { padding++; } else { if (input[i + j] >= 'A' && input[i + j] <= 'Z') { value += input[i + j] - 'A'; } else if (input[i + j] >= 'a' && input[i + j] <= 'z') { value += input[i + j] - 'a' + 26; } else if (input[i + j] >= '0' && input[i + j] <= '9') { value += input[i + j] - '0' + 52; } else if (input[i + j] == '+') { value += 62; } else if (input[i + j] == '/') { value += 63; } } } for (int j = 0; j < 3 - padding; j++) { char c = (value >> ((2 - j) * 8) & 0xFF); decoded += c; } } return decoded; }

Étapes rapides

  • Si c'est la première fois que vous utilisez un Arduino Uno R4, consultez comment configurer l'environnement pour Arduino Uno R4 sur Arduino IDE.
  • Connectez la carte Arduino à votre PC via un câble micro USB.
  • Ouvrez Arduino IDE sur votre PC.
  • Sélectionnez la bonne carte Arduino et le port COM approprié.
  • Copiez le code ci-dessus et ouvrez-le avec Arduino IDE.
  • Modifiez les informations wifi (SSID et mot de passe) dans le code pour les vôtres.
  • Cliquez sur le bouton Upload dans Arduino IDE pour téléverser le code sur Arduino.
  • Ouvrez le moniteur série.
  • Vérifiez le résultat sur le moniteur série.
COM6
Send
Connecting to WiFi... Connected to WiFi Arduino Web Server's IP address: 192.168.0.3
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vous verrez une adresse IP sur le moniteur série, par exemple : 192.168.0.3
  • Tapez l'adresse IP dans la barre d'adresse d'un navigateur web sur votre smartphone ou PC.
  • Veuillez noter que vous devez changer le 192.168.0.3 pour l'adresse IP que vous avez obtenue sur le moniteur série.
  • Vous verrez une page qui vous invite à saisir un nom d'utilisateur/mot de passe.
Mot de passe de la page Web Arduino
  • Tapez le nom d'utilisateur/mot de passe qui sont dans le code Arduino, dans ce cas : admin comme nom d'utilisateur, arduino comme mot de passe
  • Si vous saisissez correctement le nom d'utilisateur/le mot de passe, le contenu web de l'Arduino sera affiché :
Connexion à la page Web Arduino

※ NOTE THAT:

  • Vous pouvez ajuster le nom d'utilisateur et le mot de passe pour votre site web directement dans le code en modifiant les valeurs attribuées à deux variables : www_username et www_password.
  • Vous avez la flexibilité de personnaliser ce code en ajoutant votre propre HTML, CSS et JavaScript pour concevoir votre page web selon vos préférences.
  • Il est important de noter que dans le code lui-même, il n'y a pas de code HTML spécifique pour le formulaire de connexion où les utilisateurs saisissent leur nom d'utilisateur et leur mot de passe. Ne soyez pas surpris par cela ! Au lieu de cela, le formulaire de connexion est généré dynamiquement par le navigateur web lorsque nécessaire.

Connaissances avancées

Cette section fournit des informations détaillées sur le fonctionnement du système de nom d'utilisateur/mot de passe sans HTML pour le formulaire de connexion :

  • Lorsque vous saisissez initialement l'adresse IP de l'Arduino dans un navigateur web, le navigateur envoie une requête à l'Arduino via HTTP, mais sans aucun détail d'identifiant/mot de passe.
  • En recevant cette requête, le code de l'Arduino vérifie si des identifiants/mot de passe sont inclus. S'il n'en trouve aucun, l'Arduino ne répond pas avec le contenu de la page. Au lieu de cela, il renvoie un message HTTP avec des en-têtes instruisant le navigateur de demander à l'utilisateur son identifiant/mot de passe. Importamment, cette réponse ne contient pas de code HTML pour le formulaire de connexion.
  • Lorsque le navigateur reçoit cette réponse, il interprète les en-têtes HTTP et comprend que l'Arduino demande un identifiant/mot de passe. Par conséquent, le navigateur crée dynamiquement un formulaire de connexion pour que l'utilisateur puisse entrer ses identifiants.
  • L'utilisateur entre alors son identifiant/mot de passe dans ce formulaire.
  • Le navigateur inclut l'identifiant/mot de passe saisi dans une requête HTTP et la renvoie à l'Arduino.
  • L'Arduino vérifie l'identifiant/mot de passe inclus dans la requête HTTP. S'ils sont corrects, il fournit le contenu de la page demandée. S'ils sont incorrects, le processus est répété, invitant l'utilisateur à saisir à nouveau les bons identifiants.
  • Une fois que l'utilisateur saisit correctement son identifiant/mot de passe pour la première fois, les requêtes ultérieures ne lui demandent pas de réentrer les détails. Ceci est dû au fait que le navigateur sauvegarde automatiquement les identifiants et les inclut dans les requêtes suivantes.

※ 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!