Tuto Web Serveur ESP 32/8266 et Port Forwarding

mercredi 13 mars 2019.


***Pour revenir à la page d’accueil** ICI

L’objectif est de comprendre puis réaliser un mini serveur Web sur un ESP 32/8266 connecté en WiFi

-  sur une Box Internet ou

-  directement sur un smartphone (Access Point).

Ce serveur est accessible localement mais aussi de n’importe quel endroit via Internet grace à la technique du port forwarding.

On évite ainsi de passer par un intermédiaire en general payant.

Un exemple utilisé quotidiennement de relevé de deux températures sur un navigateur de smartphone est présenté en annexe.

Modèle client /serveur

Dans le modèle client /serveur Web, on peut comparer le client à un client entrant dans un restaurant.

Il appelle un serveur, celui ci réagit en fournissant le menu ( ici une page Web ) au client.

Ensuite le client indique par un clic son choix au serveur.

Le serveur récupère l’information et peut effectuer une action locale : mesure de température, Led ou relais ON/OFF...

Ensuite le serveur peut soit renvoyer la page modifiée ou alors une autre page vers le client.

Dans la suite, le client sera un navigateur (Chrome, Firefox...) et le serveur un ESP 32 en mode WiFi.

Le materiel

L’ESP 32 ( ou son prédécesseur le 8266, compatible) a été choisi pour

-  son WiFi (aussi le Bluetooth, compris la version BLE, basse énergie)

-  la puissance de ses 2 processeurs ( 32 bits, 160/240 MHz, 512 kB RAM,4 MB Flash)

-  mais surtout pour sa compatibilité software avec l’environnement Arduino IDE.

Concrètement, on le programme comme un Arduino, mais en bien plus musclé.

Kit de développement

Un tel kit, environ 8€, se connecte via un cable microUSB (chargeur de telephone) sur un PC qui assure son alimentation (le 5 V du PC est abaissé par le kit en 3.3 V, tension de fonctionnement des ESP ).

Le chargement de la librairie est expliqué en detail sur https://randomnerdtutorials.com/dow...

Ci joint l’inevitable sketch Blink pour tester l’installation : il fait clignoter la led bleue incluse, associée au port GPIO 2 (c’est l’equivalent de D 13 sur l’Arduino qui a lui aussi sa led bleue).

ESP_32_Blink - 453 octets

ESP_32_Blink

Ce sketch provient de https://www.hackster.io/mjrobot/iot... qui est une bonne source de tests élémentaires avec l’ESP 32.

Les variantes entre les kits se retrouvent essentiellement dans la numérotation des entrées/sorties, ce qui est secondaire pour ce tuto.

Nota : si l’on veut creuser un peu sérieusement l’ESP 32, je conseil ce cours de plus de 500 pages, particulièrement clair et copieux, pour le prix d’un demi plein de super !

https://randomnerdtutorials.com/lea...

Un exemple concret de serveur minimal

Pour ce premier exemple de serveur minimal, l’ESP 32 a été programmé avec ce code :

Web_Server_minimal_ESP_8266_ou_32_060119 - 3.4 ko

Web_Server_minimal_ESP_8266_ou_32_060119

Afin de se concentrer sur l’étude de la partie serveur, aucun capteur n’est connecté.

Au démarrage, l’écran du moniteur (réglé à 115200 bps) permet de suivre les évolutions :

-  connexion au réseau local, LAN
-  affiche l’adresse IP que la Box lui a attribué, ici 192.168.0.12

***********Nota ces adresses varient suivant le nombre de périphériques connectés au réseau local*****************

-  mise à l’écoute d’une demande/requête émise par un client c’est à dire un navigateur Web, ici sur PC local ou un smartphone connecté en WiFi.
-  le client entre http://192.168.0.12
-  cette requête arrive sous la forme d’une chaîne de caractères au serveur
-  le serveur compose et envoie en réponse une page Web au client
-  la page s’affiche dans le navigateur

Lorsque l’on clic sur "ICI", la chaîne

GET /maString HTTP/1.1

est transmise au serveur.

Page Web

Celle ci est composée en langage HTML (HyperTextMark-upLanguage). Ce n’est pas un langage de programmation comme le C ou le Java, mais une mise en forme un peu spéciale de lignes de texte au moyen de balises.

Un bonne introduction se trouve sur le site de reference pour le HTML : https://www.w3schools.com/html/defa...

Un exemple plus réaliste de serveur

Source ; https://randomnerdtutorials.com/esp...

Web-Server_ESP32_Rui_Santos_060119 - 6.1 ko

Web-Server_ESP32_Rui_Santos_060119

Le client commande l’état des deux GPIO 26 et 27.

Mode Access Point

Jusqu’ici le serveur ESP 32 était relié au réseau local d’une Box, celle ci jouant le rôle de Point d’Accès (AP ou encore HotSpot).

On va maintenant programmer l’ESP 32 pour qu’il devienne lui même un point d’accès.

Source https://randomnerdtutorials.com/lea... Page 426

Logiciel

Rui_Santos_ESP_WebServer__Access_point - 6.2 ko

Rui_Santos_ESP_WebServer__Access_point
(

Ceci permettra par exemple d’utiliser un smartphone directement comme télécommande, indépendamment de tout autre réseau, Box(routeur) ou Internet.

Les deux seules modifications du code consistent à :

-  remplacer l’identifiant (ssid) de la Box par sa propre appellation, les deux lignes indiquées.Ici on a choisi "Mon-ESP32-en-AP", avec en option un mot de passe (attention 8 caractères au moins).

-  les lignes 39-40

On note l’adresse IP locale, fixe 192.168.4.1

UTILISATION

Sur le smartphone

-  Paramètres/WiFi et on trouve "Mon-ESP32-en-AP"

-  Se connecter, avec mot de passe éventuel

-  Ouvrir le navigateur et entrer 192.168.4.1



Port Forwarding / Transfer de ports

Jusqu’ici le client devait être dans la zone couverte par le WiFi de la Box ou du serveur.Ils devaient être relativement proches.

Pour un dialogue client/serveur sans limitation de distance, l’idéal est de les faire communiquer via le réseau Internet.

Différents services de relais via des sites spécialisés sont proposés sur le marché mais il est tentant de s’en passer en procédant à un simple paramétrage au niveau de la Box : c’est la technique du Port Forwarding / Transfer de ports.

Le principe est d’établir une connexion directe entre client et serveur en passant par l’adresse IP (fixe) de la Box :
-  le client compose cette adresse
-  la Box reçoit cette requête http sur son port 80 (c’est la convention) et comme elle a été paramétrée pour associer le port 80 à l’adresse IP locale du serveur (193.168.12 ici) la liaison client/serveur est établie.

Paramétrage

Le cas d’une Box SFR (ex Numericable) est présenté ici. Voir l’annexe pour d’autres Boxs.

L’adresse de la Box sur le réseau local est typiquement 192.168.0.1 à entrer dans le navigateur.

On prendra note au passage de l’adresse publique de la Box.Si elle est fixe, c’est parfait sinon voir l’Annexe.

Ensuite on accède aux paramètres

De là naviguer entre les rubriques pour arriver au Transfert de Port. Choisir le mode HTTP, les ports 80 et enfin entrer le numéro d’IP local de l’ESP.

En option de sécurité, on peut mettre cette adresse en DMZ (Zone démilitarisée)

Sur la DMZ : https://fr.m.wikipedia.org/wiki/Zon...

Adresse IP locale fixe

On observe que les adresses IP locales distribuées par la Box changent en fonction du nombre de périphériques connectés à un instant donné.

Or le transfert de port associant une IP locale avec l’IP public de la Box, il est indispensable de FIXER cette IP locale.

On commence par lire la valeur de l’adresse MAC de l’ESP 32.

Selon Wikipedia : "Une adresse MAC (Media Access Control), :parfois nommée adresse physique, est un identifiant physique stocké dans une carte réseau ou une interface réseau similaire. À moins qu’elle n’ait été modifiée par l’utilisateur, elle est unique au monde".

On la trouve listée comme ci dessous

Ensuite on recopie cette adresse et choisit une IP dans la fourchette autorisée.

Dorénavant chaque fois que cet ESP 32 se connectera sur cette Box, il se verra attribué l’adresse 192.168.0.42.

Annexe : Adresse IP publique fixe

Selon les fournisseurs d’accès, l’adresse publique d’une Box peut être fixe ou varier dans le temps.

Dans ce dernier cas, on peut utiliser un service tel que :
-  DynDNS
-  noIP
-  dtDNS
-  DNS-O-MATIC

qui attribuent une IP fixe.

Voir par exemple https://homeprotection.fr/content/1...

Annexe : Autres BOXs

LiveBox de chez Orange.

Au lieu de Port Forwarding, ici on utilise NAT et PAT : Network Address Translation, Port Address Translation

Annexe : Relevé de deux températures à distance par smartphone

Les deux capteurs sont de type DS18B20, one wire--Dallas, connectés sur le même port, ici GPIO 5.

La page web se rafraîchit automatiquement, sans intervention de l’utilisateur ni du serveur toutes les 10 secondes.

Nota : un capteur déconnecté affiche -127.

Logiciel

ESP32_8266_WiFi_server_oneWire_temperature_2sondes_020319 - 5.1 ko

ESP32_8266_WiFi_server_oneWire_temperature_2sondes_020319

  q