Étiquettes : , ,
4
(2)

La connexion d’un microcontrôleur à internet est rendu possible par l’utilisation d’un Shield Ethernet W5100. La base de la création d’objets connectés, est de les faire communiquer avec leur environnement en passant par un réseau comme le réseau Wifi.
La communication via le réseau Ethernet est très pratique lorsqu’on veut connecter, en filaire, un appareil au réseau Wifi.

Pour une connexion au Wifi sans fil, optez pour un Shield Wifi ou un autre type de carte.

Matériel

  • Ordinateur
  • Arduino UNO
  • Câble USB A Mâle/B Mâle
  • Câble Ethernet RJ45
  • Ethernet Shield W5100

Principe de fonctionnement du Shield Ethernet W5100

La communication utilise le réseau éthernet qu’il est possible de connecter au réseau Wifi. Pour pouvoir accéder à la carte Arduino sans avoir à la connecter au routeur internet, il est nécessaire de créer un pont entre la connexion wifi et la connexion Ethernet sur votre ordinateur. Pour cela, il faut:

  • Allez dans le Centre Réseau et Partage
  • Allez dans « Modifier les paramètres de la carte »
  • Sélectionnez Ethernet et Wifi /(internet source) et clique droit
  • Cliquez sur « Créer pont »

Sous Windows, dans le terminal de commande, tapez « arp -a » pour voir les adresses IP utilisées sur le réseau.

Le Shield Ethernet W5100 utilise la Microchip W5100 comme contrôleur Ethernet.

Schéma

Le Shield Ethernet W5100 est compatible avec les microcontrôleurs Arduino UNO et Mega. La puce W5100 et la carte SD utilisent le SPI bus pour communiquer avec la carte Arduino. La broche 10 est utilisé pour sélectionner le contrôleur Ethernet W5100, la broche 9 comme RESET pour le W5100 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)
  • 9 pour le reset de la micropuce W5100 (W5100_RST)
  • 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 Ethernet W5100

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 ou Ethernet au réseau
  • définir un serveur server
  • définir un client client
//Libraries
#include <Ethernet.h>//https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet
//Parameters
String request ;
unsigned long refreshCounter  = 0;
IPAddress ip(192, 168, 1, 179) ;
byte mac [6] = {0x54, 0x34, 0x41, 0x30, 0x30, 0x31};
//Objects
EthernetServer server(80);
EthernetClient client;
void setup() {
 //Init Serial USB
 Serial.begin(9600);
 Serial.println(F("Initialize System"));
 //Init W5100
 Ethernet.begin(mac, ip);
 while (!Ethernet.begin(mac)) {
   Serial.println(F("failed. Retrying in 1 seconds."));
   delay(1000);
   Serial.print(F("Starting W5100..."));
 }
 pinMode(2, OUTPUT);
 server.begin();
 Serial.println(F("W5100 initialized"));
 Serial.print(F("IP Address: "));
 Serial.println(Ethernet.localIP());
}
void loop() {
 client = server.available();
 clientRequest();
 handleRequest();
}
void clientRequest( ) { /* function clientRequest */
 ////Get client request
 if (!client) {
   return;
 }
 // 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(EthernetClient client) { /* function webpage */
 ////Send webpage to client
 //output HTML data header
 client.println(F("HTTP/1.1 200 OK"));
 client.println(F("Content-Type: text/html"));
 client.println();
 //header
 client.print(F("<!DOCTYPE HTML><html><head><title>AranaCorp</title>"));
 client.print(F("<meta http-equiv='content-type' content='text/html; charset=UTF-8'>"));
 //meta-refresh page every x seconds
 client.print(F("<meta http-equiv='refresh' content='2'>"));
 client.print(F("</head><body bgcolor='black'><br>"));
 client.print(F("<hr/><hr>"));
 client.print(F("<h1 style='color : #3AAA35;'><center> AranaCorp - Arduino Web Controller </center></h1>"));
 client.print(F("<hr/><hr>"));
 client.println("<center><p style='color:white;'>");
 client.print(F("Page refresh number: "));
 client.print(refreshCounter); //current refresh count
 client.println("</p></center><br>");
 client.print(F("<h2 style='color:green;'>Arduino Inputs</h2>"));
 client.println("<p style='color:white;'>");
 client.print(F("<br><br>"));
 client.print("<br><br>");
 //output analog input pin
 for (int i = 0; i < 6; i++) {
   client.print("<b>Input A");
   client.print(i);
   client.print(" : </b>");
   client.print(analogRead(14 + i)); //A0=14, A1=15 ,etc.
   client.print(F("<br>"));
 }
 client.print(F("</p><br>"));
 client.print(F("<h2 style='color:green;'>Arduino Outputs</h2>"));
 client.print(F("<p style='color:white;'>"));
 //digital output
 client.print(F("<br><br>"));
 client.print(F("<b>Digital output Pin 2 : </b>"));
 client.print("<input value=" + String(digitalRead(2)) + " readonly></input>");
 client.print(F("<a href='/dig2on'><button>Turn On </button></a>"));
 client.print(F("<a href='/dig2off'><button>Turn Off </button></a><br />"));
 client.print(F("</p><br>"));
 //file end
 client.print(F("<br></body></html>"));
 refreshCounter += 1;
 delay(1);
}

Résultat

Nous pouvons voir que le Shield Ethernet W5100 s’initialise correctement. Lorsque vous entrer l’adresse IP dans la barre d’adresse de votre navigateur, la page web décrite dans la fonction webpage s’affiche.
Une fois la page chargée, les valeurs des entrées analogiques varient à chaque rafraichissement et l’état de la broche 2 peut être modifier en appuyant sur les boutons correspondants.

Applications

  • Utiliser une interface web pour piloter votre Arduino

Sources

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

How useful was this post?

Click on a star to rate it!

Average rating 4 / 5. Vote count: 2

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?