Arduino

и не только...

Instagram TikTok VK

Ethernet shield w5100

При создании на Arduino чего-то большего, чем учебные примеры, часто требуется обмен данными. Один из способов - использовать протокол TCP/IP с проводным подключением к локальной сети. Для этого и нужен Ethernet shield w5100.

Выглядит шилд отдельно и на плате Arduino Uno так:

Ethernet shield W5100Ethernet shield W5100 on Arduino Uno

Важно знать, что шилд использует пины под номерами 10, 11, 12 и 13, поэтому их использовать нельзя. Пин 4 также используется для встроенного в шилд картридера.

Для работы с сетью требуется библиотека Ethernet. Вот так выглядит код подключения к сети:

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

byte ip[] = {192, 168, 1, 178};
byte mac[] = {0xDE, 0xED, 0xBA, 0xEF, 0xEF, ED};

void setup()
{
  Ethernet.begin(mac, ip);
}

Но это не очень интересный пример. Давайте сделаем небольшой web-сервер:

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

byte ip[] = {192, 168, 1, 178};
byte mac[] = {0xDE, 0xED, 0xBA, 0xEF, 0xEF, 0xED};

// слушаем стандартный порт http
EthernetServer server(80);

void setup() {
  // подключаемся к локальной сети
  Ethernet.begin(mac, ip);
}

void loop() {
  // слушаем порт, ждем запросов
  EthernetClient client = server.available();
  if (client) {
    // запрос должен заканчиваться пустой строкой, так что считываем 
    bool currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // если мы дошли до конца строки (получили символ новой строки) и строка пустая,
        // то http-запрос завершен и можно выдать ответ
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close"); // соединение будет закрыто после получения клиентов ответа
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("Hello world!");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // получен символ новой строки
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // текущая строка продолжается
          currentLineIsBlank = false;
        }
      }
    }
    // дадим время браузеру получить все данные
    delay(1);
    // после чего закроем соединение
    client.stop();
  }
}

Этот пример уже поинтереснее. На его основе можно сделать, например, метеостанцию: подключить к плате датчики давления, температуры, влажности и выдавать их значения. Причем, если провайдер предоставляет вам статический IP, вы можете настроить "проброс" порта на роутере и обращаться к страничке через интернет.

Купить ethernet shield w5100 можно здесь: 1 2 3 4 5 6 или найти ссылку в каталоге.