Serveur d'impression

Serveur Web ESP32 Arduino: obtention de l'IP client – Bien choisir son serveur d impression

Le 18 juin 2019 - 7 minutes de lecture

Sommaire

L'objectif de ce message est d'expliquer comment obtenir l'adresse IP d'un client qui contacte un serveur Web HTTP s'exécutant sur l'ESP32, sur le noyau Arduino. Les tests de ce didacticiel ESP32 ont été effectués à l’aide d’un périphérique ESP-WROOM-32 de DFRobot intégré à une carte ESP32 FireBeetle.

introduction

L'objectif de ce message est d'expliquer comment obtenir l'adresse IP d'un client qui contacte un serveur Web HTTP s'exécutant sur l'ESP32, sur le noyau Arduino.

Nous utiliserons les bibliothèques de serveur Web HTTP async que nous avons décrites dans les didacticiels précédents. Donc, une grande partie du code sera similaire à ce que nous avons couvert et nous allons donc nous concentrer sur la fonction de gestion de route où nous allons analyser comment obtenir l’adresse IP des clients qui contactent le serveur.

Si vous n'avez pas suivi les tutoriels précédents, vous pouvez consulter la section «Articles connexes» à la fin de cet article, qui répertorie tous les tutoriels précédents.

Les tests de ce didacticiel ESP32 ont été effectués à l’aide d’un périphérique ESP-WROOM-32 de DFRobot intégré à une carte ESP32 FireBeetle.

Le code

Comme d'habitude, nous commençons par commencer par inclure dans la bibliothèque et la déclaration des variables globales le besoin de se connecter au réseau WiFi et de configurer le serveur Web HTTP asynchrone.

#comprendre 
#comprendre 
#comprendre 
#comprendre 
 
const char * ssid = "yourNetworkName";
const char * password = "yourNetworkPassword";
 
Serveur AsyncWebServer (80);

Ensuite, sur la fonction de configuration Arduino, nous connectons l’ESP32 au réseau WiFi et imprimons son adresse IP locale une fois la connexion établie afin de connaître l’adresse à utiliser pour le contacter.

Nous imprimons quelques nouvelles lignes après afin de séparer l'adresse IP locale de l'ESP32 de celle des clients qui vont le contacter, que nous imprimerons également ensuite.

Serial.begin (115200);
 
WiFi.begin (ssid, mot de passe);
 
while (WiFi.status ()! = WL_CONNECTED) 
    délai (1000);
    Serial.println ("Connexion au WiFi ..");

 
Serial.print ("IP du serveur:");
Serial.println (WiFi.localIP ());
Serial.println (" n  n");

Maintenant que nous avons géré la connexion WiFi, nous devons configurer les itinéraires du serveur. Comme nous l'avons fait dans les didacticiels précédents, nous devons simplement appeler la méthode on sur l'objet serveur, en passant en entrée la route, la ou les méthodes HTTP autorisées sur cette route et la fonction de traitement.

Pour cet exemple, nous appellerons notre route «/ getIp» et écouterons les requêtes HTTP GET. Notez cependant que nous devrions pouvoir imprimer l'adresse IP du client en utilisant cette approche, indépendamment de la méthode HTTP écoutée par notre route.

server.on ("/ printIp", HTTP_GET, [](Demande AsyncWebServerRequest *) 
// Code de la fonction de traitement de la route
);

Nous allons maintenant nous concentrer sur le pointeur d'objet AsyncWebServerRequest accessible dans la fonction de traitement.

Comme nous l’avons vu à travers ces didacticiels, notre serveur Web fonctionne de manière asynchrone. Nous savons également que HTTP fonctionne sur les sockets TCP. Par conséquent, la bibliothèque de serveur Web HTTP asynchrone utilise ce mécanisme pour la communication de niveau inférieur.

Ainsi, l’API du serveur Web nous permet d’accéder à l’objet client de niveau inférieur utilisé pour échanger les données avec le client.

C'est un objet de classe AsyncClient (fichier d'en-tête ici), implémenté dans la bibliothèque AsyncTCP. Comme nous l'avons vu dans le didacticiel d'introduction au serveur Web HTTP, cette bibliothèque TCP asynchrone ESP32 est l'une des dépendances de la bibliothèque de serveur Web asynchrone HTTP. C'est également l'une des bibliothèques que nous avons incluses au début de nos programmes.

Ainsi, pour obtenir l'objet mentionné, nous pouvons appeler la méthode client sur notre pointeur d'objet de requête.

Cette méthode ne prend aucun argument et renvoie un pointeur sur un objet de la classe AsyncClient. Nous pouvons ensuite utiliser ce nouveau pointeur d'objet pour appeler la méthode remoteIP, qui ne prend également aucun argument et renvoie l'adresse IP du client.

Vous pouvez vérifier ci-dessous les appels de méthode mentionnés. Notez que nous renvoyons d’abord la réponse de la requête HTTP au client, puis prenons seulement soin d’obtenir l’IP et de l’imprimer sur la console série. De cette façon, nous ne laisserons pas le client suspendu dans l’attente d’une réponse.

server.on ("/ printIp", HTTP_GET, [](Demande AsyncWebServerRequest *) 
 
    request-> send (200, "text / plain", "ok");
 
    Serial.print ("Demande reçue du client avec IP:");
    Serial.println (request-> client () -> remoteIP ());
);

Pour finaliser notre code, nous devons toujours appeler la méthode begin sur l'objet serveur afin qu'il commence à écouter les requêtes HTTP entrantes. Vous pouvez vérifier le code source complet ci-dessous.

#comprendre 
#comprendre 
#comprendre 
#comprendre 
 
const char * ssid = "yourNetworkName";
const char * password = "yourNetworkPassword";
 
Serveur AsyncWebServer (80);
 
void setup()
  Serial.begin (115200);
 
  WiFi.begin (ssid, mot de passe);
 
  while (WiFi.status ()! = WL_CONNECTED) 
    délai (1000);
    Serial.println ("Connexion au WiFi ..");
  
 
  Serial.print ("IP du serveur:");
  Serial.println (WiFi.localIP ());
  Serial.println (" n  n");
 
  server.on ("/ printIp", HTTP_GET, [](Demande AsyncWebServerRequest *) 
 
    request-> send (200, "text / plain", "ok");
 
    Serial.print ("Demande reçue du client avec IP:");
    Serial.println (request-> client () -> remoteIP ());
  );
 
  server.begin ();

 
void loop () 

Tester le code

Pour tester le code, nous devons suivre la procédure habituelle. Tout d'abord, nous compilons et téléchargeons le code sur l'ESP32 à l'aide de l'IDE Arduino.

Une fois la procédure terminée, ouvrez le moniteur série et copiez l'adresse IP imprimée. Ensuite, ouvrez un navigateur Web de votre choix et tapez ce qui suit dans la barre d’adresse, en changeant # yourDeviceIp # par l’adresse IP que vous venez de copier.

http: // # yourDeviceIp # / printIp

Dans votre navigateur Web, vous devriez obtenir la réponse «ok» définie dans le code. Si vous revenez au moniteur série, un message similaire à celui illustré à la figure 1 devrait être imprimé, contenant l'adresse IP locale de l'ordinateur avec lequel vous avez contacté l'ESP32.

Figure 1 – IP des clients en cours d’impression.

Dans mon cas, j’ai testé la demande à partir de deux ordinateurs différents et, comme le montre la figure, j’ai eu deux adresses IP différentes. J’ai également inclus dans la figure un extrait de l’adresse IP locale du premier PC, qui correspond à celle imprimée dans la console.

Si vous êtes sous Windows, vous pouvez obtenir l'adresse IP de votre ordinateur en ouvrant une fenêtre de ligne de commande et en utilisant la commande ipconfig. Sous Linux, vous devez utiliser le ifconfig commander.

Commentaires

Laisser un commentaire

Votre commentaire sera révisé par les administrateurs si besoin.