+1 500 000 produits offerts
7000 colis expédiés chaque jour
+300 000 clients de 150 pays
Date de publication: 29-06-2021 Date de mise à jour: 10-04-2026 🕒 6 min de lecture
Depuis plusieurs années, la création de réseaux informatiques étendus ne sert plus qu'à connecter des ordinateurs. La baisse des prix et l'augmentation de la puissance de calcul des petits microcontrôleurs ont amorcé le processus rapide de connexion aux réseaux locaux Ethernet ou même au réseau Internet mondial, appareils de faible puissance, assurant principalement des fonctions de contrôle, de contrôle et de mesure. De plus, ces solutions ont commencé à apparaître également dans les réseaux industriels professionnels en remplaçant progressivement les anciens systèmes basés sur RS232 et dérivés. Ainsi, au début du XXIe siècle, l'ère de la soi-disant Internet des objets (ang. Internet of Things – IoT). Bien que le marché actuel IoT soit dominé par des appareils communiquant principalement via des réseaux sans fil et des normes WiFi, ZigBee, BLE ou Z-Wave, toujours dans de nombreuses solutions matérielles (principalement de la soi-disant IIoT – Industrial Internet of Things), nécessitant une transmission fiable et une sécurité des données, le réseau Ethernet est toujours l'une des solutions les plus populaires. Les créateurs de la plate-forme Arduino n'ont pas laissé la demande des concepteurs d'appareils IIoT sans réponse et ont développé l'offre standard de modules Arduino avec des overlays de type Ethernet Shield 2, adressés aux utilisateurs individuels, ou Arduino MKR ETH SHIELD pour des solutions professionnelles, basé sur des contrôleurs WIZnet W5100/W5200/W5500 et intégrant des circuits MAC et PHY dans un seul circuit intégré. Cette offre a été rapidement élargie par des producteurs indépendants avec de nouveaux modules beaucoup moins chers basés sur des systèmes populaires ENC28J60. Cet article décrit brièvement les deux solutions : la solution officielle, basée sur la série W5x00, et les solutions développées principalement par la communauté Open Source/Open Hardware, basée sur les modules ENC28J60.
L'avantage incontestable des modules officiels basés sur les systèmes de la série W5x00 (y compris leurs équivalents matériels, tels que les overlays OKYSTAR OKY2102 ou DFROBOT DFR0125) est la fourniture d'un support logiciel complet sous la forme d'une bibliothèque Ethernet intégré à la pile Arduino. Ainsi, l'utilisateur peut commencer à créer le programme juste après le démarrage de Arduino IDE, sans avoir besoin d'installer des packages logiciels supplémentaires.
Figure 1. Module OKY2102 (à gauche) et DFR0125 (à droite), équipé d’un contrôleur WIZnet W5100
Selon la variante du système WIZnet et la quantité de RAM disponible, la bibliothèque Ethernet prend en charge au maximum quatre (pour la puce W5100 et RAM <= 2 Ko) ou huit (systèmes W5200 et W55000) connexions entrantes/sortantes parallèles. L'interface logicielle de la bibliothèque a été divisée en cinq classes, regroupant des fonctionnalités individuelles. La classe Ethernet est responsable de l'initialisation de la bibliothèque et de la configuration des paramètres réseau (y compris l'adresse IP, l'adresse de sous-réseau ou les paramètres de passerelle d'accès). Une classe IPAddress a été créée pour l'adressage IP. Pour exécuter une simple application du serveur côté Arduino, il faudra utiliser la classe EthernetServer, qui permet d'écrire et de lire des données depuis tous les appareils connectés. Une classe complémentaire est la classe EthernetClient, qui permet, en quelques appels simples, de préparer un client réseau fonctionnel qui effectue des opérations d'écriture et de lecture de données depuis le serveur. Pour la communication UDP, la bibliothèque Ethernet fournit la classe EthernetUDP. Une description complète des classes avec des méthodes est disponible sur :
D'une manière caractéristique de la plate-forme Arduino, toutes les opérations de programme complexes ont été implémentées directement dans la bibliothèque fournie – le programmeur dispose d'un ensemble limité mais très fonctionnel d'API, grâce auquel le processus de développement d'applications est rapide et ne nécessite pas de connaissance détaillée des piles réseau. Analysons donc la construction de l'application serveur la plus simple, munie d'une bibliothèque Ethernet, qui doit écouter les connexions entrantes du client de protocole Telnet.
Le code d'application du serveur commence à ajouter les fichiers d'en-tête nécessaires pour établir la communication SPI (les modules WIZnet échangent des données avec le microcontrôleur à l'aide de ce protocole) et les fichiers d'en-tête de la bibliothèque Ethernet :
#include <SPI.h>
#include <Ethernet.h>
L'étape suivante consiste à configurer les paramètres réseau (adresse MAC du contrôleur, adresse IP de la passerelle d'accès et masque de sous-réseau) et de créer un serveur d'écoute sur le port 23 (le port par défaut pour le protocole Telnet) :
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 0, 0);
EthernetServer server(23);
Dans le corps de la fonction setup(), il faut initialiser la librairie Ethernet et lancer le processus d'écoute. De plus, la configuration du port série a également été placée, sur laquelle seront affichés les messages concernant l'adresse du serveur, la nouvelle connexion client et les données reçues au cours de la session établie :
void setup() {
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
while (!Serial) {
}
Serial.print("Chat server address:");
Serial.println(Ethernet.localIP());
}
La boucle principale du programme loop() attend une connexion du client et vérifie les données lisibles. Lorsqu'il reçoit des données, il les renvoie inchangées au client, en réalisant ainsi une simple fonction d'écho :
void loop() {
EthernetClient client = server.available();
if (client) {
if (!alreadyConnected) {
client.flush();
Serial.println("We have a new client");
client.println("Hello, client!");
alreadyConnected = true;
}
if (client.available() > 0) {
char thisChar = client.read();
server.write(thisChar);
Serial.write(thisChar);
}
}
}
Le bon fonctionnement de l'application ci-dessus peut être testé à l'aide de n'importe quel client de protocole Telnet (par exemple, Putty sous Windows ou commande telnet sous Linux) ou avec l'utilisation d'un autre kit Arduino et d'une classe EthernetClient.
Une solution alternative pour les systèmes WIZnet W5x00 officiellement pris en charge sont des modules basés sur le contrôleur ENC28J60 (par exemple OKYSTAR OKY3486 ou ETH CLICK). Grâce à un prix inférieur et au boîtier plus facile à installer manuellement (contrairement aux systèmes W5x00 contenus dans des boîtiers LQFP 80-pin, le contrôleur ENC28J60 est disponible dans des boîtiers 28-pin SSOP, SOIC, QFN et un boîtier prévu pour un montage traversant SPDIP), ce circuit est très populaire parmi les électroniciens amateurs.
Figure 2. Modules OKY3486 (à gauche) oraz ETH CLICK (à droite) équipés d’un contrôleur ENC28J60
Bien qu’Arduino ne fournisse pas le support officiel de nombreuses bibliothèques open source ont été mises à la disposition des programmeurs, assurant une intégration rapide des puces ENC28J60 avec le logiciel. Une attention particulière doit être portée à la bibliothèque [UIPEthernet](https://github.com/UIPEthernet/UIPEthernet "" target="_blank" rel="nofollow" et à la bibliothèque EtherCard. disponibles sous la licence GPLv2. La compatibilité de l’interface API avec la bibliothèque officiel Arduino Ethernet constitue un avantage incontestable du premier des projets énumérés en permettant au processus de développement d'applications d'être indépendant des choix effectués entre les systèmes W5x00 et le système ENC28J60 dans la couche matérielle.
Le deuxième projet – EtherCard – implémente une interface de programmation indépendante, qui, selon les préférences du programmeur, peut s'avérer être une alternative intéressante. Comme dans le cas de la bibliothèque Arduino Ethernet, la mise en place de fonctionnalités assez complexes (ex. implémentation du client DHCP) peut être réalisée en plusieurs lignes de code :
#include <EtherCard.h>
static byte mymac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte Ethernet::buffer[700];
void setup () {
Serial.begin(57600);
Serial.println(F("
[testDHCP]"));
if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)
Serial.println(F("Failed to access Ethernet controller"));
Serial.println(F("Setting up DHCP"));
if (!ether.dhcpSetup())
Serial.println(F("DHCP failed"));
ether.printIp("My IP: ", ether.myip);
ether.printIp("Netmask: ", ether.netmask);
ether.printIp("GW IP: ", ether.gwip);
ether.printIp("DNS IP: ", ether.dnsip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
}
Transfer Multisort Elektronik (TME) est l’un des plus grands distributeurs mondiaux de composants électroniques, de pièces électrotechniques, d’équipements d’atelier et d’automatisation industrielle. Le catalogue comprend plus de 1 500 000 de produits provenant de 1 300 fabricants leaders. Les centres logistiques modernes de TME à Łódź et Rzgów (Pologne), avec une superficie totale de plus de 40 000 m², expédient près de 6 000 colis par jour à des clients dans plus de 150 pays.
TME investit également dans le développement des connaissances et compétences des jeunes ingénieurs et passionnés d’électronique grâce au projet TME Education et soutient la communauté technologique en organisant la série d’événements TechMasterEvent, promouvant l’innovation et l’échange d’expériences.