server.available() toujours égal à 0 lors d'une connection Wifi

Bonjour à tous,

Je suis nouveau sur Arduino et je cherche à tester le fonctionnement serveur de mon Arduino connecté avec un WifiShield.

Je n’arrive pas à comprendre pourquoi ma variable client = server.available() dans mon loop est toujours null.

J’ai repris un tuto connu le-wifi-shield

Pour moi il faut ouvrir un navigateur et mettre comme url l’adresse IP de mon shield à savoir celle renvoyée par ma méthode printWifiStatus(). Uniquement lorsque j’aurais fait la requête sur cette url que mon wifiShield détectera un client selon moi.

Merci pour votre aide.

#include <SPI.h>
#include <WiFi.h>

void printWiFiStatus();

char ssid[] = "********";
char pass[] = "********";

int status = WL_IDLE_STATUS;

WiFiServer server(80);
WiFiClient client;

void setup() {
  Serial.begin(9600);
  while (status != WL_CONNECTED) {
    Serial.print("Tentative de connection au reseau: ");  
    Serial.println(ssid);
    status = WiFi.begin(ssid, pass);
    delay(10000);
  }
  server.begin();
  Serial.println("Wifi connected");
  printWiFiStatus();
}

void loop() {
  client = server.available();
  Serial.println(client);
  delay(5000);
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        if (c == '\n' && currentLineIsBlank) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 5");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("je fais un test");
          client.println("
");          
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
    Serial.println("client disonnected");
  }
}

void printWiFiStatus() {
  Serial.print("SSID: ");
  Serial.println(ssid);
  
  Serial.print("IP : ");
  IPAddress ip = WiFi.localIP();
  Serial.println(ip);
  
  long rssi = WiFi.RSSI();
  Serial.print("Signal strenght (rssi): ");
  Serial.print(rssi);
  Serial.println(" dBm");
  delay(15000);
}
]

décrivez ce que vous voyez dans la console. arrivez vous bien dans la loop? que tapez vous dans votre navigateur ? il se peut que le routage ne se fasse pas - avez vous des ports bloqués ou une config réseau particulière ? voyez vous votre shield connecté à votre routeur ?


une fois que ça fonctionnera, il faut peut-être aussi remplacer le   if (client) { par  if (client.connected()) {

Dans la console je vois ;

Tentative de connection au reseau: SFR-****
Wifi connected
SSID: SFR-*****
IP : 192.168.0.21
Signal strenght (rssi): -76 dBm
0
0
0
0
...

Donc je rentre bien dans le loop. Ensuite dans le navigateur je tape : 192.168.0.21:80
J'ai essayé également juste 192.168.0.21 ou 192.168.0.21:8080 rien ne fonctionne. J'ai essayé avec le port 22 idem.

J'ai essayé également dans mon terminal ; sudo lsof -i ':80' mais aucune réponse donc je pense que le port 80 est dispo.

Lorsque je suis sur mon interface de gestion du routeur (192.168.0.1) dans ma liste des appareils sans fil connectés je vois bien l'adresse ip 192.168.0.21

Pour ce qui est de la config réseau particulière rien de tel c'est la première fois que je vais sur l'interface de gestion du modem. :slight_smile:

Merci pour votre aide j-M-L

pas besoin de :80 car c'est le port HTTP par défaut et celui que vous avez déclaré en faisant
WiFiServer server([color=blue]80[/color]);

Quelle est l'adresse IP de l'appareil que vous utilisez pour aller surfer sur 192.168.0.21 ? est-ce que cet appareil est bien sur le même réseau wifi ?

Mon mac a l'IP : 192.168.0.17

Oui il est bien reconnu dans la liste des appareils connectés au modem.

essayez en passant par autre chose que Safari, genre Chrome

ou depuis le terminal essayez un telnet

Via le terminal ;

~ telnet 192.168.0.21 22
Trying 192.168.0.21...
telnet: connect to address 192.168.0.21: Connection refused
telnet: Unable to connect to remote host

Idem sur Chrome ;

Ce site est inaccessible

192.168.0.21 n'autorise pas la connexion.
Essayez les suggestions ci-dessous :
Vérifier la connexion
Vérifier le proxy et le pare-feu
ERR_CONNECTION_REFUSED

J’ai regardé dans mes paramètres de Proxy je n’ai aucun protocole de configurés (aucune case cochée) je pense pas avoir de proxy dans ce cas.

et un [color=blue]telnet 192.168.0.21:80[/color] ?

votre shield est récent? il y a eu un update du firmware il y a assez longtemps

si ça ne passe pas c'est que votre routeur gêne d'une manière ou d'une autre sans doute

Ca doit être mon WifiShield qui est trop vieux, on me l'a donné y a déjà un petit moment.

Je vais regarder pour l'upgrader.

Merci en tout cas pour vos conseils.

Paul