Le module Ethernet W5100 branche une carte Arduino sur un réseau filaire : il ajoute un port RJ45 et un lecteur de carte microSD, et il gère lui-même toute la pile TCP/IP. C’est la solution la plus stable pour un montage qui doit rester connecté en permanence — un serveur web, un relevé de mesures envoyé sur le réseau, ou un pilotage à distance.
Il se présente sous la forme d’un shield au format Arduino Uno : il s’empile directement sur la carte, reprend ses connecteurs vers le haut et laisse toutes les broches disponibles. Le même shield fonctionne sur une Uno R3 comme sur une Mega 2560.
À quoi sert un shield Ethernet ?
Contrairement au WiFi, le réseau filaire ne se déconnecte pas, ne demande pas de mot de passe et ne dépend pas du voisinage radio. Pour un montage fixe, c’est un avantage décisif.
- Serveur web embarqué — la carte répond à une adresse IP et affiche ses mesures dans un navigateur, depuis un ordinateur ou un téléphone du même réseau.
- Envoi de données — pousser une température, un niveau ou un compteur vers un service distant, régulièrement et sans intervention.
- Pilotage à distance — commander un relais, une LED ou un moteur depuis une page web ouverte sur le réseau local.
- Stockage sur carte microSD — le lecteur intégré sert à journaliser des mesures ou à servir des pages enregistrées sur la carte.
- Réseau industriel local — deux cartes équipées de ce shield peuvent échanger des données entre elles sans passer par un serveur.
Caractéristiques techniques
| Contrôleur | WIZnet W5100 — pile TCP/IP matérielle, protocoles TCP et UDP |
|---|---|
| Débit | 10/100 Mbps, négociation automatique |
| Connecteur réseau | RJ45 8P8C avec transformateurs d’isolation intégrés et voyants de liaison |
| Connexions simultanées | Jusqu’à 4 sockets TCP ou UDP |
| Interface avec la carte | Bus SPI, doublé sur le connecteur ICSP pour la compatibilité Mega |
| Lecteur de carte | microSD, sur le même bus SPI, sélection sur la broche 4 |
| Alimentation | 5 V fournis par la carte hôte, régulateur 3,3 V embarqué pour le contrôleur |
| Réinitialisation | Bouton poussoir, avec contrôleur de reset embarqué |
| Voyants | LED d’alimentation et d’état du lien réseau |
| Format | Shield Arduino Uno — recouvre la carte hôte et reprend ses connecteurs |
Brochage : quelles broches sont utilisées
Le shield se contente du bus SPI et de deux broches de sélection. Tout le reste de la carte reste accessible : les connecteurs femelles du shield sont traversants et laissent passer les broches de la carte hôte.
| Sélection réseau (CS) | Broche 10 — c’est elle qui active le contrôleur Ethernet |
|---|---|
| Sélection microSD (CS) | Broche 4 — elle active le lecteur de carte |
SPI MOSI | Broche 11, également présente sur le connecteur ICSP |
SPI MISO | Broche 12, également sur l’ICSP |
SPI SCK | Broche 13, également sur l’ICSP |
| Alimentation | Broches 5V et GND de la carte hôte |
| Broches restantes | Entièrement libres : entrées analogiques, sorties numériques, capteurs, relais |
Sur une Mega 2560, les signaux SPI passent par le connecteur ICSP et la bibliothèque Ethernet continue d’utiliser la broche 10 pour sélectionner le contrôleur : le même programme fonctionne donc sur les deux cartes. La seule précaution est que la broche 53 reste configurée en sortie, ce que la bibliothèque fait d’elle-même.
Mini-projet : un serveur web qui publie une température
Le montage complet tient en une demi-heure : le shield empilé sur la carte, un capteur de température, et la carte qui répond à une adresse IP. Ouvrez cette adresse dans le navigateur d’un ordinateur du même réseau, et la température mesurée s’affiche.
Ce qu’il faut
| Le module | Le shield Ethernet W5100 de cette page |
|---|---|
| La carte hôte | Uno R3 + câble USB |
| La mesure | Capteur de température LM35 — 10 mV par degré |
| Les liaisons | 10 × fil mâle-femelle, pour relier le capteur aux broches traversantes du shield |
| Le réseau | Un câble Ethernet droit et un routeur ou un switch, avec une adresse IP libre |
Pourquoi des fils mâle-femelle ? Le capteur se termine par des broches mâles, et les connecteurs du shield sont des douilles femelles. L’extrémité femelle du fil se clipse sur le capteur, l’extrémité mâle entre dans la douille du shield.
Le câblage
LM35 broche 1, +VS | → shield 5V |
|---|---|
LM35 broche 2, VOUT | → shield A0 |
LM35 broche 3, GND | → shield GND |
| Shield | → empilé sur la carte Uno, sans forcer, connecteurs alignés |
| Câble Ethernet | → de la prise RJ45 du shield vers une prise libre du routeur |
La prise RJ45 du shield est équipée de ses propres transformateurs d’isolation : rien d’autre n’est à câbler entre le module et le réseau.
Le programme
À copier dans l’IDE Arduino, puis à téléverser sur la carte. Remplacez l’adresse IP par une adresse libre de votre réseau, puis ouvrez-la dans un navigateur.
/*
* Serveur web Ethernet - module Ethernet W5100
* Carte : Arduino Uno R3 ou Arduino Mega 2560
* Le shield repond a une adresse IP et publie la temperature lue sur A0
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "SPI.h"
#include "Ethernet.h"
const byte PIN_LM35 = A0; // sortie VOUT du capteur
// Adresse MAC du shield : elle doit etre unique sur le reseau
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Adresse fixe : plus simple qu un adressage automatique pour un serveur
IPAddress ip(192, 168, 1, 50);
EthernetServer serveur(80);
void setup() {
Serial.begin(9600);
Ethernet.begin(mac, ip); // initialise le W5100 avec cette adresse
serveur.begin(); // ouvre le port 80
Serial.print("Serveur pret sur ");
Serial.println(Ethernet.localIP());
}
void loop() {
EthernetClient client = serveur.available();
if (client) {
// Vider les en-tetes de la demande jusqu a la ligne vide
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == 10) {
break; // 10 = code ASCII du retour a la ligne
}
}
}
// Le LM35 delivre 10 mV par degre : on convertit la lecture en degres
float tension_mV = analogRead(PIN_LM35) * (5000.0 / 1024.0);
float temperature = tension_mV / 10.0;
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/plain; charset=utf-8");
client.println("Connection: close");
client.println();
client.print("Serveur Arduino et shield W5100 - temperature : ");
client.print(temperature, 1);
client.println(" degres Celsius");
delay(1);
client.stop();
}
}Comment ça marche
Ethernet.begin(mac, ip)configure le contrôleur W5100 avec l’adresse MAC et l’adresse IP : c’est à ce moment que la carte prend sa place sur le réseau. La ligne suivante,Serial.println(Ethernet.localIP()), affiche l’adresse dans le moniteur série — utile pour vérifier avant même d’ouvrir un navigateur.serveur.available()renvoie un client dès qu’un navigateur se connecte au port 80. Le programme lit et jette les en-têtes de la demande, puis répond. Un navigateur envoie beaucoup de lignes : seules les premières nous intéressent, et la demande se termine par une ligne vide.- La conversion de la mesure tient en deux calculs :
analogRead()renvoie un nombre de 0 à 1023, que l’on ramène à une tension en millivolts, puis que l’on divise par 10 pour obtenir des degrés Celsius. client.stop()ferme la connexion. Le W5100 gère quatre sockets simultanées : les fermer proprement à chaque réponse évite de les saturer.
Pour aller plus loin
- Afficher la mesure en façade — un afficheur LCD 16×02 I2C se branche sur les broches restées libres du shield et rend le montage lisible sans passer par un navigateur.
- Servir une page enregistrée sur carte — formatez une carte microSD en FAT16 ou FAT32, écrivez-y un fichier, insérez-la dans le lecteur du shield : le programme peut lire ce fichier et l’envoyer au navigateur à la place du texte brut.
- Journaliser les mesures — le lecteur microSD sert aussi à enregistrer un relevé régulier, que l’on relit ensuite sur un ordinateur.
- Déclencher une action — un seuil de température peut commander un relais, un ventilateur ou un buzzer, comme n’importe quelle sortie de la carte.
W5100 ou ENC28J60 ?
Ces deux modules ajoutent une prise réseau à une carte Arduino, mais ils ne travaillent pas de la même façon — et le choix change la façon d’écrire le programme.
| Pile TCP/IP | Le W5100 la gère dans son propre circuit. L’ENC28J60 ne la gère pas : elle tourne dans la mémoire de la carte Arduino, via une bibliothèque. |
|---|---|
| Débit | 10/100 Mbps pour le W5100, 10 Mbps pour l’ENC28J60. |
| Encombrement mémoire | Le W5100 en consomme très peu sur la carte. L’ENC28J60 laisse moins de place au reste du programme, ce qui compte sur une Uno. |
| Bibliothèque | La bibliothèque Ethernet de l’IDE Arduino pilote le W5100 ; l’ENC28J60 demande sa propre bibliothèque. |
| Format | Le W5100 est ici un shield empilable avec lecteur microSD. L’ENC28J60 est un petit module à relier par fils, sans lecteur de carte. |
En résumé : le module Ethernet ENC28J60 convient à un montage léger qui envoie peu de données, tandis que ce shield W5100 est le bon choix dès qu’il faut un serveur web, une réponse rapide ou un lecteur microSD.
Questions fréquentes
Le shield fonctionne-t-il sur une Mega 2560 ?
Oui, et sans modification du programme. Le shield est marqué compatible MEGA : les signaux SPI passent aussi par le connecteur ICSP, que la Mega utilise. Les broches de sélection restent les mêmes — 10 pour le réseau, 4 pour le lecteur de carte.
Faut-il un câble Ethernet croisé ?
Non, un câble droit ordinaire suffit vers un routeur ou un switch. Le câble croisé ne servait qu’à relier directement deux machines anciennes, et il est devenu inutile sur la quasi-totalité du matériel actuel.
Le réseau et le lecteur microSD peuvent-ils servir en même temps ?
Oui. Les deux partagent le même bus SPI, mais chacun a sa propre broche de sélection : la carte s’adresse à l’un ou à l’autre à tour de rôle, sans conflit. Une carte microSD doit simplement être formatée en FAT16 ou FAT32, comme celle d’un appareil photo.
Combien de navigateurs peuvent se connecter à la fois ?
Le contrôleur W5100 ouvre jusqu’à quatre connexions simultanées. C’est largement suffisant pour un usage domestique ou un réseau local, mais un programme qui ferme proprement chaque réponse (client.stop()) évite de voir les connexions se bloquer au bout de quelques minutes. À noter qu’un navigateur ouvre souvent plusieurs connexions pour une seule page : ce comportement normal consomme lui aussi des sockets.
Pourquoi mon navigateur ne voit-il rien ?
Vérifiez dans cet ordre : les voyants de liaison du connecteur RJ45 sont-ils allumés ? L’adresse IP est-elle bien sur le même réseau que votre ordinateur (par exemple 192.168.1.50 si votre box est en 192.168.1.1) ? Le moniteur série affiche-t-il « Serveur prêt sur… » ? Enfin, l’adresse MAC du programme doit être unique sur votre réseau : si deux appareils la partagent, les deux tombent en panne d’accès.
Pourquoi une adresse IP fixe plutôt qu’automatique ?
Une adresse fixe évite de chercher la carte à chaque allumage : vous saisissez toujours la même adresse dans le navigateur. L’adressage automatique fonctionne aussi, mais l’adresse attribuée peut changer, et elle doit alors être relue dans le moniteur série à chaque démarrage.
À combiner avec
Le shield s’empile sur une Mega 2560 + câble USB quand le projet demande plus de broches ou de mémoire que l’Uno. Si vous partez de zéro, sachez que le shield reprend les connecteurs de la carte hôte : tout ce que vous branchez en dessous reste accessible, et un second shield peut encore venir s’empiler par-dessus.










