Le module ENC28J60 relie un microcontrôleur à un réseau filaire : il réunit sur une petite carte le contrôleur Ethernet ENC28J60 de Microchip, son quartz de 25 MHz et un connecteur RJ45 qui contient déjà les transformateurs d’isolement. La carte se branche au microcontrôleur par le bus SPI, et c’est le programme de la carte hôte qui fait tourner la pile TCP/IP. C’est la façon la plus économique de poser un serveur web, un relevé de capteur ou un automatisme sur un câble réseau plutôt qu’en WiFi.
Ce module est un contrôleur Ethernet complet, pas un simple adaptateur : il gère lui-même la couche physique 10Base-T et la couche d’accès au réseau (MAC), conformément à la norme IEEE 802.3. Le microcontrôleur n’a donc plus qu’à envoyer et recevoir des paquets par SPI — quelques fils, deux résistances de tirage côté carte hôte, et le montage est sur le réseau.
Ce que contient la carte
- Le contrôleur ENC28J60 : MAC et PHY 10Base-T intégrés, conforme IEEE 802.3, 8 Ko de mémoire tampon, bus SPI jusqu’à 20 MHz.
- Un connecteur RJ45 HR911105A à transformateurs intégrés : l’isolement galvanique nécessaire à Ethernet est sur la carte, aucun composant extérieur n’est à câbler. Deux témoins lumineux y signalent la liaison et l’activité du réseau.
- Un quartz de 25 MHz, la fréquence de référence exigée par le contrôleur.
- Une rangée de broches au pas de 2,54 mm, directement compatible avec les plaques d’essai et les câbles Dupont, et quatre trous de fixation aux coins.
Caractéristiques techniques
| Contrôleur | Microchip ENC28J60, Ethernet autonome à interface SPI |
|---|---|
| Couches gérées par le contrôleur | MAC et PHY 10Base-T intégrés, conforme IEEE 802.3 |
| Débit | 10 Mb/s, en half-duplex et en full-duplex |
| Compatibilité réseau | Fonctionne sur les réseaux 10, 100 et 1000 Mb/s — la négociation se fait à la vitesse du module |
| Interface vers la carte hôte | SPI, horloge jusqu’à 20 MHz |
| Tension d’alimentation | 3,1 à 3,6 V (3,3 V typique) ; selon la série, une entrée 5 V alimentée à travers le régulateur monté sur la carte |
| Niveaux logiques | 3,3 V ; les entrées CS, SCK, SI et RESET sont tolérantes 5 V (fiche technique Microchip) |
| Mémoire tampon | 8 Ko de RAM double port pour les paquets reçus et transmis |
| Interruptions | Six sources d’interruption, une sortie INT |
| Sortie d’horloge | CLKOUT, diviseur par 1, 2, 3, 4 ou 8 ; 6,25 MHz par défaut |
| Quartz | 25 MHz exigé par le contrôleur |
| Connecteur réseau | RJ45 avec transformateurs 1:1 et témoins de liaison et d’activité |
| Consommation | Jusqu’à environ 180 mA, et plus de 200 mA en pointe à l’émission |
| Pas des broches | 2,54 mm |
Brochage : se fier aux repères imprimés sur la carte
Selon la série de fabrication, la sérigraphie du module n’écrit pas les mêmes abréviations pour les mêmes signaux — SI est parfois noté ST, SCK parfois CLK, INT parfois LNT, et l’entrée d’alimentation VCC, 5V, 3,3V ou Q3. Ce qui change d’un lot à l’autre, c’est l’appellation et l’ordre des broches, jamais la fonction. Repérez donc chaque broche par ce qui est écrit sur votre exemplaire, en vous aidant du tableau ci-dessous, plutôt que par la position qu’elle occupe.
| VCC (ou 5V, ou 3,3V, ou Q3) | Alimentation du module. N’alimenter qu’une seule de ces entrées, jamais deux en même temps. |
|---|---|
| GND | Masse, à relier à la masse de la carte hôte. Indispensable. |
| SCK (ou CLK) | Horloge SPI, entrée. Tolérante 5 V. |
| SI (ou ST) | Données de la carte hôte vers le module, entrée. Tolérante 5 V. |
| SO | Données du module vers la carte hôte, sortie en 3,3 V. |
| CS | Sélection du circuit, active à l’état bas, avec résistance de tirage interne. Tolérante 5 V. |
| RST | Remise à zéro, active à l’état bas. Tolérante 5 V. Peut rester non connectée : la carte hôte peut aussi provoquer la remise à zéro par le programme. |
| INT (ou LNT) | Sortie d’interruption, active à l’état bas, facultative : sans elle, le programme interroge le module à intervalles réguliers. |
| WOL | Réveil du réseau, non utilisée dans un montage courant. |
| CLKOUT | Sortie d’horloge pour d’autres composants, non utilisée dans un montage courant. |
Six liaisons suffisent à faire fonctionner le montage : alimentation, masse, SCK, SI, SO et CS. Les autres broches ne servent que pour l’interruption, la remise à zéro matérielle ou la mise en sommeil.
Câblage avec une carte Arduino Uno
Le bus SPI matériel de l’Uno sort sur les broches D11, D12 et D13, et la sélection du circuit se pose sur n’importe quelle autre broche numérique — D10 par convention, puisque c’est la broche SS matérielle.
| Arduino Uno | Module ENC28J60 |
|---|---|
| 5V (ou 3,3V selon les repères du module) | Alimentation |
| GND | Masse |
| D13 (SCK) | SCK |
| D11 (MOSI) | SI |
| D12 (MISO) | SO |
| D10 (SS) | CS |
| D2 | INT (facultatif) |
| Bouton de remise à zéro | RST (facultatif, ou non connectée) |
Aucun convertisseur de niveau n’est nécessaire avec une carte AVR en 5 V : le contrôleur est prévu pour être intégré dans un montage 5 V, et ses entrées CS, SCK, SI et RESET tolèrent 5 V (fiche technique Microchip). Dans l’autre sens, la sortie SO du module délivre du 3,3 V, et une entrée d’Arduino Uno bascule au niveau haut à partir de 0,6 fois son alimentation, soit 3,0 V : la liaison se fait donc directement, avec des câbles Dupont courts plutôt que de longues nappes, le SPI à 20 MHz n’aimant pas les fils qui traînent.
Le contrôleur est gourmand pour sa taille : jusqu’à environ 180 mA, et plus de 200 mA en pointe au moment d’émettre. Sur un Arduino Uno R3 alimenté par USB, cela passe, mais évitez d’y ajouter d’autres modules consommateurs : les instabilités d’alimentation d’un ENC28J60 se manifestent par des réponses incohérentes sur le bus SPI, donc par des erreurs difficiles à interpréter. La sortie 3,3 V de l’Uno, elle, est limitée à 50 mA par son convertisseur : elle ne peut pas alimenter ce module, il faut passer par le 5 V.
Applications typiques
- Un serveur web autonome qui affiche une mesure, un état ou un compteur, consultable depuis n’importe quel navigateur du réseau local.
- La commande d’un relais ou d’une sortie à distance, depuis une page web hébergée par la carte elle-même.
- L’envoi périodique de relevés vers un serveur ou une base de données, sans passer par le WiFi.
- La surveillance d’un équipement : la liaison filaire reste disponible même dans un local où le réseau sans fil ne porte pas.
- Un montage de démonstration ou d’apprentissage, où voir passer les requêtes HTTP aide plus qu’une bibliothèque réseau cachée.
Bibliothèque et prise en main
Le contrôleur ENC28J60 ne contient pas la pile TCP/IP : c’est le microcontrôleur qui l’exécute, et c’est ce que la bibliothèque apporte. Trois choix courants, tous installables depuis le gestionnaire de bibliothèques de l’IDE Arduino :
- UIPEthernet — la plus complète : DHCP, DNS, TCP et UDP, avec une interface très proche de la bibliothèque Ethernet officielle. C’est celle utilisée dans le mini-projet ci-dessous.
- EthernetENC — maintient l’API de la bibliothèque Ethernet officielle pour ce contrôleur, avec un encombrement mémoire plus faible.
- EtherCard — la plus légère, mais à adresse fixe et sans DHCP : utile sur les petits microcontrôleurs à mémoire limitée.
Une carte à 3,3 V (ESP32, STM32, RP2040) convient parfaitement au module, à condition de fournir le courant : la sortie 3,3 V d’une carte de développement alimente rarement un ENC28J60 sans faiblir, et la documentation d’Espressif recommande une source capable d’un ampère lorsque le module est alimenté par la carte.
Mini-projet : un serveur web qui commande une sortie
Le montage complet tient sur une plaque d’essai : le module sur le réseau, une sortie pilotée depuis le navigateur, et l’adresse affichée sur le moniteur série au démarrage.
Matériel
- Un module ENC28J60 et une carte Arduino Uno.
- Une LED rouge 5 mm et une résistance de 220 ohms.
- Des câbles Dupont et une plaque d’essai.
- Un câble réseau relié à la box, elle-même en DHCP.
Câblage
- Module : alimentation et masse, puis
SCKsur D13,SIsur D11,SOsur D12 etCSsur D10. - LED : la broche D7, puis la résistance de 220 ohms, puis la patte longue de la LED, et la patte courte à la masse.
Programme
La sortie s’allume et s’éteint en appelant /on et /off depuis un navigateur. Les deux adresses demandées par le réseau local sont MAC, une adresse matérielle fixée dans le programme, et l’adresse IP, obtenue par DHCP — avec une adresse fixe de repli si aucun serveur DHCP ne répond.
/*
* Module Ethernet ENC28J60 avec une carte Arduino Uno
* SCK sur D13, SI sur D11, SO sur D12, CS sur D10
* Composants, brochage et fiche complete : www.marocproduits.com
*
* Bibliotheque : UIPEthernet, installable depuis l'IDE Arduino
*/
#include "UIPEthernet.h"
byte adresseMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress adresseDeRepli(192, 168, 1, 177);
EthernetServer serveur(80);
const int brocheSortie = 7;
bool sortieAllumee = false;
void envoyerPage(EthernetClient client) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("Serveur web du module ENC28J60");
client.println("Sortie : ");
if (sortieAllumee) {
client.println("allumee");
} else {
client.println("eteinte");
}
client.println("Appeler /on pour allumer, /off pour eteindre");
}
void traiterDemande(String demande) {
// Dans une demande du type GET /on, la commande commence au 5e caractere
if (demande.indexOf("/on") == 4) {
sortieAllumee = true;
digitalWrite(brocheSortie, HIGH);
}
if (demande.indexOf("/off") == 4) {
sortieAllumee = false;
digitalWrite(brocheSortie, LOW);
}
}
void setup() {
pinMode(brocheSortie, OUTPUT);
digitalWrite(brocheSortie, LOW);
Serial.begin(9600);
if (Ethernet.begin(adresseMac) == 0) {
Ethernet.begin(adresseMac, adresseDeRepli);
Serial.println("DHCP muet, adresse de repli : 192.168.1.177");
} else {
Serial.print("Adresse obtenue : ");
Serial.println(Ethernet.localIP());
}
serveur.begin();
}
void loop() {
EthernetClient client = serveur.available();
if (client) {
while (client.connected()) {
if (client.available()) {
// 10 = code ASCII du retour a la ligne
String demande = client.readStringUntil(10);
traiterDemande(demande);
envoyerPage(client);
client.stop();
}
}
}
}
Variante : le module W5100
Le module Ethernet W5100 est la solution voisine et mérite la comparaison. Le W5100, lui, exécute la pile TCP/IP dans son propre circuit, avec quatre connexions simultanées : le programme est plus court, la mémoire du microcontrôleur reste libre, et la consommation est plus basse. L’ENC28J60 a pour lui un brochage réduit et une grande universalité — n’importe quel microcontrôleur doté d’un SPI peut le piloter. Si votre programme doit tenir plusieurs connexions en même temps, le W5100 est le meilleur choix ; s’il s’agit d’un serveur ou d’un client unique, l’ENC28J60 suffit.
Points d’attention
- L’alimentation explique la plupart des pannes. Un module sous-alimenté répond n’importe quoi sur le bus SPI : les erreurs de lecture de registres, les adresses IP incohérentes et les redémarrages ne viennent presque jamais du programme. Vérifiez la source de courant avant de chercher dans le code.
- N’alimentez jamais deux entrées du module en même temps. Sur les cartes qui portent à la fois une entrée 5 V et une sortie 3,3 V, l’une alimente le régulateur et l’autre en sort : les relier toutes les deux revient à mettre deux sources en conflit.
- Un seul CS actif à la fois. Si un autre circuit partage le même bus SPI, chaque périphérique doit avoir sa propre broche de sélection, et une seule doit être active pendant une transaction.
- La vitesse d’horloge se règle dans le programme. Le contrôleur accepte jusqu’à 20 MHz, mais des fils longs ou une alimentation faible rendent la liaison fragile : commencez à 8 MHz ou moins si vous constatez des erreurs, puis remontez.
- Le mode duplex ne se négocie pas tout seul. Contrairement aux contrôleurs plus récents, l’ENC28J60 ne négocie pas le mode full-duplex avec le commutateur : il se fixe dans la configuration du programme.
- 10 Mb/s, c’est peu, et c’est suffisant. Une page web, un relevé de capteur ou une commande de relais ne saturent jamais une liaison à 10 Mb/s. Pour transmettre un flux d’images ou de sons, ce module n’est pas le bon outil.
Questions fréquentes
Comment connaître l’adresse IP du module ?
Le programme vous la donne : la bibliothèque UIPEthernet l’affiche sur le moniteur série lorsque Ethernet.localIP() est appelée après l’obtention du bail DHCP. Si l’adresse affichée à la première ligne est 0.0.0.0, c’est que le bail a échoué — le repli en adresse fixe doit alors être dans la même plage que votre box, et l’adresse choisie doit être hors de la plage distribuée par le DHCP.
Le module reste muet, par où commencer ?
Dans l’ordre : l’alimentation (source capable de fournir le courant, masse commune avec la carte hôte, une seule entrée d’alimentation), puis la broche CS — une sélection mal reliée, ou reliée à la mauvaise broche, donne un module qui semble mort, puis la correspondance des quatre fils SPI avec les repères réellement imprimés sur la carte, et enfin la vitesse d’horloge abaissée. Le témoin de liaison du connecteur RJ45 est un bon point de départ : s’il reste éteint, le problème est matériel et se situe avant le programme.
Faut-il une résistance sur chaque fil de données ?
Non, et c’est une différence importante avec le module réseau d’une carte comme l’Uno R3, qui en demande. L’ENC28J60 intègre ses résistances de tirage et son étage d’attaque : il se relie directement aux broches SPI de la carte hôte.
Peut-on l’utiliser sans DHCP ?
Oui, et c’est même le mode de repli du programme ci-dessus : on donne une adresse IP, un masque et une passerelle fixes. C’est le mode à préférer pour un montage permanent, dont l’adresse ne doit pas changer d’un redémarrage à l’autre. La bibliothèque EtherCard ne travaille qu’ainsi.
Le module chauffe-t-il ?
Une légère chaleur est normale : un contrôleur qui consomme de l’ordre de 180 mA dissipe quelques dixièmes de watt. Une carte nettement chaude au toucher, en revanche, signale une alimentation trop élevée sur une entrée prévue pour le 3,3 V, ou un régulateur de la carte qui travaille au-delà de ce qu’il supporte.
À combiner avec
Pour commander une charge réelle — une lampe, une pompe, un moteur — le module 1 relais 5 V s’alimente sur la carte et se pilote par une seule broche : c’est la suite logique du mini-projet, la page web commandant alors le relais au lieu d’une LED. Pour monter l’ensemble sans souder, la plaque d’essai 830 points laisse la place au module, à la sortie et aux fils de liaison, et se fixe sur un support adhésif si le montage doit rester en place.









