Adresse IP d'un ESP8266 : fixe ou variable

Bonjour,

Si j'ai bien compris, un ESP8266 a une adresse IP variable (qui change par exemple quand l'ESP est déconnecté du Wifi).

Peut-on faire une manipulation pour que l'adresse IP soit toujours la même, même après déconnection du Wifi ? Si oui, quel est le code pour le faire ?

Cdt

Votre ESP peut soit rejoindre un réseau Wi-Fi existant, soit créer son propre réseau sans fil (que les appareils devront rejoindre pour discuter avec lui)

  • Si vous créez le réseau, vous pouvez prendre l'adresse IP que vous voulez
  • Si vous rejoignez un réseau, le plus souvent l'adresse IP vous sera allouée par votre box internet, (attribution automatique d'une adresse IP à tout appareil qui rejoint le réseau et en a besoin par DHCP), mais vous pouvez aussi allouer une adresse autorisée fixe sur votre box pour l'ESP comme cela il aura toujours la même, ou câbler en dur une adresse dans l'ESP mais si d'aventure cette IP est allouée à un autre appareil par le routeur vous aurez des soucis réseau

la vraie question est sans doute "pourquoi voulez vous la fixer" ?

Pour créer un projet de domotique (par exemple allumer une lampe par l'ESP8266), il faut que l'ESP8266 rejoigne le réseau Wifi existant pour le contrôler d'où on veut.(sauf erreur de ma part)

ATTRIBUER UNE IP FIXE :

  • Donc quelle est la manip pour attribuer une IP fixe à l'ESP ? Si il n'y a que ordis et téléphones qui se connectent au réseau Wifi, y a-t-il un risque de soucis quelconques ?

OU

SINON ADRESSE VARIABLE :

  • Est ce qu'il est possible de :
  1. connecter l'ESP en wifi à une box (donc il aura une certaine IP attribuée par la Box)
  2. L'ESP pour une raison ou une autre se déconnecte (par exemple, la box s'éteint), puis se reconnecte automatiquement (est-ce possible ?)
  3. L'ESP a donc une nouvelle adresse IP
  4. Comment faire pour la récupérer pour pouvoir contrôler à nouveau l'ESP ?
  5. Si j'utilise quelque chose comme Domoticz (où je crois il y a besoin d'entrer l'IP du module), suis-je obligé de entrer la nouvelle IP à chaque problème de connexion de Box wifi ?
  1. Oui
  2. pas nécessairement nouvelle ....
    l'ESP8266 peut à la connection choisir son adresse ip
    Celle ci peut également être rendue fixe paramétrage de la box qui associe alors de manière constante adresse ip et adresse MAC
  3. si l'adresse ip est fixe elle est connue d'avance, on sait où se connecter.

Vous pouvez dire à votre Box de toujours donner la même adresse IP à votre ESP
la façon de faire dépend de votre Box mais en gros on associe l'adresse MAC de l'ESP à une adresse IP fixe. Quand votre box voit une demande d'adresse IP en provenance de cette adresse MAC, il lui donne celle que vous avez choisie

Et comment on peut faire ça (au niveau du code) ?

Autre question :
Est ce que pour lancer une requête à un serveur partir le l'ESP8266, on utilise cette commande :
http.begin(client, "http://serveur/") ?

Tprog:
Et comment on peut faire ça (au niveau du code) ?

bonjour
un déjà vieux bout de code pour esp8266
pour affecter une IP fixe en mode softAP (autre que le 192.162.4.1) et IP FIXE en mode STA
Si je me souviens bien, il y a un piege : il faut imperativement lancer la config AP avant la config STA , l'inverse ne fonctionne pas

#include <ESP8266WiFi.h>



void setup() {



  Serial.begin(115200);

  confap();

  confsta();


  delay(10);

  scannw();
  Serial.println();
  Serial.print("Flash Size = ");
  Serial.println(ESP.getFlashChipSize());

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  //  Serial.println(ssid);

  while (WiFi.status() != WL_CONNECTED) {        //  wait until connected
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
//  server.begin();                                // Start the server
  Serial.println("Server started");
  
  WiFi.printDiag(Serial);


}
void loop() {



}





void scannw()
{
  // scan network

  Serial.println("scan start");

  // WiFi.scanNetworks will return the number of networks found
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n == 0)
    Serial.println("no networks found");
  else
  {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
      delay(10);
    }
  }
}

void confap() {

  const char *apssid = "ESP8266 AP";
  const char *appassword = "";
  Serial.println();
  Serial.print("SOFTAP SSID = ");
  Serial.println(apssid);
  Serial.print("SOFTAP PASSWORD = ");
  Serial.println(appassword);

  Serial.print("Configuring access point...");
  IPAddress APIp(189, 32, 16, 8);  // ok IP FIXE SOFT AP
  IPAddress NMask(255, 255, 255, 0);

  WiFi.softAPConfig(APIp, APIp, NMask);
  WiFi.softAP(apssid, appassword);



  Serial.print("MAC AP : ");
  Serial.println(WiFi.softAPmacAddress());
  Serial.print("AP IP address: ");
  Serial.println(WiFi.softAPIP());



}

void confsta() {
  const char* ssid = "azerty";                //  SSID of LAN/WLAN
  const char* password = "pw";        //  password
  const int port = 80;                           //  port to serve pages through
  WiFiServer server(port);
  IPAddress ip(192, 168, 1, 130); // OK IP fixe STA
  IPAddress gateway(192, 168, 1, 1);
  IPAddress subnet(255, 255, 255, 0);
  WiFi.begin(ssid, password);
  WiFi.config(ip, gateway, subnet);
  Serial.print("MAC STA : ");
  Serial.println(WiFi.macAddress());
  Serial.print("STA IP address: ");
  Serial.println(WiFi.localIP());
}

Bonjour Artouste

ip fixe en mode Station , je me contente de ce genre de ligne

WiFi.config(IPAddress(192, 168, 1, 12), IPAddress(192, 168, 1, 254), IPAddress(255, 255, 255, 0), IPAddress(192, 168, 1, 254));

Pour les requêtes d'un client le mieux est d'étudier les divers exemples disponibles deans l(IDE Arduino doté de l'extension ESP8266, à commencer par BasicHttpClient

La documentation de référence est ici : ESP8266WiFi library — ESP8266 Arduino Core 3.1.1-19-gbe02af05 documentation

Hello

deux pistes:
sur l'équivalent d'une box (BE) je peux avec la MAC address de l'ESP ajouter une IP fixe. Donc peut-être regarder dans les paramètres de la box comment lier une MAC avec une IP?
La MAC address est affichée lorsque tu load un sketch.

Autre solution, associer un Name à l'ESP:

//au début du .ino, ajouter:
#include <ESPmDNS.h>   // header pour esp32  !! 1 seul des deux !!
#include <ESP8266mDNS.h>  //  header pour esp8266
const char* host = "web32_02";      // le nom que tu veux...
...

// dans la fonction setup() ajouter à la fin(après la connection wifi etc...) !!!
MDNS.begin(host);

Dans le browser: appeler l'url suivante

http://web32_02/

Pour avoir les caractéristiques de l'esp connecté - tu peux avec python et en ligne de commande y accéder facilement.
Avoir une version de python récente
y ajouter la librairie esptool : pip install esptool
Lancer en ligne de commande (répertoire scripts si tu as plusieurs version de python) la commande suivante:
(je suis sous windows donc esptool est un exe, sous d'autres os peut-être indiquer esptool.py)

esptool flash_id

C:\Winutils\DevUtils\Python38\Scripts>esptool flash_id
esptool.py v2.8
Found 2 serial ports
Serial port COM4
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Crystal is 26MHz
MAC: 84:f3:eb:e3:93:25
Uploading stub...
Running stub...
Stub running...
Manufacturer: ef
Device: 4016
Detected flash size: 4MB
Hard resetting via RTS pin...

C:\Winutils\DevUtils\Python38\Scripts>

A+ D.

C'est génial ça !
Donc au tout début de mon programme j'écris ça :

//au début du .ino, ajouter:
#include <ESPmDNS.h>   // le header kivabien
const char* host = "web32_02";      // le nom que tu veux...
...

A la toute fin de setup () je mets :

// dans la fonction setup() ajouter à la fin(après la connection wifi etc...) !!!
MDNS.begin(host);

Et après, déconnexion, extinction, extinction de la box... je pourrai toujours me connecter avec http://web32_02/... !

J'ai tout bien compris ?

J'imagine que c'est compatible avec Domoticz ?

Pour contacter une machine par son nom (par ex. "forum.arduino.cc") il est nécessaire de transformer ce nom en une adresse IP numérique (104.20.190.47).
Il y a plusieurs méthodes :

  • des méthodes qui dépendent complètement du système d'exploitation (Win, MacOS, Linux), la plus simple étant d'avoir un fichier "hosts" qui contient une liste de correspondances nom/IP.
  • la méthode générale du DNS. Un DNS (Domain Name Server) est un serveur joignable sur le réseau qui connaît les adresses IP de nombreuses machines (ou sites).

Quand dans ton navigateur tu tapes un nom de machine, le navigateur envoie ce nom au DNS qui fournit l'adresse IP en retour. En suite le navigateur contacte directement le site grâce à cette adresse.

Pour que ça marche il faut donc :

  • qu'un DNS soir accessible sur le réseau
  • que ton système connaisse l'adresse numérique du DNS (et que celle ci ne change pas !)
  • et que le DNS possède dans ses table la traduction désirée.

Donc quand dans ton navigateur tu vas taper http://web32_02/... ça va répondre ... NOT FOUND !

La méthode du fichier hosts peut marcher ... à condition que tes machines aient une IP fixe.

Je ne vois pas trop l'utilité d'avoir un adresse variable. Les adresses variables c'est bien quand on a un système d'exploitation qui masque tout ça. Pour communiquer d'un Mac à un autre j'ai juste besoin de leurs noms.

Je ne vois pas trop l'intérêt de s'ennuyer à paraméter sa box pour qu"elle délivre toujours la même IP à telle adresse MAC, alors qu'il suffit de choisir un adresse fixe par l'ESP (voir le post #8)

Risque de conflit ? J'ai paramétré ma box pour qu'elle attribue des IP uniquement entre X.Y.Z.20 et X.Y.Z.50. Reste de la place pour créer des adresses fixes.

Je ne vois pas trop l'intérêt de s'ennuyer à paraméter sa box pour qu"elle délivre toujours la même IP à telle adresse MAC, alors qu'il suffit de choisir un adresse fixe par l'ESP (voir le post #8)

L’avantage de paramétrer l’adresse associée à la MAC de l’ESP au niveau de la box c’est qu’on n’a pas a changer le code si vous avez plusieurs petits systèmes à déployer chez vous (disons des capteurs dans plusieurs pieces) vous n’aurez qu’un seul code à maintenir et pousser sur vos modules.

Et si vos potes vous disent “trop cool, tu peux m’en faire trois” vous n’avez pas à changer le code non plus si le réseau d’installation est en 10.0.0.x ou en 192.168.a.x (tout réseau qui utilise les plages d'adressage IP définies par la RFC 6761).

Bref ça permet d’ajouter une couche d’indirection que l’on gère de manière centralisée.

la méthode simplifiée du message #8 , dans la quelle l'ESP 'renvendique' un adresse ip , je ne l'utilise que quand j'ai la flemme d'entrer dans le menu de configuration de la Freebox, dans le cas d'un test rapide !!

Je trouve plus rationnelle la gestion centralisée des adresses ip fixes sur la Box, par adresse MAC

Hello
oui - en tout sur mon router ça fonctionne bien:
J'ai mis une capture en copie (pas trouvé le moyen de l'afficher directement sur le post).
J'ai indiqué "web32test" dans le code et dans le browser : http://web32test/ ou bien http://web32test.local/ - chez moi les deux fonctionnent.

Dans les exemples (arduino, File->Examples->ESP8266mDNS) il y a un browser avec DNS pour t'aider.

Par contre "Domoticz " je ne connais pas donc je ne peux pas t'aider sur ce coup là.

A+ D

Tprog:
C'est génial ça !
Donc au tout début de mon programme j'écris ça :
J'ai tout bien compris ?

J'imagine que c'est compatible avec Domoticz ?

im1.jpg

  1. Si j'utilise quelque chose comme Domoticz (où je crois il y a besoin d'entrer l'IP du module), suis-je obligé de entrer la nouvelle IP à chaque problème de connexion de Box wifi ?

Domoticz se paramètre en entrant un action ON, une action OFF pour un éclairage par exemple :
http://192.168.X.X/?lamp=1&action=ON

Si l'IP est fixe, elle ne change pas, donc cela se fait une fois pour toutes.

OK donc je pense que je vais plutôt partir sur l'adresse IP liée à l'adresse MAC par la box.

Comment je dois faire ça ?

Comment je dois faire ça ?

ça dépend du modèle de Box

Freebox V6 : Paramètres de la Box / DHCP
puis les onglets 'Serveur DHCP' et 'Baux Statiques'

on peut aussi choisir : Périphériques réseau
clic droit sur un appareil connecté ,puis 'Configurer un bail DHCP'

Tprog:
Comment je dois faire ça ?

oui cherchez dans votre Box sur la partie réseau l'onglet DHCP - vous aurez une interface sans doute qui permet de déclarer quelle adresse IP vous voulez pour quelle adresse MAC.

Le plus simple c'est d'avoir pour le DHCP une plage d'adresse par exemple vous dites que de .10 à .150 (à la fin de votre adresse) c'est pour le DHCP et vous mettez tout ce qui doit être fixe en à partir de 151