PB pour imposer une IP local fixe avec EthernetClient ?

Je ne comprends pas car j'ai pompé ce code sur ce forum rubrique references

et ça ne marche pas... je n'arrive pas à forcer l'adresse ip à 192.168.0.25 ou même entre 10 et 50 d'ailleurs, dans le moniteur série il indique "connection failed"

#include <Ethernet.h>
#include <SPI.h>

byte ip[] = { 192, 168, 0, 25};
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] ="www.google.com";

EthernetClient client;

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

    Serial.println("Ethernet ready");
    // print the Ethernet board/shield's IP address:
    Serial.print("My IP address: ");
    Serial.println(Ethernet.localIP());
  
  delay(1000);

  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

alors que lorsque je fais appel au DHCP avec l'instruction : if (Ethernet.begin(mac) == 0) {

et bien là ça marche bien, il trouve une IP 192.168.0.13 et il se connecte au site google...

Si quelqu'un pouvait juste m'aider à comprendre pourquoi ?

#include <Ethernet.h>
#include <SPI.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] ="www.google.com";

EthernetClient client;

void setup()
{
  
  Serial.begin(9600);
// start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    while(true);
  }
  else{
    Serial.println("Ethernet ready");
    // print the Ethernet board/shield's IP address:
    Serial.print("My IP address: ");
    Serial.println(Ethernet.localIP());
  }
  delay(1000);

  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

Ethernet ready
My IP address: 192.168.0.13
connecting...
connected
HTTP/1.0 302 Found
Location: arduino - Google Search
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=9f8a99334a2e55bb:FF=0:TM=1423933551:LM=1423933551:S=M72MwcetpgJYWfgy; expires=Mon, 13-Feb-2017 17:05:51 GMT; path=/; domain=.google.com
Set-Cookie: NID=67=ndHJc7xrhNbPCTTTwaCM9ixSlkZcvYjtayp10yxUNj3QtY_sLAaWmKVYXh_Du9PeEzO6nN_v7E9F720KECGSFRgN7yHH_b9Gw9HAmt78-WR-DrJjAtFev8sb80Wf8aeT; expires=Sun, 16-Aug-2015 17:05:51 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See P3P and Google's cookies - Google Account Help for more info."
Date: Sat, 14 Feb 2015 17:05:51 GMT
Server: gws
Content-Length: 276
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic,p=0.08

302 Moved

302 Moved

The document has moved here.

disconnecting.

quelqu'un peut-il copier coller le 1er code et essayer chez lui si ça marche ?
il faut ouvrir le moniteur série pour voir le resultat.

Merci d'avance les gars !

bonjour,
ta plage dhcp commence ou sur ta box?
il faut mettre une ip fixe en dehors de la plage dhcp déjà

de 10 à 50
mais j'ai aussi essayé de mettre 177 pour voir comme dans l'exemple mais c'est idem

si quelqu'un pouvait juste faire un essai...
merci

azebest:
de 10 à 50
mais j'ai aussi essayé de mettre 177 pour voir comme dans l'exemple mais c'est idem

si quelqu'un pouvait juste faire un essai...
merci

bonjour
test fait sur box orange IP fixe 192.168.1.177
c'est OK chez moi
il faut peut etre chez toi forcer certain parametre de Ethernet.begin du style DNS ou masque
Ethernet.begin(mac, ip, dns, gateway, subnet);

j'ai donc suivi vos conseils et tout rebooter
j'ai pris l'exemple de reference sur le site avec les dns, gateway, etc...
mais ça ne marche pas j'comprends pas bien...

j'ai une freebox y a t il des choses à vérifier sur le routeur ?

azebest:
j'ai donc suivi vos conseils et tout rebooter
j'ai pris l'exemple de reference sur le site avec les dns, gateway, etc...
mais ça ne marche pas j'comprends pas bien...

j'ai une freebox y a t il des choses à vérifier sur le routeur ?

essaie en attribuant un DNS public externe par exemple
google =8.8.8.8

ou autres

si tu fixes l'adresse IP, il faudrait peut être utiliser la forme

Ethernet.begin(mac, IP);

fdufnews:
si tu fixes l'adresse IP, il faudrait peut être utiliser la forme

Ethernet.begin(mac, IP);

oui c'est bien ce que j'ai fait ...
Ethernet.begin (mac, ip, dnServer, gateway, subnet);

j'comprends pas parce que dans un autre code qui marche j'ai ça
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x2E, 0x67 }; // Adresse MAC à adapter en fonction de votre shield
byte ip[] = { 192, 168, 0, 21 }; // Adresse locale à adapter en fonction de votre réseau

EthernetServer server(1234);

void setup()
{

Ethernet.begin(mac, ip);
server.begin();

et ça marche bien
c'est pas un pb de EthernetServer et EthernetClient car dans un cas je suis en client et l'autre server ?
je ne maitrise pas bien tout ça...

bref c'est dommage car j'ai plus qu'un morceau de code pour finir mon projet domotique...

azebest:
bref c'est dommage car j'ai plus qu'un morceau de code pour finir mon projet domotique...

Je comprend que c'est frustrant, mais à ce stade il faut determiner d'où viens le "blocage"
avec orange , je n'ai pas de soucis
avec FREE
si tu es en DHCP ça fonctionne
en IP fixe ça coince
qu'est ce que ça donne si au lieu de faire une resolution de nom de serveur "google.com" , tu affecte directement l'IP du serveur ?
exemple : 74.125.24.139

certains modem adsl n'aprécient pas le dns google 8.8.8.8 ou 8.8.4.4
mieux vaut mettre dans ce cas le dns du modem, c'est a dire le même que le gateway. 192.168.0.1

c'est quoi comme modem adsl?

L'attribution de l'adresse IP fixe fonctionne puisque dans ton terminal, il t'indique l'adresse IP 192.168.0.51 (à partir de la fonction Ethernet.localIP()). Par contre, ce qui ne fonctionne pas, c'est lorsque tu essaies de te connecter à une adresse distante.

N'aurais-tu pas un conflit d'IP ? c.a.d. un autre périphérique sur ton réseau avec la même IP ?

merci pour vos réponses..

1/ pour mon projet domotique, je ne souhaite pas me connecter sur le site google, c'est juste que dans l'exemple proposé par ce site, il mettait google en exemple.
J'utilise le site PushingBox pour envoyer un email directement sur gmail lorsque une entrée de l'arduino est à "1", génial ce site et vraiment très pratique et simple ! le code marche nickel si et seulement si le DHCP m'attribue automatiquement une adresse IP dynamique. Si j'impose une IP fixe en mode "Client" là ça coince, c'est vicieux....

2/j'avais aussi essayer l'adresse IP google et c'était idem.

3/mon modem adsl est : la freebox v5

4/ c'est bizarre car comme je disais plus haut, Ethernet.begin(mac, ip) marche bien quand je suis en EthernetServer mais ça ne marche pas quand je suis en EthernetClient, y a t il une raison ? N'est ce pas la le problème ?

ah je suis si près du but pour compiler mais 2 programmes en 1 seul..... mon projet marche mais j'ai mes 2 UNOS et 2 Ethernet shield qui tournent en permanence alors qu'un seul suffirait.....

si quelqu'un a une idée....

Ethernet.begin(mac, ip) fonctionne dans tous les cas, tu n'as pas de problème pour l'attribution de ton IP. D'ailleurs, l'attribution de cette dernière n'a rien à voir avec le fait qu'ensuite tu veuilles fonctionner en client ou en serveur.

Si tu as un problème lorsque tu veux utiliser un client, une piste peut-être un conflit d'IP... Si tu as 2 objets avec la même IP sur ton réseau, tu as toutes les chances d'avoir des conflits. As-tu vérifié qu'aucun autre périphérique sur ton réseau n'a la même IP que celle que tu veux attribuer ? Une imprimante réseau, une tablette, un smartphone, ...

[Edit] après relecture de ton code et des symptômes, je penche vraiment pour un conflit d'IP...

j'ai essayé plusieurs fois de changer d'adresse IP idem

je viens d'essayer celle-ci byte ip[] = { 192, 168, 0, 52} et de déconnecter le cable réseau RJ 45 de la carte ethernet shield et et il m'affiche ceci :

Ethernet ready
My IP address: 192.168.0.52
connecting...
connection failed

disconnecting.

ça veut dire qu'il ne tient pas du tout compte que le cable soit ou non connecté ????

pouvez-vous essayer chez vous SVP ?

autre chose, je n'ai pas d'etiquette "adresse MAC" sur mon ethernet shield, est ce que ça pose problème ou on peut quand même imposer une adresse IP ?

bon ça y est j'ai résolu mon histoire d'IP fixe en bidouillant mais ça marche...

en fait plutot que d'imposer l'IP fixe qui ne marche pas, j'ai imposé l'adresse MAC :

byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };

puis dans la freebox j'ai imposé ceci dans la rubrique "Baux DHCP permanents" :

adresse IP 192.168.0.22 = adresse MAC aa:bb:cc:dd:ee:ff

du coup en mode DHCP (attribution automatique d'IP) il trouve ma carte shield MAC aa:bb:cc:dd:ee:ff et donne par défaut toujours la même adresse IP 192.168.0.22, puisque je l'ai associé auparavant dans la box.
utile pour moi car je me sers de celle ci pour redirection de port externe / interne xxxx IP destination étant 192.168.0.22, de l'extérieur (pour avoir un accès direct à l'arduino depuis le web)

bref maintenant, le but est de fusionner mon code : ethernet.client (pour envoyer un email) et ethernet.server (pour mon mini server Arduino domotique)

ai-je le droit de mettre dans un même code :

EthernetServer server(yyyy);
EthernetClient client;

et dans le setup
server.begin();

puis de basculer en mode client pour me connecter sur un serveur externe ?

je souhaite que l'arduino puisse être en mode serveur puis basculer en mode client à tout moment...

je ne sais pas si je me fais bien comprendre...

merci pour vos lumières

bref maintenant, le but est de fusionner mon code : ethernet.client (pour envoyer un email) et ethernet.server (pour mon mini server Arduino domotique)

ai-je le droit de mettre dans un même code :

EthernetServer server(yyyy);
EthernetClient client;

et dans le setup
server.begin();

puis de basculer en mode client pour me connecter sur un serveur externe ?

je souhaite que l'arduino puisse être en mode serveur puis basculer en mode client à tout moment...

je ne sais pas si je me fais bien comprendre...

merci pour vos lumières

ok merci pour l'info pepe !

pepe je t'ai envoyé un message privé