Introduction

Le shield Ethernet se connecte directement à une carte Arduino (Uno, Mega, etc.) en s’empilant sur ses broches. Il intègre un contrôleur Ethernet (comme le W5100, W5500 ou W5100S) qui prend en charge la communication réseau via le protocole TCP/IP. L’Arduino échange des données avec ce contrôleur en utilisant le bus SPI.

Sur l’image à gauche, on voit un shield Ethernet équipé également d’un socle pour carte microSD. Cela permet de stocker temporairement des données, bien que ce ne soit pas l’objectif principal ici.

À droite, on trouve un module Ethernet ENC28J60. Ce module peut offrir certaines améliorations par rapport au shield classique, mais il présente quelques contraintes : il ne permet pas de connecter directement une carte SD pour le stockage, et il ne se branche pas directement sur l’Arduino. Il nécessite l’utilisation de cordons de connexion pour relier ses broches à la carte Arduino.

Le shield Ethernet offre plusieurs fonctionnalités intéressantes :

  • Il permet d’attribuer une adresse IP à l’Arduino, soit de manière statique, soit automatiquement via DHCP.

  • Il peut fonctionner comme serveur web, capable d’envoyer des pages HTML directement à un navigateur.

  • Il peut également agir comme client, pour envoyer des données vers un serveur distant.

  • Il prend en charge la communication via les protocoles TCP et UDP.

  • Il facilite la connexion de capteurs, permettant d’afficher leurs valeurs en temps réel sur une page web.

Certains modèles intègrent un lecteur de carte microSD, pratique pour stocker des pages web, des fichiers de configuration ou des données de mesure.

Programme

Le sketch suivant permet d’utiliser le shield Ethernet comme serveur web. Lorsqu’un navigateur web se connecte à Internet, il établit une communication avec un serveur web.

L’utilisation du shield Ethernet est grandement facilitée par la bibliothèque Ethernet.h, incluse dans l’IDE Arduino. Cette bibliothèque permet notamment de :

  • Configurer l’adresse MAC et l’adresse IP de l’Arduino,

  • Démarrer un serveur sur un port donné (souvent le port 80 pour le HTTP),

  • Gérer les connexions des clients,

  • Envoyer et recevoir des données sur le réseau.

#include <SPI.h>
#include <Ethernet.h>

// Adresse MAC
byte MACAddress[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// Adresse IP
byte IPAddress[] = { 192, 168, 2, 110 };

// Port HTTP
const int HTTPPORT = 80;

// Couleurs RGB pour barres de couleur
String barColor[] = {
  "ff0000",
  "00ff00",
  "0000ff",
  "ffff00",
  "ff00ff",
  "550055"
};

#define HTML_TOP    "<html>\n<head><title>Arduino Web-Server</title></head>\n<body>"
#define HTML_BOTTOM "</body>\n</html>"

// Démarrage du serveur web sur le port indiqué
EthernetServer myServer(HTTPPORT);

void setup() {
  // Initialisation Ethernet
  Ethernet.begin(MACAddress, IPAddress);

  // Démarrage du serveur
  myServer.begin();
}

void loop() {
  EthernetClient myClient = myServer.available();

  if (myClient) {
    myClient.println("HTTP/1.1 200 OK");
    myClient.println("Content-Type: text/html");
    myClient.println();

    myClient.println(HTML_TOP);     // HTML début
    showValues(myClient);           // Contenu HTML
    myClient.println(HTML_BOTTOM);  // HTML fin

    delay(1);           // Courte pause pour navigateur Web
    myClient.stop();    // Fermeture connexion client
  }
}

void showValues(EthernetClient &myClient) {
  for (int i = 0; i < 6; i++) {
    myClient.print("Analog Pin");
    myClient.print(i);
    myClient.print(": ");
    myClient.print(analogRead(i));

    myClient.print("<div style='height:15px; background-color:#");
    myClient.print(barColor[i]);
    myClient.print("; width:");
    myClient.print(analogRead(i));
    myClient.println("px; border: 2px solid;'></div>");
  }
}

Explication du circuit

  1. L’Arduino se connecte au réseau avec une IP fixe.

  2. Il démarre un serveur web sur le port 80.

  3. Lorsqu’un navigateur accède à l’Arduino :

    • Le serveur renvoie une page HTML.

    • Les valeurs des pins analogiques sont lues.

    • Des barres colorées représentant ces valeurs sont générées dynamiquement.

  4. Le navigateur affiche les valeurs et les barres en temps réel.

L’Arduino devient un petit serveur web qui transforme des capteurs analogiques en visualisation graphique instantanée accessible depuis un navigateur.

Page Web

Pour accéder au serveur web Arduino, saisissez l’adresse IP définie dans votre sketch directement dans la barre d’adresse de votre navigateur. Dans mon exemple, cette adresse est 192.168.2.110.

Si cette adresse vous semble trop complexe ou difficile à retenir, vous pouvez choisir une adresse plus conviviale, comme par exemple : http://arduino/.