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.
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.
Vous pouvez ensuite rentrer cette adresse IP dans votre navigateur internet afin que la page web s’affiche.
Applications
- Utiliser une interface web pour piloter votre microcontrôleur
Sources
- https://www.w3schools.com/html/html_editors.asp
- Tutoriels HTML Mozilla
- https://www.arduino.cc/en/Guide/ArduinoWiFiShield
- https://www.techworked.com/arduino-wifi-shield-upgrade/
- https://www.arduino.cc/en/Reference/WiFi
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie