Ethernet shield

Описание

Плата расширения для установки поверх контроллера Arduino. Совместима с Arduino Uno и Arduino Mega. Плата даёт возможность подключиться к проводной сети с другими устройствами и сетевыми ресурсами.

Плата обладает стандартным Ethernet-портом для подключения к сети с помощью патч-корда витой пары и набором контактов для подключения к Arduino.

На плате размещён слот для карты памяти формата micro SD, которая может быть использования для хранения информации, раздаваемой по сети.

Физические размеры

  • Шилд (Д х Ш х В): 73 х 54 х 28 мм

Плюсы использования

  • Позволяет выходить в сеть
  • Содержит в себе слот для microSD карт
  • Совместим с контроллерами Arduino UNO и Mega

Минусы использования

  • При использовании шилда невозможно использовать выводы платы, предназначенные для SPI интерфейса (смотри пункт «Важно»)

Библиотеки для работы с шилдом

  • Библиотеки для работы с шилдом включены в IDE Arduino

Важно!

Взаимодействие контроллера с микросхемой W5100 и картой microSD происходит по шине SPI. На платах UNO шина занимает выводы 11, 12 и 13; на платах Mega - это выводы 50, 51 и 52. На обеих платах пин 10 используются для активации микросхемы W5100 и пин 4 используются для активации microSD карты. Поэтому данные выводы не могут быть использованы для выполнения других функций. Также нужно отметить, что для платы Mega вывод 53 использован для SS (Slave Select) и для корректной работы он должен быть сконфигурирован как OUTPUT.

Пример подключения и использования

Пример: В данном примере демонстрируется подключение шилда к контроллеру Genuino UNO, получение данных температуры с датчика DHT11 и вывод полученных данных на сайт. Также при получении команды с сайта будет производиться управление светодиодом.

Для этого нам понадобится:

Ethernet Shield связывает Arduino с сетью интернет (локальной сетью) с помощью роутера. На данный момент мы будем использовать роутер для публикации полученной информации в сеть. Вся информация будет выводиться на простейшем сайте.

Для подключения шилда к роутеру Вам понадобится сетевой кабель, который и будет связывать эти два элемента. Для данного проекта не нужен интернет, поэтому подключаем один конец кабеля к Ethernet Shield, а другой к роутеру. Остается подключить роутер к питанию.

Схема подключения:

Скетч для загрузки:

#include "DHT.h"      //библиотека для работы с DHT 
#include "SPI.h"      //библиотека для работы с SPI 
#include "Ethernet.h" //библиотека для работы с Ethernet 
#define DHTPIN 3      //Номер пина, к которому подключен датчик 

boolean newInfo = false;                           //переменная для новой информации 
int ledPin = 7;                                    //переменная подключения светодиода
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //вводим mac адрес (может отличаться)
IPAddress ip(192, 168, 1, 177);                    //вводим IP адрес, который не совпадает с вашими устройствами в сети 
EthernetServer server(80);                         //создание объекта server 
DHT dht(DHTPIN, DHT11);                            //создание объекта датчика DHT 

void setup() { 
  pinMode (ledPin, OUTPUT); //инициализируем пин как выход для светодиода 
  Ethernet.begin (mac, ip); //запускаем сервер с указанными ранее MAC и вашим IP 
  Serial.begin (9600);      //инициализация Serial-порта
  dht.begin();              //инициализация датчика
  server.begin();           //инициализация шилда
} 

void loop() { 
  
  float h = dht.readHumidity(); //Считываем влажность в переменную "h" 
  float t = dht.readTemperature(); //Считываем температуру в переменную "t" 
  
  EthernetClient client = server.available(); //принимаем данные, посылаемые клиентом 
  
  if (client) { //если запрос оканчивается пустой строкой 
   
    boolean currentLineIsBlank = true; //ставим метку об окончании запроса (дословно: текущая линия чиста) 
     
    while (client.connected()) { //пока есть соединение с клиентом 
      
      if (client.available()) { //если клиент активен 
          
          char c = client.read(); //считываем посылаемую информацию в переменную "с" 
          
          if (newInfo && c == ' ') { 
             
             //если переменная новой информации = true и "с", в которой записан запрос, равен пустой строке 
             newInfo = false; //то обнуляем переменную поступления новой информации 
          } 
          
          if (c == '$') { 
          
            // если переменная "с", несущая отправленный нам запрос, содержит символ $ 
            // "$" подразумевает разделение получаемой информации (символов) 
            newInfo = true; //то пришла новая информация, ставим метку новой информации в true 
          } 
          
          //Проверяем содержание URL - присутствует $1 или $2 
          if (newInfo) { //если есть новая информация 
            
            Serial.println (c); //вывести строку
            
            if (c == '1') { //и "с" содержит 1 
              Serial.println ("Включить"); 
              digitalWrite (ledPin, HIGH); //то зажигаем светодиод 
            } 

            if (c == '2'){ //если "с" содержит 2 
              Serial.println ("Выключить"); 
              digitalWrite (ledPin, LOW); //гасим светодиод 
            } 
          } 

          if (c == '\n') { //если "с" равен символу новой строки 
            currentLineIsBlank = true; //то начинаем новую строку 
          } 
          else if (c != '\r') { 
            //иначе, если "с" не равен символу возврата курсора на начало строки 
            currentLineIsBlank = false; //то получаем символ на текущей строке 
          } 

          if (c == '\n' && currentLineIsBlank) { //выводим HTML страницу 

            client. println ("HTTP/1.1 200 OK"); //заголовочная информация 
            client. println ("Content-Type: text/html"); 
            client. println ("Connection: close"); 
            client. println ("Refresh: 5"); //автоматическое обновление каждые 5 сек 
            client. println (); //Это не ошибка, так должно быть 
            client. println ("<!DOCTYPE HTML>"); //HTML тип документа 
            client. println ("<html>"); //открытие тега HTML 
            client. println ("<head>"); //открытие тега Head 
            client. println ("<meta http-equiv='Content-Type' content='text/html ; charset=utf-8'/> "); 
            client. print ("<title>Own Web Server</title>"); //название страницы 
            client. println ("</head>"); //заголовочная информация 
            client. println ("<body>"); 
            client. print ("<H1>Own Web Server</H1>"); //заголовок на странице 
            client. print ("<a href=\"/$1\"><button>Включить</button></a>"); //кнопка включить 
            client. print ("<a href=\"/$2\"><button>Выключить</button></a>"); //кнопка выключить 
            client. println ("<br> <br>"); //перенос на след. строчку 
            client. println ("<hr/>"); //линия===================================== 
            client. println ("Tемпература = "); //Температура с DHT 11 
            client. println (t); //переменная температуры 
            client. println (" *C"); 
            client. println ("<br> "); //перенос на след. строчку 
            client. println ("Влажность = "); //Влажность с DHT 11 
            client. println (h); //переменная влажности 
            client. println (" %\t"); 
            client. println ("<br> "); //перенос на след. строчку 
            client. println ("<hr/>"); //линия===================================== 
            client. println ("</body>"); 
            client. println ("</html>"); //закрываем тег HTML 
            break; //выход 
          } 
        } 
      } 
      
      delay (1);     //время на получение новых данных 
      client.stop(); //закрываем соеднение 
   } 
}

Статья разработана при поддержке проекта HelpDuino