fbpixel
É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
  • Arduino UNO
  • Câble USB A Mâle/B Mâle
  • Arduino WiFi Shield

Principe de fonctionnement d’un Shield Wifi

Le réseau WiFi est un réseau Radio qui travaille sur les fréquences 2,45 GHz et 5 GHz. Le Shield Wifi possède une puce qui permet de gérer la communication wifi avec un réseau, comme sur un ordinateur. Le microcontrôleur peut communiquer avec cette puce pour se connecter à un réseau ou transmettre des information via ce réseau.

arduino-wifi-shield Utilisation d'un Shield WiFi avec Arduino

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 broches 50, 51 et 52 pour la Mega

Code de gestion d’un Shield Wifi

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 interagir avec le Shield Wifi, nous utilisons la librairie WiFi.h dont les fonctions à connaître sont les suivantes:

  • 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\nContent-Type: text/html\nConnection: close\nRefresh: 5
\n"));
  //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

Lorsque le code est téléchargé sur le microcontrôleur, ouvrez le moniteur série pour connaitre l’adresse IP.

arduino-ethernet-request-w5100-monitor Utilisation d'un Shield WiFi avec Arduino

Vous pouvez ensuite rentrer cette adresse IP dans votre navigateur internet afin que la page web s’affiche.

arduino-ethernet-w5100-web-monitor-controller Utilisation d'un Shield WiFi avec Arduino

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