You are on page 1of 11

Les commandes de bases

Après avoir branché le shield sur la carte, il est tant de s’intéresser à la bibliothèque Wifi
officielle. Celle-ci est relativement simple d’utilisation, si vous avez déjà utilisé le shield Ethernet,
alors vous constaterez de grandes similitudes.

Dans un tout premier temps, il faut inclure deux librairies, la SPI, pour communiquer avec le
shield et le wifi pour faciliter cette communication.

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

Ensuite, pour démarrer la liaison wifi, il existe une fonction très simple : begin. En fonction type
de connexion (sans mot de passe, WPA, WEP), il vous faudra soit seulement le nom du réseau,
soit son nom et le mot de passe, et dans le cas du WEP rajouter son KeyIndex. Cela nous donne
les lignes suivantes :

char ssid[] = "monreseau";

char pass[] = "motdepasse";

int keyIndex = 0;

int status = WL_IDLE_STATUS;

void setup() {

status = WiFi.begin(ssid); // reseau sans mot de passe

status = WiFi.begin(ssid, pass); // connection WPA (le plus courant)

status = WiFi.begin(ssid, keyIndex, pass); //connection WEP

}

Vous remarquerez que j’ai récupérer le retour de la fonction begin dans la variable status, cela
me permet de vérifier à le statut du shield (connecté, absent…), cela nous permet de rajouter
quelques sécurités, comme celle-ci qui vérifie que le shield est bien présent (notez bien que
dans ce cas ce n’est pas la variable status mais une fonction de la librairie, car on n’a pas encore
appelé la fonction begin) et que l’on est bien connecté :

char ssid[] = "monreseau";

char pass[] = "motdepasse";

int keyIndex = 0;

int status = WL_IDLE_STATUS;

void setup() {

} } Mais il existe une manière plus intelligente de tester si l’on est connecté. keyIndex. .println("WiFi shield non connecte"). pass).println(WiFi. Serial. // don't continue: while(true). Ensuite. en effet. on peut faire une boucle que tourne en boucle tant que l’on est pas connecté. Serial. // reseau sans mot de passe status = WiFi. } Serial.println("Shield connecte au reseau!"). if ( status != WL_CONNECTED) { Serial. } else { Serial.begin(ssid).Serial.begin(9600).print("IP Address: "). } status = WiFi. Serial.print("SSID: "). cela ressemble à ce bout de code : while (status != WL_CONNECTED) { Serial. la documentation d’Arduino nous fournit une fonction toute faite : void printWifiStatus() { // print the SSID of the network you're attached to: Serial.println("Connecte au wifi"). // wait 10 seconds for connection: delay(10000). pass). Serial. il peut être utilise d’afficher les différents paramètres du shield une fois connecté.begin(ssid. if (WiFi. //connection WEP delay(10000). while(true). pour retrouver son IP local par exemple. status = WiFi.println(ssid).localIP().begin(ssid. // connection WPA (le plus courant) status = WiFi.status() == WL_NO_SHIELD) { Serial. // print your WiFi shield's IP address: IPAddress ip = WiFi.println("Erreur de connexion").println(ip).SSID()). pour cela.print("Tentative de connexion au reseau: "). pass).begin(ssid.

qui affiche une page web contenant la valeur de 6 potentiomètres reliés à l’Arduino.RSSI(). This example is written for a network using WPA encryption. Serial. change the Wifi.println(" dBm"). Nous allons décortiquer le code ensemble : /* WiFi Web Server A simple web server that shows the value of the analog input pins. For WEP or WPA. WiFiServer server(80).begin() call accordingly.h> #include <WiFi. Serial. using a WiFi shield. Le mode serveur Voila un exemple de la documentation officielle Arduino. Serial.h> char ssid[] = "yourNetwork". } Voila. 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. // your network password int keyIndex = 0.print(rssi). // your network SSID (name) char pass[] = "secretPassword". void setup() { . il me semble que vous êtes bon au niveau des réglages! Nous allons ensuite passer aux deux fonctions du shield : le serveur et le client. // your network key Index number (needed only for WEP) int status = WL_IDLE_STATUS. // print the received signal strength: long rssi = WiFi.print("signal strength (RSSI):").

Serial.begin(ssid.println("WiFi shield not present"). // an http request ends with a blank line boolean currentLineIsBlank = true. // the connection will be closed after completion of the response client. // if you've gotten to the end of the line (received a newline // character) and the line is blank. client.println(). Change this line if using open or WEP network: status = WiFi.println("Content-Type: text/html"). Needed for Leonardo only } // check for the presence of the shield: if (WiFi.status() == WL_NO_SHIELD) { Serial. // don't continue: while(true). // wait for serial port to connect. the http request has ended. // wait 10 seconds for connection: delay(10000). } server.connected()) { if (client. pass). so print out the status: printWifiStatus(). } void loop() { // listen for incoming clients WiFiClient client = server. . } // attempt to connect to Wifi network: while ( status != WL_CONNECTED) { Serial.println("new client").println("Refresh: 5").println(ssid).begin(9600).read(). //Initialize serial and wait for port to open: Serial.println("<!DOCTYPE HTML>"). if (client) { Serial. while (client.begin().print("Attempting to connect to SSID: ").write(c).println("Connection: close"). // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header client. client. // Connect to WPA/WPA2 network. // refresh the page automatically every 5 sec client.println("HTTP/1. client. Serial. // you're connected now.available()) { char c = client.available().1 200 OK"). while (!Serial) { .

stop(). client. Serial.println("<html>"). break. // print your WiFi shield's IP address: IPAddress ip = WiFi. Serial.print("signal strength (RSSI):").println(WiFi.println("client disonnected"). Serial.localIP().print("SSID: ").print(analogChannel).SSID()). // output the value of each analog input pin for (int analogChannel = 0. analogChannel++) { int sensorReading = analogRead(analogChannel). on retrouve une nouvelle variable : WiFiServer server(80).print("analog input ").print(" is "). Serial. client.println("<br />"). } if (c == '\n') { // you're starting a new line currentLineIsBlank = true. client. // print the received signal strength: long rssi = WiFi. client. Serial. que ce soit pour . analogChannel < 6. client.print("IP Address: ").println(ip). } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false. // close the connection: client.print(rssi). client. La variable server est en fait la variable dont on va se servir pour utiliser notre serveur. Serial. Serial. } En tête de ce programme. } client. } } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.RSSI().println("</html>"). } } } // give the web browser time to receive the data delay(1).print(sensorReading).println(" dBm").

Ces manipulations sont un peu plus complexes à comprendre mais rien de bien inquiétant. on récupère cette variable et on regarde si elle vaut quelque chose grâce au if. qui marche comme pour la liaison série en quelque sorte. leur envoyer des donnés ou en recevoir.available(). client. On sait aussi qu’une requête HTTP finie par une ligne blanche. Quand au nombre 80. Si elle vaut quelque chose alors on va pouvoir faire des manipulations avec. voila une reponse classique client.0. renseignez vous sur le protocol HTTP. c’est à dirre le port par defaut de votre navigateur web est le port 80.println("Refresh: 5"). Tout d’abord.println("HTTP/1.write(c). il faut dans votre navigateur rajouter le port de connexion de cette facon : VOTREIP:PORT (ex -> 192. Le port par defaut des requetes HTTP. if (client) { Serial. autrement dit. on peut récupérer les caractère que nous envoie le client à l’aide de client.println("Content-Type: text/html").1 200 OK"). if (c == '\n' && currentLineIsBlank) { // le requete est finie. lorsque l’on trouvera deux /n la requête sera terminée et on pourra écrire notre réponse.available()) { char c = client.println(« nouveau client »). en fonction de l’organisation de celui-ci. Serial. client.println("Connection: close").21:8080).récupérer les clients. Si vous changez ce nombre. while (client. client.println("new client"). client.read(). // pour ecrire vos propres reponses. on peut donner notre reponse. il indique le port sur lequel le serveur va « écouter ». On peut donc maintenant comprendre le code suivant : if (client) { Serial.168.read(). Mais on remarque aussi le server.available renvoie une variable de type client si un client essaye de se connecter. il faut savoir que l’on peut se connecter à un serveur sur différents ports. .connected()) { if (client. par exemple le port 22 est en général pour le FTP.begin () qui comme son nom l’indique démarre le serveur. } Le server.println(). c’est pourquoi on met ici 80 comme port. Puis vient la partie intéressante. boolean currentLineIsBlank = true. Dans la fonction loop() de notre programme on regarde si un client essaye de se connecter à notre serveur de cette façon : WiFiClient client = server. Ensuite vient tout la partie d’initialisation que l’on a déjà vu ensemble.

Serial. for (int analogChannel = 0. client. vous savez maintenant programmer un serveur web avec votre Arduino.println("<html>").print("analog input "). This example is written for a network using WPA encryption.println("<br />"). } } } delay(1). For WEP or WPA. } if (c == '\n') { // On commence une nouvelle ligne currentLineIsBlank = true. client. nous allons de la même façon décortiquer ce code : /* Web client This sketch connects to a website (http://www.com) using a WiFi shield. client. . Voila.print(sensorReading).println("<!DOCTYPE HTML>").google. Le mode client Voila maintenant un code. client. } Comme vous l’aurez vu.println("client deconnecte"). dès que le client se déconnecte.print(analogChannel). client. break. } else if (c != '\r') { currentLineIsBlank = false. analogChannel++) { int sensorReading = analogRead(analogChannel). } client. analogChannel < 6. change the Wifi. client.begin() call accordingly. qui envoie par liaison série la réponse HTML de google sur la recherche de « tutoarduino ». on appelle la fonction client. client.print(" is ").stop().// maintenant place au code HTML client.println("</html>"). pris de la documentation officielle encore une fois.stop() pour stopper la connexion de notre coté aussi. notez bien que vous n’êtes pas obligés de suivre le protocole HTTP mais que vous pouvez aussi inventer les vôtres si vous avez des besoins spécifiques.

125. // 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.128). // 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. // numeric IP for Google (no DNS) char server[] = "www. // Connect to WPA/WPA2 network. // your network key Index number (needed only for WEP) int status = WL_IDLE_STATUS.google.h> char ssid[] = "yourNetwork". Circuit: * WiFi shield attached created 13 July 2010 by dlf (Metodo2 srl) modified 31 May 2012 by Tom Igoe */ #include <SPI. Change this line if using open or WEP network: .h> #include <WiFi.print("Attempting to connect to SSID: "). } // attempt to connect to Wifi network: while (status != WL_CONNECTED) { Serial. change the Wifi.begin() call accordingly.232. // wait for serial port to connect.begin(9600). // your network password (use for WPA. This example is written for a network using WPA encryption. Needed for Leonardo only } // check for the presence of the shield: if (WiFi.println("WiFi shield not present").status() == WL_NO_SHIELD) { Serial. // your network SSID (name) char pass[] = "secretPassword". // don't continue: while(true). For WEP or WPA. void setup() { //Initialize serial and wait for port to open: Serial. or use as key for WEP) int keyIndex = 0. while (!Serial) { .com". Serial.println(ssid).

begin(ssid.println("Connected to wifi"). Serial. read them and print them: while (client.connect(server.write(c). } } void loop() { // if there are incoming bytes available // from the server.println("Connection: close"). Serial.").available()) { char c = client. // wait 10 seconds for connection: delay(10000).stop(). Serial.print("signal strength (RSSI):").println(ip).print("SSID: ").println("disconnecting from server. Serial. Serial.println("connected to server").google.connected()) { Serial.SSID()). // Make a HTTP request: client.read().com"). status = WiFi. 80)) { Serial."). } Serial. Serial. // print your WiFi shield's IP address: IPAddress ip = WiFi. Serial.print("IP Address: "). // print the received signal strength: long rssi = WiFi.println("\nStarting connection to server. client. } } void printWifiStatus() { // print the SSID of the network you're attached to: Serial. pass).println("Host: www. Serial.RSSI().println(WiFi. report back via serial: if (client.println().1").println("GET /search?q=arduino HTTP/1. client. client. printWifiStatus().localIP(). . stop the client: if (!client. } // if the server's disconnected.print(rssi). // if you get a connection. client.. // do nothing forevermore: while(true)..println().

client. Et une variable de type WifiClient que l’on a déjà rencontré auparavant. ce qui nous permet de tester son succès. qui va nous servir à interagir avec le serveur de google. } . } Enfin. il faut penser à vérifier que l’on est toujours connecté au serveur.println("connected to server").write(c).println("Connection: close").println("deconnecte du server").available()) { char c = client. PORT) pour ce connecter au serveur en question. il existe la fonction connected() qui renvoie true ou false.com").connect(server. on utilise la fonction read() pour lire les caractères envoyés. pour pouvoir fermer la connexion au besoin.println(" dBm").read(). pour cela.println("Host: www. cela peut aussi être une IP. Serial. Serial.stop().1"). // on arrete le programme while(true). Vous pouvez maintenant comprendre le code suivant : if (client. Ensuite. Ensuite on retrouve le bout de code concernant la connexion. je vous conseille cette page qui est une bonne introduction. une chaîne de caractère server qui contient l’URL du serveur auquel on veut se connecter. On utilise la fonction connect(URL. client.println().connected()) { Serial.println().println("GET /search?q=arduino HTTP/1. // Make a HTTP request: client. 80)) { Serial. on arrive donc à ce bout de code : if (!client. on trouve dans cette même partie l’envoi de la requete HTTP. ce qui nous donne ce code : while (client. et on peut dans cet exemple les envoyer par liaison série. } Ensuite. cette fonction renvoie true ou false. on peut agir dans la fonction loop() comme en quelque sorte avec une liaison série. on retrouve deux nouvelles variables. client. pour plus de renseignement sur ce protocole. Serial. client. } Dans ce code.google.

Pour plus de détails sur des fonctions plus techniques. réponse rapide assurée!! . pensez à vous rendre sur la documentation officielle ou à poser une question en commentaire ou sur notre forum.normalement vous êtes capables de manipuler votre shield comme vous le souhaitez.Et voila. ce tutoriel touche à sa fin .