Arduino Ethernet Shield obsahuje integrovaný obvod W5100. Tento šikovný obvod od firmy WIZnet umožňuje připojit Arduino k domácí síti, potažmo Internetu. Samotný Shield obsahuje kromě obvodu W5100 také konektor RJ45 pro připojení síťového kabelu a slot pro paměťové karty typu microSD. Shield lze používat s různými typy desek, jako například Uno, Leonardo či Mega. Výhodou je také vyvedené tlačítko pro Reset na Shield. Pro jednoduchou kontrolu činnosti LAN portu jsou umístěný na Shieldu také indikační LED diody. Obvod W5100 zvládá práci s adresami typu IPv4 a komunikuje rychlostí 10 či 100 Mb/s. S Arduinem probíhá komunikace pomocí protokolu SPI, a to jak komunikace s obvodem W5100, tak i se slotem na paměťové karty.

Arduino Ethernet Shield

Pro úspěšné propojení Ethernet Shieldu s Arduinem tedy stačí do desky Arduino Uno (nebo jiné) zapojit Shield a propojit Shield síťovým kabelem RJ45 s routerem či switchem. Výhodou tohoto Shieldu je také to, že se na něm nachází průchozí konektory a my tedy můžeme zapojit nevyužité piny Arduina s jinými zařízeními. Ethernet Shield využívá piny 11, 12 a 13 pro SPI a dále pin 10 pro CS signál W5100 a pin 4 pro CS signál slotu pro paměťové karty.

Schéma zapojení Arduino Ethernet Shieldu

Ukázkový kód s web serverem obsahuje na svém začátku připojení potřebných knihoven, které jsou součástí Arduino IDE. Jako další si nastavíme vlastní MAC adresu, přičemž tuto adresu musí mít každé zařízení unikátní, a poté nastavíme IP adresu, která musí být přidělitelná DHCP serverem či nastavena routerem ručně. Použitý rozsah můžeme jednoduše zjistit tak, že na libovolném počítači připojeném ke stejné síti zjistíme IP adresu (např. 10.0.0.2) a poté nastavíme pro Arduino IP adresu o několik adres větší (např. 10.0.0.55). Poté stačí už jen inicializovat Ethernet Shield do módu server se standardním portem 80. Podprogram setup obsahuje nastavení komunikace po sériové lince, po kterém následuje zapnutí komunikace s Ethernet Shieldem a výpis nastavené IP adresy. Nekonečná smyčka loop na svém začátku jako první načte připojené klienty do proměnné klient a poté zkontrolujeme, zda máme nějakého klienta. V případě, že je klient připojen, vytiskneme si informaci na sériovou linku a následně mu pošleme všechna data. Jako první tedy pošleme standardní http odezvu, kde můžeme nastavit u příkazu „Refresh: 5“ počet vteřin, po kterých se provede u klienta znovunačtení stránky. Dále je pro nás důležité místo pro tištění vlastních údajů, kde v tomto programu vytiskneme čas od spuštění Arduina a poté pomocí for smyčky informace ze všech analogových vstupů. Poté co je vytištěna celá odezva, uzavřeme spojení a smyčka loop se opakuje.

// Ethernet Shield - web server

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

// nastavení MAC adresy
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
// nastavení IP adresy - musí být přidělitelná DHCP serverem,
// tedy ve správném rozsahu, případně přidělena routerem ručně
IPAddress ip(10, 0, 0, 55);

// inicializace serveru na portu 80
EthernetServer server(80);

void setup() {
  // komunikace po sériové lince rychlostí 9600 baud
  Serial.begin(9600);
  // zapnutí komunikace s Ethernet Shieldem
  Ethernet.begin(mac, ip);
  server.begin();
  // výpis informace o nastavené IP adrese
  Serial.print("Server je na IP adrese: ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  // načtení připojených klientů
  EthernetClient klient = server.available();
  // pokud se připojí nějaký klient, provedeme následující
  if (klient) {
    Serial.println("Novy klient:");
    // http request končí prázdným řádkem
    boolean aktualniRadkaPrazdna = true;
    // pokud je klient připojen a k dispozici,
    // vytiskneme mu dostupná data
    while (klient.connected()) {
      if (klient.available()) {
        // načtení a vytištění informace o klientovi
        char c = klient.read();
        Serial.write(c);
        // pokud se dostaneme na konec řádku a následující je prázdný,
        // byl ukončen request a my můžeme poslat odezvu
        if (c == '\n' && aktualniRadkaPrazdna) {
          // nejprve pošleme standardní http odezvu
          klient.println("HTTP/1.1 200 OK");
          klient.println("Content-Type: text/html");
          klient.println("Connection: close");
          // nastavení automatické obnovy stránky po 5 vteřinách
          klient.println("Refresh: 5");
          klient.println();
          klient.println("");
          klient.println("");
          // místo pro tištění vlastních údajů
          klient.print("Cas od spusteni: ");
          klient.print(millis()/1000);
          klient.print(" vterin.<br />");
          // ukázka výpisu dat ze všech analogových vstupů
          for (int analogPin = 0; analogPin < 6; analogPin++) {
            int analogData = analogRead(analogPin);
            klient.print("Analogovy vstup A");
            klient.print(analogPin);
            klient.print(": ");
            klient.print(analogData);
            // příkaz "<br />" funguje jako krok na další řádek
            klient.println("<br />");
          }
          klient.println("");
          break;
        }
        // začátek nové řádky
        if (c == '\n') {
          aktualniRadkaPrazdna = true;
        // detekce znaku na nové řádce
        } else if (c != '\r') {
          aktualniRadkaPrazdna = false;
        }
      }
    }
    // pauza pro prohlížeč, aby stihl zpracovat všechny data
    delay(1);
    // uzavření spojení
    klient.stop();
    Serial.println("Klient odpojen.");
    Serial.println("---------------------");
  }
}

Po nahrání ukázkového kódu do Arduino desky s připojeným Ethernet Shieldem dostaneme například tento výsledek:

Cas od spusteni: 16 vterin.
Analogovy vstup A0: 337
Analogovy vstup A1: 265
Analogovy vstup A2: 221
Analogovy vstup A3: 167
Analogovy vstup A4: 131
Analogovy vstup A5: 110

Cas od spusteni: 21 vterin.
Analogovy vstup A0: 150
Analogovy vstup A1: 144
Analogovy vstup A2: 143
Analogovy vstup A3: 115
Analogovy vstup A4: 103
Analogovy vstup A5: 84

Arduino Ethernet Shield je zajímavým síťovým prvkem, který nám umožňuje připojit Arduino do naší domácí sítě. Po připojení můžeme sledovat naměřené údaje z libovolného zařízení, které se nachází ve stejné síti. Tento Ethernet Shield tedy můžeme využít jako měřící zařízení v části domu, kde je rozvedena LAN síť. Pokud budete chtít využít také SD kartu, lze s ní pracovat obdobně jako v tomto návodu, stačí pouze změnit datový pin sd_CS na pin 4.

 

Seznam použitých komponent:

http://dratek.cz/arduino/917-arduino-ethernet-shield-w5100-r3-1420993161.html

http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

FB tw

Další podobné články