# ESP8266 : Changer l'adresse IP

**URL:** <https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500>\
**Category:** Français\
**Created:** [May 8, 2019, 6:05pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500 "2019-05-08T18:05:52Z")\
**Posts on this page:** 13\
**Page:** 2

<div class="post-metadata">

**Author:** ![lesept](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/lesept/32/238959_2.png) [@lesept](https://forum.arduino.cc/u/lesept)\
**Post date:** [May 9, 2019, 12:11pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/21 "2019-05-09T12:11:53Z")

</div>

Le cas d'usage est le suivant : j'écris des fonctions pour commander à distance des prises connectées Sonoff S26. J'allume / éteint, je demande l'IP, je fais clignoter la led... Ceci depuis un browser ou un EPS32.

Il y a un serveur qui tourne sur chaque prise connectée. Chaque prise doit avoir une IP fixe différente. Donc soit je la code en dur dans le code du serveur, qui est alors spécifique pour chaque prise (un peu lourd d'utilisation), soit je me donne une instruction à envoyer au serveur pour la fixer via le browser ou l'ESP.

C'est ce que je cherche à faire en ce moment...

La box confirme que l'IP ne change pas.

---

<div class="post-metadata">

**Author:** ![bricoleau](https://avatars.discourse-cdn.com/v4/letter/b/ac8455/32.png) [@bricoleau](https://forum.arduino.cc/u/bricoleau)\
**Post date:** [May 9, 2019, 12:14pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/22 "2019-05-09T12:14:28Z")

</div>

> lesept:  
> C'est l'instruction
> 
> ```arduino
> Serial.print(WiFi.localIP());
> 
> ```
> 
> qui me l'indique, et quand j'essaye de me connecter sur la nouvelle adresse, elle ne répond pas.

ah oui alors effectivement c'est le circuit wifi de l'esp qui n'a pas changé d'ip.

De toute manière la box n'affiche peut-être que les périhériques qui sont passés par son serveur DHCP pour avoir une adresse ip, auquel cas les allocations statiques sont invisibles.

Normalement cela ne pose pas de problème de fonctionner en ip statique codée en dur dans l'ESP sans passer par une phase de négociation avec le DHCP du réseau local.

Un tel fonctionnement permet de gagner du temps au démarrage, mais attention il faut quand même réserver l'ip au niveau du DHCP de la box (au pire avec une MAC bidon), pour éviter que celle-ci l'attribue à un autre périphérique et éviter ainsi les conflits sur le réseau local.

---

<div class="post-metadata">

**Author:** ![bricoleau](https://avatars.discourse-cdn.com/v4/letter/b/ac8455/32.png) [@bricoleau](https://forum.arduino.cc/u/bricoleau)\
**Post date:** [May 9, 2019, 12:20pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/23 "2019-05-09T12:20:11Z")

</div>

> lesept:  
> Le cas d'usage est le suivant : j'écris des fonctions pour commander à distance des prises connectées Sonoff S26. J'allume / éteint, je demande l'IP, je fais clignoter la led... Ceci depuis un browser ou un EPS32.
> 
> Il y a un serveur qui tourne sur chaque prise connectée. Chaque prise doit avoir une IP fixe différente. Donc soit je la code en dur dans le code du serveur, qui est alors spécifique pour chaque prise (un peu lourd d'utilisation), soit je me donne une instruction à envoyer au serveur pour la fixer via le browser ou l'ESP.
> 
> C'est ce que je cherche à faire en ce moment...

J'ai l'impression que ton problème est une gestion d'annuaire, configurable dynamiquement.

Techniquement, qu'est-ce qui différencie un sonoff d'un autre ?  
Uniquement son adresse MAC ?

---

<div class="post-metadata">

**Author:** ![al1fch](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/al1fch/32/979602_2.png) [@al1fch](https://forum.arduino.cc/u/al1fch)\
**Post date:** [May 9, 2019, 12:25pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/24 "2019-05-09T12:25:04Z")

</div>

ce code testé vite fait donne un 'zapping IP' qui parait à première re vue fonctionnel,l'IP annoncée par l'ESP8266 change... je n'ai pas testé plus à fond le fonctionnement réel (agir par exemple en client HTTP pour joindre un site distant)

PS : je réclame alternativement deux adresses IP (40 et 41 ) hors zone recommandée (\>50 chez moi) et n'ai pas créé de baux statiques, ce n'est pas l'idéal, ma Freeebox (tolérante) se laisse faire et donne les adresses successives 🙂

```cpp
#include <ESP8266WiFi.h>

// paramètres du point d'accès
const char* ssid    = "Freebox-XXXXXX";
const char* password = "motdepasse";

void setup() {

  Serial.begin(115200);
  Serial.println();
  Serial.println("Zapping IP");
  WiFi.mode(WIFI_OFF);

}

//////////////////////////////////////////////////////
void loop() {

  WiFi.mode(WIFI_STA);
  delay(100);

  WiFi.config(IPAddress(192, 168, 1, 40), IPAddress(192, 168, 1, 254), IPAddress(255, 255, 255, 0), IPAddress(192, 168, 1, 254));
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }

  Serial.println(WiFi.localIP());
  delay (5000);
  Serial.println("deconnection");
  WiFi.disconnect();
  delay(100);
  WiFi.mode(WIFI_OFF);
  delay(1000);

  // on zappe
  WiFi.mode(WIFI_STA);
  delay(100);

  WiFi.config(IPAddress(192, 168, 1, 41), IPAddress(192, 168, 1, 254), IPAddress(255, 255, 255, 0), IPAddress(192, 168, 1, 254));
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }

  Serial.println(WiFi.localIP());
  delay (5000);
  Serial.println("deconnection");
  WiFi.disconnect();
  delay(100);
  WiFi.mode(WIFI_OFF);
  delay(1000);
}

```

---

<div class="post-metadata">

**Author:** ![lesept](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/lesept/32/238959_2.png) [@lesept](https://forum.arduino.cc/u/lesept)\
**Post date:** [May 9, 2019, 12:41pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/25 "2019-05-09T12:41:52Z")

</div>

Oui, l'adresse MAC change d'un module à l'autre. Il y a peut-être d'autres différences, je n'en sais pas plus

Al1 : je vais tester, merci

---

<div class="post-metadata">

**Author:** ![al1fch](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/al1fch/32/979602_2.png) [@al1fch](https://forum.arduino.cc/u/al1fch)\
**Post date:** [May 9, 2019, 12:57pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/26 "2019-05-09T12:57:58Z")

</div>

+ajout d'un client HTTP vers [djxmmx.net](http://djxmmx.net) (exemple WiFIClient de l'IDE)

le client HTTP se connecte bien au site distant via les deux adresses IP alternées

```cpp
#include <ESP8266WiFi.h>

// paramètres du point d'accès
const char* ssid     = "Freebox-XXXXXX
const char* password = "motdepasse";

const char* host = "djxmmx.net";
const uint16_t port = 17;

void setup() {

  Serial.begin(115200);
  Serial.println();
  Serial.println("Zapping IP");
  WiFi.mode(WIFI_OFF);

}

//////////////////////////////////////////////////////
void loop() {

  WiFi.mode(WIFI_STA);
  delay(100);

  WiFi.config(IPAddress(192, 168, 1, 40), IPAddress(192, 168, 1, 254), IPAddress(255, 255, 255, 0), IPAddress(192, 168, 1, 254));
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }

  Serial.println(WiFi.localIP());
  delay (1000);

  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  if (!client.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }

  // This will send a string to the server
  Serial.println("sending data to server");
  if (client.connected()) {
    client.println("hello from ESP8266");
  }

  // wait for data to be available
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      delay(60000);
      return;
    }
  }

  // Read all the lines of the reply from server and print them to Serial
  Serial.println("receiving from remote server");
  // not testing 'client.connected()' since we do not need to send data here
  while (client.available()) {
    char ch = static_cast<char>(client.read());
    Serial.print(ch);
  }
  

  Serial.println("deconnection");
  WiFi.disconnect();
  delay(100);
  WiFi.mode(WIFI_OFF);
  delay(1000);

  // on zappe
  WiFi.mode(WIFI_STA);
  delay(100);

  WiFi.config(IPAddress(192, 168, 1, 41), IPAddress(192, 168, 1, 254), IPAddress(255, 255, 255, 0), IPAddress(192, 168, 1, 254));
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(100);
    Serial.print(".");
  }

  Serial.println(WiFi.localIP());
  delay (1000);

  // Use WiFiClient class to create TCP connections
  WiFiClient client2;
  if (!client2.connect(host, port)) {
    Serial.println("connection failed");
    delay(5000);
    return;
  }

  // This will send a string to the server
  Serial.println("sending data to server");
  if (client2.connected()) {
    client2.println("hello from ESP8266");
  }

  // wait for data to be available
  unsigned long timeout2 = millis();
  while (client2.available() == 0) {
    if (millis() - timeout2 > 5000) {
      Serial.println(">>> Client Timeout !");
      client2.stop();
      delay(60000);
      return;
    }
  }

    // Read all the lines of the reply from server and print them to Serial
  Serial.println("receiving from remote server");
  // not testing 'client.connected()' since we do not need to send data here
  while (client2.available()) {
    char ch = static_cast<char>(client2.read());
    Serial.print(ch);
  }

  Serial.println("deconnection");
  WiFi.disconnect();
  delay(100);
  WiFi.mode(WIFI_OFF);
  delay(1000);
}

```

```cpp
4:58:47.193 -> ..............................192.168.1.40
14:58:48.957 -> sending data to server
14:58:49.057 -> receiving from remote server
14:58:49.057 -> "Assassination is the extreme form of censorship."
14:58:49.057 ->  George Bernard Shaw (1856-1950)

14:58:50.855 -> ..............................192.168.1.41
14:58:55.780 -> sending data to server
14:58:55.914 -> receiving from remote server
14:58:55.914 -> "My spelling is Wobbly.  It's good spelling but it Wobbles, and the letters
14:58:55.914 ->  get in the wrong places." A. A. Milne (1882-1958)
14:58:57.710 -> ..............................192.168.1.40
14:59:02.668 -> sending data to server
14:59:02.768 -> receiving from remote server
14:59:02.768 -> "Assassination is the extreme form of censorship."
14:59:02.768 ->  George Bernard Shaw (1856-1950)

```

......je vois ça comme un amusement, pas comme quelque chose à mettre en place 'pour de vrai' !!

---

<div class="post-metadata">

**Author:** ![lesept](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/lesept/32/238959_2.png) [@lesept](https://forum.arduino.cc/u/lesept)\
**Post date:** [May 9, 2019, 1:00pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/27 "2019-05-09T13:00:23Z")

</div>

ça fonctionne aussi chez moi ! Trop fort !

> Zapping IP  
> .......................................192.168.1.51  
> deconnection  
> ..............................192.168.1.56  
> deconnection  
> ..............................192.168.1.51  
> deconnection  
> ..............................192.168.1.56

La différence c'est le '1' dans les adresses

- toi : 192.168.1.51
- moi : 192.168.0.51  
Je vais tester mon code en m'inspirant du tien.

---

<div class="post-metadata">

**Author:** ![bricoleau](https://avatars.discourse-cdn.com/v4/letter/b/ac8455/32.png) [@bricoleau](https://forum.arduino.cc/u/bricoleau)\
**Post date:** [May 9, 2019, 1:09pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/28 "2019-05-09T13:09:52Z")

</div>

Je crois comprendre ce que tu veux faire.  
En particulier, tu souhaites reprogrammer l'ESP de chaque sonoff avec un code unique, c'est bien ça?

Normalement tu n'as pas besoin de bidouiller de la sorte les adresse ip.  
Les adresses MAC sont justement faites pour éviter cela.

La solution basique est :

1. faire ton annuaire sur papier : par exemple l'adresse ip xxx.xxx.xxx.100 correspond à la prise du salon, etc.
2. paramétrer ta box pour qu'elle attribue systématiquement cette adresse ip à l'adresse MAC du sonoff que tu vas installer sur la prise du salon

Ainsi, le code uploadé dans chaque sonoff n'a plus à se préoccuper de sa propre adresse ip.  
Seul le code de ton module de commande central devra intégrer un paramétrage qui lui permet de savoir que la prise du salon est à l'adresse ip xxx.xxx.xxx.100

Après tu peux sophistiquer l'apprentissage, la détection automatique de tous les sonoff présents sur ton réseau local, leur donner un nom plus parlant comme "Prise du salon", etc.  
Toujours avec un code unique pour tous les sonoff.

---

<div class="post-metadata">

**Author:** ![bricoleau](https://avatars.discourse-cdn.com/v4/letter/b/ac8455/32.png) [@bricoleau](https://forum.arduino.cc/u/bricoleau)\
**Post date:** [May 9, 2019, 1:20pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/29 "2019-05-09T13:20:11Z")

</div>

En passant, je travaille actuellement sur un truc susceptible de t'intéresser

Avant de mettre de l'ESP un peu partout dans ma maison, je souhaite mettre en place une infra digne de ce nom, qui me permette de suivre le bon fonctionnement de chaque élément.

En particulier, ce qui me manque avec ces IOT, c'est le bon vieux terminal Série dans lequel on peut avoir des messages de debug.  
Alors je suis en train de monter une log centralisée sur un raspberry pi qui trainait dans un carton.

Côté programmation arduino/ESP, c'est bêtement du netlog.print() ou println(), la même chose qu'un Serial.print

Sauf que derrière, cela enregistre toutes les lignes dans une table mysql sur le raspi, indexées par périphérique et timestamp, avec un petit serveur web qui permet de les consulter.

---

<div class="post-metadata">

**Author:** ![lesept](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/lesept/32/238959_2.png) [@lesept](https://forum.arduino.cc/u/lesept)\
**Post date:** [May 9, 2019, 1:28pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/30 "2019-05-09T13:28:37Z")

</div>

@Al1 : j'ai eu une frayeur parce ton code marchait bien avec les adresses en ...1.51 et lorsque j'ai mis ces adresses dans mon code avec le serveur, impossible de se connecter sur ledit serveur ! Alors je suis revenu en ...0.51 et tout fonctionne ! Merci du coup de main.

Le problème devait venir des delays répartis entre les commandes Wifi.

@Bricoleau : Comme tu le vois, je débute pour ces aspects réseau, je veux juste faire un système de simulation de présence (allumage de lampes un peu partout dans la maison, à des heures spécifiées). Ce problème d'IP vient du fait que je veux éviter de me tromper lorsque je vais programmer les prises une par une. Si le code est le même pour toutes et que je peux modifier les paramètres à la main, c'est plus sûr.

Mais je n'ai pas les connaissances pour en faire plus, ni le besoin pour l'instant.

Merci de votre aide !

---

<div class="post-metadata">

**Author:** ![bricoleau](https://avatars.discourse-cdn.com/v4/letter/b/ac8455/32.png) [@bricoleau](https://forum.arduino.cc/u/bricoleau)\
**Post date:** [May 9, 2019, 1:34pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/31 "2019-05-09T13:34:22Z")

</div>

ok pas de souci

Dans ce cas la solution "basique" évoquée en #27 est probablement celle qui t'amènera le moins de difficultés et de mauvaises surprises

Bonne bidouille 🙂

---

<div class="post-metadata">

**Author:** ![rjnc38](https://avatars.discourse-cdn.com/v4/letter/r/13edae/32.png) [@rjnc38](https://forum.arduino.cc/u/rjnc38)\
**Post date:** [May 9, 2019, 4:30pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/32 "2019-05-09T16:30:34Z")

</div>

Bonjour,  
si tu veux que toutes les stations aient le même code la solution al1fch/bricoleau de baux statiques est une bonne solution, tu les configures tous en DHCP et sur la box tu gère les couples @mac/@ip (à l'intérieur de ta plage DNS il est d'usage d'utiliser les @ hautes de la plage), mais si tu veux te connecter sur chaque serveur individuellement il te faudra connaitre ces @ip ...

La solution mDNS semble résoudre ce dernier besoin (il y a un article bien fait dans Hackable 21), mais pour que le code reste le même sur toutes les stations il faudrait qu'elles récupèrent leur petit nom soit sur un serveur centralisé (ton ESP32) soit dans un fichier spiffs (répertoire data de ton projet sonoff) qui ferait l'équivalence @ip/@mDNS (@mDNS=son nom) pour toutes les stations  
ainsi une station :

- se connecte en DHCP sur ton réseau (elle obtient une @IP fixe)
- récupère cette @IP
- cherche dans le fichier son @mDNS correspondante a son @IP
- démarre son service mDNS avec son petit nom

l'ESP32 pourra soit utiliser l'@IP soit l'@mDNS il suffit qu'il ai le même fichier spiffs que les stations

Pour te connecter au serveur d'une station tu n'as pas besoin de te rappeler de chaque @IP tu l'appelle avec "@mDNS.local"

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [May 6, 2021, 3:20pm UTC](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500/33 "2021-05-06T15:20:44Z")

</div>

Closed on May 6, 2021, 3:20pm UTC



[Previous page](https://forum.arduino.cc/t/esp8266-changer-ladresse-ip/590500.md?page=1)
