Étiquettes : , ,

Le Shield WiFi permet à la carte Arduino de se connecter à internet en passant par un réseau local sans fil. Il intègre un lecteur de carte SD qui permet de stocker des données ou encore une page web pour piloter l’Arduino.
La base, pour créer des objets connectés, est de les connecter à un réseau comme le réseau WiFi.

Matériel

  • Ordinateur
  • ArduinoUNO
  • Câble USB A Mâle/B Mâle
  • Shield ou cable ethernet
  • Arduino WiFi Shield

Principe de fonctionnement

Le réseau WiFi est un réseau Radio qui travaille sur les fréquences 2,45 GHz et 5 GHz.

Schéma

Le shield Wifi se monte directement sur la carte Arduino et utilise le bus SPI pour communiquer avec le WiFI et la carte SD. La broche 10 est utilisé pour sélectionner le contrôleur WiFi, la broche 7 comme handshake entre l’Arduino et le WiFi; et la broche 4 pour sélectionner le module de carte SD.
En résumé, les broches utilisées sont:

  • 4 pour la sélection de la carte SD (SD_CS)
  • 7 pour le handshake avec le WiFi
  • 10 pour la sélection de la micropuce W5100 (W5100_CS)
  • le bus SPI : broches 11,12,13 sur une carte Arduino UNO/Duelmilanove. Les borches 50, 51 et 52 pour la Mega

    Code

    Pour communiquer sur le réseau, il nous faut utiliser un protocole particulier. Ce protocole est intégré dans toutes les librairies relatives à la communication WiFi.

  • Il faut connecter le module WiFi au réseau
  • définir un serveur server
  • définir un client client
    Pour intéragir avec le Shield Wifi, nous utilisons la librairie WiFi.h

  • WiFi.begin() pour initialiser une connexion réseau
  • server.begin() pour initialiser un serveur
  • WiFiClient client = server.available() pour initialiser un client
  • client.read() pour lire des données provenant du client
  • client.print() pour envoyer des données au client

    //Libraries
    #include <WiFi.h>//https://www.arduino.cc/en/Reference/WiFi
    
    //Parameters
    String request ;
    unsigned long refreshCounter  = 0;
    int status  = WL_IDLE_STATUS;
    char ssid[]  = "****************";
    char password[]  = "****************";
    
    //Objects
    WiFiServer server(80);
    WiFiClient client;
    
    void setup(){
    //Init Serial USB
    Serial.begin(9600);
    Serial.println(F("Initialize System"));
    //Init WifiShield
      
      // Connect to Wifi network.
    while (status != WL_CONNECTED)
    {
    	Serial.print("Connecting to Network named: ");Serial.println(ssid);
    	status = WiFi.begin(ssid, password);
    	delay(1000);
    }
      server.begin();
      Serial.println();
      Serial.println(F("WifiShield initialized"));
      Serial.print(F("IP Address: "));
      Serial.println(WiFi.localIP());
    }
    
    void loop(){
    client = server.available();
     clientRequest();
    handleRequest();
    }
    
    void clientRequest( ){/* function clientRequest */ 
    ////Get client request
    if (!client) { return; }
    		request="";
      // Wait until the client sends some data
      while(!client.available()){
        delay(1);
      }
    
      request = client.readStringUntil('\r'); // Read the first line of the request
      Serial.println(request);
      client.flush();
      }
    
    void handleRequest( ){/* function handleRequest */ 
    ////Handle web client request
    if (request.indexOf("/dig2on") > 0){
    	digitalWrite(2, HIGH);
    }
    if (request.indexOf("/dig2off") >0) {
    	digitalWrite(2, LOW);
    }
    if (request.indexOf("GET")>=0){
    	webpage(client);
    client.stop();
    }
    
    		}
    
    void webpage(WiFiClient client){/* function webpage */ 
    ////Send webpage to client
    
        //output HTML data header
        client.println(F("HTTP/1.1 200 OK
    Content-Type: text/html
    Connection: close
    Refresh: 5
    "));
        //header
        client.println(F("<!DOCTYPE HTML><html><head><title>AranaCorp</title></head><body bgcolor='black' style='color:white;'>"));
        client.println(F("<h1 style='color:green;'>AranaCorp - Arduino Web Controller</h1>"));
        client.println("<p style='color:white;'>Page refresh number: "+String(refreshCounter)+"</p>");
        client.println(F("<h2 style='color:limegreen;'>Arduino Inputs</h2>"));
        //output analog input pin
        for (int i = 0; i < 6; i++) {
          client.println("<b>Input A"+String(i)+" : </b>"+String(analogRead(14 + i))+"<br>");
        }
        //digital output
        client.println("<h2 style='color:limegreen;'>Arduino Outputs</h2>");
        client.println("<b>Digital output Pin 2 : </b><input value="+String(digitalRead(2))+" readonly></input>");
        client.println(F("<a href='/dig2on'><button>Turn On </button></a><a href='/dig2off'><button>Turn Off </button></a>"));
        
        //file end
        client.println("</body></html>");"));
      refreshCounter+=1;
    delay(1);
    }
    
    
    

    Résultat


    Applications

    • Utiliser une interface web pour piloter votre microcontrôleur

    Sources

  • Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
    La Programmerie