ENC28J60 Ethernet Shield Module Arduino

Dans cet article, nous allons voir comment connecter le module HR911105A à l’Arduino. Lors de la conception de mécanismes autonomes ou de la création d’un système de maison intelligente, de nombreuses personnes peuvent avoir besoin de connecter la carte Arduino au module LAN / réseau Ethernet ENC28J60. Cela permettra à l’Arduino d’être contrôlé via un réseau local par un ordinateur ou un smartphone (si un point d’accès Wi-Fi est disponible).


Pour cette activité, nous aurons besoin:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • ENC28J60 Ethernet Shield Module
  • LED et résistance
  • breadboard
  • fils de connexion
  • librarie EtherCard.h

Matériel supplémentaire sur ce sujet:

  1. Station météo avec ethernet shield ENC28J60
  2. Branchement WiFi module ESP8266 ESP-12E
  3. Branchement Wi-Fi module ESP8266 ESP-01

Arduino Ethernet Shield ENC28J60 datasheet, pinout

Principe de fonctionnement du ENC28J60 (datasheet)
Principe de fonctionnement ENC28J60 Module pinout, datasheet

Pour vous aider dans cette tâche, nous avons préparé une instruction étape par étape sur la façon de connecter l’Arduino au ENC28J60 (HanRun HR911105A). Vous apprendrez à quelles prises le port est connecté et vous verrez une code du Ethernet Shield ENC28J60 et de l’Arduino fonctionnant ensemble. Suivez les instructions étape par étape et vous serez en mesure de contrôler l’allumage des LED via votre réseau local grâce à votre ordinateur.

Le bus SPI est un bus de données fonctionnant en Full Duplex développé par Motorola dans lequel il y a un maitre et un ou plusieurs esclaves. Le maitre fourni l’horloge et initie la communication avec le ou les esclaves. Le nombre d’esclaves est limité au nombre de sorties digitale. La liaison MOSI sert uniquement dans le sens maitre vers esclave. Les appellations MOSI et MISO peuvent aussi s’appeler SDI (Serial Data Input) et SDO (Serial Data Output).

Comment branchement ENC28J60 Module Arduino

Connecter ENC28J60 Arduino
Comment connecter ENC28J60 Ethernet Shield Arduino
ENC28J60 Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
5V / 3.3V 5V / 3.3V 5V / 3.3V 5V / 3.3V
SCK 13 (SCK) 13 (SCK) 52 (SCK)
SO 12 (MISO) 12 (MISO) 50 (MISO)
ST 11(MOSI) 11 (MOSI) 51 (MOSI)
CS 10 (SS) 10 (SS) 53 (SS)

Connectez la carte Arduino Uno et le Ethernet Shield Module HR911105A comme sur la photo ci-dessous. Notez que le module Ethernet 10 broches ENC28J60 (HR911105A) est alimenté par un connecteur 3.3V et le module 12 broches par 5V. En outre, les désignations des connecteurs sur le Shield HanRun HR911105A peuvent être modifiées par le fabricant, par exemple ST au lieu de SO. La connexion des fils aux broches doit être de bonne qualité.

Une fois le schéma de câblage assemblé, le librarie ENC28J60 doit être chargée. Les libraries sont utilisées pour simplifier le code. Ils peuvent être des pilotes pour des équipements supplémentaires ou des fonctions fréquemment utilisées. L’IDE Arduino dispose déjà d’un ensemble de libraries standard fréquemment utilisées. Mais dans notre cas, nous devons charger une nouvelle librarie – EtherCard.h. Une fois le circuit assemblé, chargez le code.

Programme Arduino ENC28J60 module réseau LAN

#include "EtherCard.h"

static byte mymac[] = {0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A }; // MAC Address
static byte myip[] = {192, 168, 1, 55 }; // IP Address de la page
byte Ethernet::buffer[1200]; BufferFiller bfill;

int LedPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
boolean PinStatus[] = {1, 2, 3, 4, 5, 6, 7, 8};

const char http_OK[] PROGMEM =
  "HTTP/1.0 200 OK\r\n"
  "Content-Type: text/html\r\n"
  "Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
  "HTTP/1.0 302 Found\r\n"
  "Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
  "HTTP/1.0 401 Unauthorized\r\n"
  "Content-Type: text/html\r\n\r\n"
  "<h1>401 Unauthorized</h1>";

void homePage() {
  bfill.emit_p(PSTR("$F"
  "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>"
  "<meta name='viewport' content='width=device-width, initial-scale=1.0'>"
  "<title>Contrôle Arduino via Wi-Fi</title>"
  "<h1 style='color:#0ea6f2'>Contrôle Arduino via Wi-Fi</h1>"
  "<font size='3em'>"
  "<font style='display:none;'>LED 0: <a href='?ArduinoPIN1=$F'>$F</a></font>"
  "LED 1: <a href='?ArduinoPIN2=$F'>$F</a><br /><br />"
  "LED 2: <a href='?ArduinoPIN3=$F'>$F</a><br /><br />"
  "LED 3: <a href='?ArduinoPIN4=$F'>$F</a><br /><br />"
  "</font>"),

  http_OK,
  PinStatus[1] ? PSTR("off") : PSTR("on"),
  PinStatus[1] ? PSTR("<font color='green'>ON</font>") : PSTR("<font color='red'>OFF</font>"),
  PinStatus[2] ? PSTR("off") : PSTR("on"),
  PinStatus[2] ? PSTR("<font color='green'>ON</font>") : PSTR("<font color='red'>OFF</font>"),
  PinStatus[3] ? PSTR("off") : PSTR("on"),
  PinStatus[3] ? PSTR("<font color='green'>ON</font>") : PSTR("<font color='red'>OFF</font>"),
  PinStatus[4] ? PSTR("off") : PSTR("on"),
  PinStatus[4] ? PSTR("<font color='green'>ON</font>") : PSTR("<font color='red'>OFF</font>"));
}

void setup() {
  Serial.begin(9600);

  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0);
  if (!ether.dhcpSetup());

  ether.printIp("My Router IP: ", ether.myip);
  ether.staticSetup(myip);
  ether.printIp("My SET IP: ", ether.myip);

  for (int i = 2; i <= 5; i++) {
    pinMode(LedPins[i], OUTPUT);
    PinStatus[i] = false;
  }
}

void loop() {
  delay(1);
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);

  if (pos) {
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
      bfill.emit_p(http_Unauthorized);
    }
    else {
      data += 5;
      if (data[0] == ' ') {
        homePage();
        for (int i = 2; i <= 5; i++) { digitalWrite(LedPins[i], PinStatus[i + 1]); }
      }

      // "16" = le nombre de caractères de la chaîne "?ArduinoPIN1=on "
      else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) {
        PinStatus[1] = true;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN2=on ", data, 16) == 0) {
        PinStatus[2] = true;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=on ", data, 16) == 0) {
        PinStatus[3] = true;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=on ", data, 16) == 0) {
        PinStatus[4] = true;
        bfill.emit_p(http_Found);
      }

      // "17" = le nombre de caractères de la chaîne "?ArduinoPIN1=off "
      else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) {
        PinStatus[1] = false;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN2=off ", data, 17) == 0) {
        PinStatus[2] = false;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN3=off ", data, 17) == 0) {
        PinStatus[3] = false;
        bfill.emit_p(http_Found);
      }
      else if (strncmp("?ArduinoPIN4=off ", data, 17) == 0) {
        PinStatus[4] = false;
        bfill.emit_p(http_Found);
      }

      else { bfill.emit_p(http_Unauthorized); }
    }
    ether.httpServerReply(bfill.position());
  }
}

Explication du code ENC28J60 Ethernet Shield réseau LAN:

  1. dans la ligne byte Ethernet::buffer[1200]; nous avons libéré de la mémoire dans le microcontrôleur pour le presse-papiers. Lorsque nous augmentons le volume de données sur la page Web, nous devons augmenter la mémoire tampon afin d’éviter les blocages;
  2. les LED sont allumées/éteintes en fonction du nombre de caractères de la chaîne – ArduinoPIN4=on ou ArduinoPIN1=off.

Conclusion. L’IP de la carte Arduino est prescrite dans le code. Toutes les fonctions de base sont commentées dans le programme, vous ne devriez donc pas avoir de problèmes pour configurer le programme. Allez à l’adresse IP 192.168.1.55 via votre ordinateur ou votre téléphone – la page web devrait s’ouvrir. Si le HanRun HR911105A / module ENC28J60 ne parvient pas à se connecter, vous devez vérifier les paramètres du Wi-Fi routeur.





2 Replies to “Branchement ENC28J60 Ethernet Shield Arduino”

  1. Bonjour. Top votre explication. Néanmoins, j’utilise une carte Geekcreit® Arduino Compatible UNO R3 ATmega16U2… et cela ne fonctionne pas. La carte Ethernet n’est pas reconnue hardwarement.

    Auriez-vous qques conseils à me donner ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.