Go Down

Topic: Impossible de me connecter à mon serveur apache local (Read 303 times) previous topic - next topic

Deewens

Salut,

Je fais actuellement un projet de terminal STI2D SIN, qui est une poubelle connecté. J'ai besoin de transférer les données des capteurs sur une base de donnée MySQL, du coup, j'utilise le shield ethernet, malheureusement, sûrement du au réseau pourrit du lycée dans lequel je me trouve, il y a toujours des problèmes alors que ça fonctionne à la maison ^^ ! Enfin bref, l'arduino n'arrive pas à se connecter à mon PC qui pourtant est une adresse IP Local. Alors, je n'ai peut être pas compris comment faire, pourtant j'ai bien lu les docs sur le site d'Arduino, tout ça tout ça. Je vous met mon code :

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

// Adresse MAC du SHIELD Ethernet
byte mac[] = {
  0x90, 0xA2, 0xDA, 0x0F, 0x50, 0x27
};

// Adresse IP du réseau
IPAddress ip(193,50,175,38);

// Initialisation librairie Ethernet
EthernetClient client;

// Adresse IP du serveur
IPAddress server(172,17,20,90);
// char server[] = "www.google.com";

unsigned long lastConnectionTime = 0;             // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 10L * 1000L; // delay between updates, in milliseconds
// the "L" is needed to use long type numbers

void setup() {
  // Port série :
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // give the ethernet module time to boot up:
  delay(1000);
  // start the Ethernet connection using a fixed IP address and DNS server:
  Ethernet.begin(mac, ip);
  // print the Ethernet board/shield's IP address:
  Serial.print("Adresse IP local: ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  if (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  // if ten seconds have passed since your last connection,
  // then connect again and send data:
  if (millis() - lastConnectionTime > postingInterval) {
    httpRequest();
  }

}

// this method makes a HTTP connection to the server:
void httpRequest() {
  // close any connection before send a new request.
  // This will free the socket on the WiFi shield
  client.stop();

  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("Connexion en cours...");
    // send the HTTP GET request:
    client.println("GET 172.17.20.90/Poubelle/arduino/data.php?id_poubelle=1&weight=30&amount=10 HTTP/1.1");
    client.println("Host: xxx.xxx.xxx.xxx");
    client.println("User-Agent: Deewens");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made:
    lastConnectionTime = millis();
  } else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
  }
}


Du coup, si vous pouviez m'expliquer si j'ai fait une erreur, et sinon, si vous avez déjà eu un problème de ce type sur un réseau de lycée (ou d'entreprise, fin bon ^^) Merci de votre aide !

Aurevoir, merci !

MicroQuettas

Bonsoir,

Qu'est ce qui se passe exactement ?
L'Arduino ne se connecte pas au réseau ou il ne se connecte pas au serveur ?

Elles sont étranges vos IPs, pour un même réseau local :
  • l'Arduino est en 193,50,175,x
  • et le serveur en 172,17,20,y


Vous avez un routeur entre les 2 ? Parce qu'avec un simple switch, cela ne va pas faire... Sur un réseau local on s'attendrait à ce qu'elles soient sur le même sous-réseau, c-à-d les 3 mêmes premiers nombres.

Bonne bidouille

MicroQuettas

Deewens

Salut,

Oui, je me suis effectivement trompé avec l'adresse de l'arduino, l'adresse sous réseau est en classe B, donc, j'ai modifié ça (mais j'ai pas le code sous la main là, je l'ai encore modifié aujourd'hui, mais je suis sortit du lycée ^^), mais en tout cas, elles sont maintenant sous le même sous réseau, et j'ai d'ailleurs changé le masque de sous réseau par défaut de la librairies Ethernet pour qu'elle corresponde à celle du réseau du lycée.
Bon, par contre, ça ne marche pas plus ^^ !

Enfaîte, au moment du HttpRequet, il cherche à se connecter avec le client.connect(server, 80), mais la condition renvoie FALSE et m'envoie sur "connexion failed", mais en 5 heures de boulôt aujourd'hui, je n'ai pas réussit à régler le soucis.

Ah oui, autre chose, je suis sur une Arduino Mega, avec un SHIELD Ethernet et un écran LCD tactile, dit moi s'il faut les références. Parce que pareil, j'ai pas sous la main, je suis plus au lycée !

Merci.

MicroQuettas

Bonsoir,

Moi non plus, je ne suis plus au lycée... :D

Trêve de blague, si vos deux machines sont sur le même sous-réseau, c-à-d avec des IP en a,b,c,x et a,b,c,y, ne bricolez pas le masque de sous-réseau et laissez le à 255, 255, 255, 0.

Pour votre problème, si cela marche chez vous et pas au bahut, c'est que votre configuration au lycée est erronée.
Donc c'est là dessus qu'il faut travailler. Essayez de "pinger" l'Arduino et le serveur...
Il y a aussi des commandes spécifiques réseau, mais je ne suis pas spécialiste.

Bonne bidouille

MicroQuettas

rjnc38

Trêve de blague, si vos deux machines sont sur le même sous-réseau, c-à-d avec des IP en a,b,c,x et a,b,c,y, ne bricolez pas le masque de sous-réseau et laissez le à 255, 255, 255, 0.
Bonjour,
euh ... non .... il a dit être raccordé à un réseau en classe B donc le masque doit être adapté 255.255.xxx.0 (avec xxx adapté à la plage attribuée car je pense que la classe B est répartie entre plusieurs établissements)
mais il faut déjà que les 2 premiers bytes du serveur et du client soient compatibles
et peut être essayé d'utiliser la forme complète de Ethernet.begin(mac, ip, dns, gateway, subnet);

 

Go Up