Go Down

Topic: Arduino wifi (Read 3351 times) previous topic - next topic

landid

Je viens de relire le code et en remettant au propre, j'ai vu une ligne du genre:
Code: [Select]
client.stop();

qui m'a semblée mal placée. Mais comme je n'ai pas de carte Wifi je ne peux pas tester. Je te post le code un peu 'nettoyé' après tout ces tests. Il faudrait que tu le charges tel quel pour tester, le tien comportant un souci de recopie de la fonction printWifiStatus()

Si c'a ne marche pas je pense qu'il y a un problème ailleurs sur le réseau du type firewall ???

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

char ssid[] = "WiFi-2.4-5136";     //  your network SSID (name)
char pass[] = "Yw47Q4mhWY2u";    // your network password
char DEVID1[] = "vEE13BC1C82D7B73";

//Numeric Pin where you connect your switch
uint8_t pinDevid1 = 3; // Example : the mailbox switch is connect to the Pin 3

// Debug mode
boolean DEBUG = true;

char serverName[] = "api.pushingbox.com";

boolean pinDevid1State = false;                // Save the last state of the Pin for DEVID1
boolean lastConnected = false;                 // State of the connection last time through the main loop

// Initialize the client library
WiFiClient client;


int status = WL_IDLE_STATUS;     // the Wifi radio's status

/*void setup() {
  // initialize serial:
  Serial.begin(9600);

    pinMode(pinDevid1, INPUT);

  // attempt to connect using WPA2 encryption:
  Serial.println("Attempting to connect to WPA network...");
  status = WiFi.begin(ssid, pass);

  // if you're not connected, stop here:
  if ( status != WL_CONNECTED) {
    Serial.println("Couldn't get a wifi connection");
    while(true);
  }
  // if you are connected, print out info about the connection:
  else {
    Serial.println("Connected to network");
  }
}
*/
void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
      pinMode(pinDevid1, INPUT);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while(true);
  }
  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:   
    status = WiFi.begin(ssid, pass);
    // wait 10 seconds for connection:
    delay(10000);
  }
  Serial.println("Connected to wifi");
  printWifiStatus();
}
void loop()
{
      ////
      // Listening for the pinDevid1 state
      ////
      if (digitalRead(pinDevid1) == HIGH && pinDevid1State == false) // switch on pinDevid1 is ON
      {
        if(DEBUG){Serial.println("pinDevid1 is HIGH");}
        pinDevid1State = true;
        //Sending request to PushingBox when the pin is HIGH
        sendToPushingBox(DEVID1);
      }
      //DEBUG part
      // this write the respons from PushingBox Server.
      // You should see a "200 OK"
      if (client.available()) {
        char c = client.read();
        if(DEBUG){Serial.print(c);}
      }
     
      // if there's no net connection, but there was one last time
      // through the loop, then stop the client:
      if (!client.connected() && lastConnected) {
        if(DEBUG){Serial.println();}
        if(DEBUG){Serial.println("disconnecting.");}
        client.stop();
      }
      lastConnected = client.connected();
}


//Function for sending the request to PushingBox

void sendToPushingBox(char devid[]){
  // client.stop();
  if(DEBUG){
    Serial.println("connecting...");
    Serial.print("Server name: ");
    Serial.println(serverName);
    Serial.print("Dev ID: ");
    Serial.println(devid);
    }

  if (client.connect(serverName, 80)) {
    if(DEBUG){Serial.println("connected");}

    if(DEBUG){Serial.println("sendind request");}
    client.print("GET /pushingbox?devid=");
    client.print(devid);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(serverName);
    client.println("User-Agent: Arduino");
    client.println();
  }
  else {
    if(DEBUG){
      Serial.println("Connection failed");
      printWifiStatus();
    }
  }
}

//Function to display Wifi network parameters

void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}
Si le seul outil que vous avez est un marteau, vous verrez tout problème comme un clou.
      Abraham Maslow

pdeneye

Voici le retour ....  malheureusement similaire ....

Code: [Select]
Attempting to connect to SSID: WiFi-2.4-5136
Connected to wifi
SSID: WiFi-2.4-5136
IP Address: 192.168.1.20
signal strength (RSSI):-54 dBm
pinDevid1 is HIGH
connecting...
Server name: api.pushingbox.com
Dev ID: vEE13BC1C82D7B73
Connection failed
SSID: WiFi-2.4-5136
IP Address: 192.168.1.20
signal strength (RSSI):-54 dBm

landid

Re,

  bon et bien là il faut creuser :)
  Je tenterais de connecter un autre serveur (ex: google), en cherchant un peu sur le web on doit pouvoir trouver un autre usage a ce shield wifi. Essaie de trouvez un script déjà éprouvé.

Je ne vais plus avoir trop de connexion prochainement pour cause de vacances loin de l'Internet. Ne te décourage pas c'est en essayant de comprendre les problèmes que j'ai appris le plus.

Joyeux Noël (quand même) et bonnes fêtes de fin d'année.
Si le seul outil que vous avez est un marteau, vous verrez tout problème comme un clou.
      Abraham Maslow

pdeneye

Merci beaucoup,

Pareil pour moi, fêtes de famille et petit séjours alsaciens me feront du bien.  Mais je n'abandonne pas, je vais suivre tes conseils et informerai le forum.

Joyeux Noel et une excellente année 2016.

pdeneye

Testé aussi avec une autre carte arduino uno pour écarter un problème à ce niveaux mais test négatif et résultat similaire.  Pratiquement le même sketch en utilisation cablée (shield ethernet) fonctionne parfaitement.

A l'année prochaine :)

pdeneye

Bonjour à tous,

Je me remets en quête d''une solution et cherche un sketch le plus simple possible pour vérifier que la shield fonctionne correctement.  Pour l'instant, rien trouvé de vraiment utile.  Si quelqu'un passe par ici et possède cette même carte, ce serait bien de pouvoir échanger un sketch qui marche.

Merci pour votre aide.  Je reviens ici si je réussi à faire avancer le schmilblic :)

P

pdeneye

#21
Jan 02, 2016, 07:48 pm Last Edit: Jan 02, 2016, 07:56 pm by pdeneye
Ce sketch
Code: [Select]
This sketch connects to a website (http://www.google.com)
 using a WiFi shield.
 
 This example is written for a network using WPA encryption. For
 WEP or WPA, change the Wifi.begin() call accordingly.
 
 This example is written for a network using WPA encryption. For
 WEP or WPA, change the Wifi.begin() call accordingly.
 
 Circuit:
 * WiFi shield attached
 
 created 13 July 2010
 by dlf (Metodo2 srl)
 modified 31 May 2012
 by Tom Igoe
 */


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

char ssid[] = "WiFi-2.4-5136"; //  your network SSID (name)
char pass[] = "1234567890";    // your network password (use for WPA, or use as key for WEP)
int keyIndex = 0;            // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.google.com";    // name address for Google (using DNS)

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
WiFiClient client;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
 
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while(true);
  }
 
  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:    
    status = WiFi.begin(ssid, pass);
 
    // wait 10 seconds for connection:
    delay(10000);
  }
  Serial.println("Connected to wifi");
  printWifiStatus();
 
  Serial.println("\nStarting connection to server...");
  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {                                                           //ca bloque ici !!!!!!!!
    Serial.println("connected to server");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.1");
    client.println("Host: www.google.com");
    client.println("Connection: close");
    client.println();
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting from server.");
    client.stop();

    // do nothing forevermore:
    while(true);
  }
}


void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}


fournit
Code: [Select]

Attempting to connect to SSID: WiFi-2.4-5136
Connected to wifi
SSID: WiFi-2.4-5136
IP Address: 192.168.1.20
signal strength (RSSI):-52 dBm

Starting connection to server...

disconnecting from server.




C'est pas bon, je crois !!!!

pdeneye

Et ceci, c'est sensé me fournir les états analogiques de mes entrées A0-A5 mais je n'ai pas tout saisi.  Il n'y a pas de serial.print.   Avez-vous une idée de sa fonction ?

Merci d'avance.

Code: [Select]


/*
  WiFi Web Server
 
 A simple web server that shows the value of the analog input pins.
 using a WiFi shield.
 
 This example is written for a network using WPA encryption. For
 WEP or WPA, change the Wifi.begin() call accordingly.
 
 Circuit:
 * WiFi shield attached
 * Analog inputs attached to pins A0 through A5 (optional)
 
 created 13 July 2010
 by dlf (Metodo2 srl)
 modified 31 May 2012
 by Tom Igoe

 */

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


char ssid[] = "WiFi-2.4-5136"; //  your network SSID (name)
char pass[] = "1234567890";    // your network password (use for WPA, or use as key for WEP)

int keyIndex = 0;                 // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

WiFiServer server(80);

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
 
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while(true);
  }
 
  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:   
    status = WiFi.begin(ssid, pass);

    // wait 10 seconds for connection:
    delay(10000);
  }
  server.begin();
  // you're connected now, so print out the status:
  printWifiStatus();
}


void loop() {
  // listen for incoming clients
  WiFiClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");     
          }
          client.println("</html>");
           break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
   
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}


void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());

  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

pdeneye

Pensez-vous qu'il est possible qu'une mise à jour du firmware du shield soit nécessaire ?

Bonne soirée.

P

fdufnews

Et ceci, c'est sensé me fournir les états analogiques de mes entrées A0-A5 mais je n'ai pas tout saisi.  Il n'y a pas de serial.print.   Avez-vous une idée de sa fonction ?
Ce code crée un serveur. Tu t'y connectes en ouvrant dans un navigateur internet l'URL correspondant à l'adresse IP qui a été allouée à ta carte. Cela affiche dans une page HTML la valeur des 6 entrées analogiques. La page est raffraichie toutes les 5 secondes.

pdeneye

Oui,

J'avais compris en testant un code similaire mais en ethernet et de fait ça marche bien ainsi;  Avec ce code wifi, ca marche pas, le modem détecte le périph, lui attribue une IP mais je ne parviens pas à lire quoi que ce soit sur l'adresse attribuée.  Je devrais pouvoir lire "new client" dans le moniteur série mais ce n'est pas le cas :(

Go Up