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 и вывод полученных данных на сайт. Также при получении команды с сайта будет производиться управление светодиодом.
Для этого нам понадобится:
Что нужно: | Кол-во, шт |
---|---|
Контроллер Smart UNO | 1 |
Модуль датчика температуры и влажности DHT-11 | 1 |
Резистор 220 Ом | 1 |
Светодиод | 1 |
Провода папа-папа | 6 |
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(); //закрываем соеднение } }