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
- https://www.w3schools.com/html/html_editors.asp
- Tutoriels HTML Mozilla
- https://github.com/CisecoPlc/Arduino-W5100-W5200/tree/master/Ethernet
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie
Une question, sur une mega le bus 50,51,52 doit être connecté comment ? si l’on emboîte le shield directement ?
Merci
Bonjour,
Vous pouvez placer le shield normalement sur la carte Mega. Ils utiliseront le connecteur ICSP pour communiquer.
Bonjour, normalement, il n’y a pas de raison que ça ne fonctionne pas. tant qu’une seule ligne CS est activée. Il faut vérifier dans la librairie W5100 si le CS est géré.
Si cela pose un soucis vous pouvez vous rensigner sur les PN352