Site icon AranaCorp

Utilisation d’un Shield WiFi avec Arduino

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

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.

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:

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.

Pour interagir avec le Shield Wifi, nous utilisons la librairie WiFi.h dont les fonctions à connaître sont les suivantes:

//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.

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

Applications

Sources

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

Quitter la version mobile