Мы в социальных сетях

подчеркивание красное для правой колонки

Наш официальный YouTube канал

подчеркивание красное для правой колонки

Подключение Ethernet Shield к Arduino с подробным объяснением. Создание web-сервера для Arduino на базе Ethernet shield W5100

Вертикальная фотография Ethernet Shield

Самым интересным элементом в совокупности с ардуино является Ethernet Shield.

Ethernet Shield - это особая плата расширения, с помощью которой возможно управление устройствами через сервер и интернет.

Этот элемент является одним из самых интересных дополнений к Arduino. Он открывает огромное количество возможностей в управлении вашими устройствами ,с помощью него вы сможете облегчить себе жизнь, сделать ее в несколько раз удобней.
Сейчас мы - Helpduino, вас научим пользоваться Ethernet Shield на Arduino и подробно объясним скетч программы.

Характеристики шилда и его составляющее

Фронтальная фотография Ethernet Shield

Ethernet Shield основан на чипе W51000, который имеет не топовые характеристики, но их вполне хватает. Данный шилд работает с использованием библиотеки Arduino Ethernet library.

Хотелось бы отметить, что на плате шилда присутствует слот для micro SD карты. Это нужно для того, чтобы можно было хранить большее количество информации и загружать веб-сайты с самого Arduino. Для использования micro SD карты нужно использовать дополнительную библиотеку.


Технические характеристики Ethernet Shield

  • Рабочее питание – 5 В (питание платы воспроизводится от Arduino)
  • Размер буфера: 16 КБ
  • Скорость подключения: 10/100Мб

Принцип работы Ethernet Shield и необходимые компоненты для подключения

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


Для нашей работы нам необходимы следующие компоненты:

Все эти элементы можно приобрести по низкой цене и с высоким качеством в интернет магазине SmartElements.

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


Необходимые компоненты для подключения Ethernet Shield к Arduino

Подключение Ethernet Shield к Arduino

Схема подключение этих элементов приведена ниже. Хочу напомнить, что подключать все элементы нужно очень осторожно!.

Схема подключения Ethernet Shield к Arduino для создания сервера

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

Подключение Ethernet Shield к Wi-Fi роутеру

Поговорим о подключении Ethernet шилда к Arduino. Как вы могли догадаться, чтобы связать Ethernet Shield с Arduino, необходимо напрямую подключить эти два элемента, как показано на рисунке.

Подключение Ethernet Shield к Arduino Подключение Ethernet Shield к Arduino

Осталось подключить остальные компоненты к Ethernet Shield`у, как показано на фотографии выше. Примерно такое соединение у вас должно получиться.


Готовое подключение Ethernet Shield к Arduino со всеми компонентами

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


Написание скетча программы для создания web-сервера для Arduino на базе Ethernet shield W5100

Для работы датчика на Arduino нужно скачать и установить библиотеку DHT11 .

Скачать библиотеку можно здесь .


После того, как мы скачали нужную библиотеку, ее нужно правильно установить. скачанные файлы нужно переместить по следующему пути :

Диск C стрелка Progtam Files стрелка Arduino стрелка Libraries

папка с экрана

После того, как мы все сделали перейдем к самой важной ступеньке, а именно к программированию.


/*---------------- 1 часть ----------------*/
#include "DHT.h" //библиотека для работы с DHT
#include "SPI.h" //библиотека для работы с SPI
#include "Ethernet.h" //библиотека для работы с Ethernet
#define DHTPIN 3 //Обозначаем номер пина, к которому подключен датчик
boolean newInfo = 0; //переменная для новой информации
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//вводим mac адрес, обычно он такого вида, может отличаться
IPAddress ip(192, 168, 1, 177);
//вводим любой IP , который не совпадает с вашим
EthernetServer server(80); //инифиализация библиотеки Ethernet server library
DHT dht(DHTPIN, DHT11); //инициируем датчик DHT

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

/*---------------- 3 часть ----------------*/
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 == ' '){
//если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке
newInfo = 0; //то обнуляем переменную поступления новой информации
}
if (c == '$'){
// если переменная "с", несущая отправленный нам запрос, содержит символ $
// "$" подразумевает разделение получаемой информации (символов)
newInfo = 1; //то пришла новая информация, ставим метку новой информации в 1
}
//Проверяем содержание URL - присутствует $1 или $2
if (newInfo == 1){ //если есть новая информация
Serial.println (c);
if (c == '1'){ //и "с" содержит 1
Serial.println ("Включить");
digitalWrite (8, HIGH); //то зажигаем светодиод
}

if (c == '2'){ //если "с" содержит 2
Serial.println ("Выключить");
digitalWrite (8, LOW); //гасим светодиод
}
}
if (c == '\n') { //если "с" равен символу новой строки
currentLineIsBlank = true; //то начинаем новую строку
}
else if (c != '\r') {
//иначе, если "с" не равен символу возврата курсора на начало строки
currentLineIsBlank = false; //то получаем символ на текущей строке
}

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

/*---------------- 4 часть ----------------*/
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>HelpDuino Web Server</title>"); //название страницы
client. println ("</head>"); //заголовочная информация
client. println ("<body>");
client. print ("<H1>HelpDuino 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(); //закрываем соеднение
}
}

Выше вам представлен скетч нашей программы. С помощью него вы сможете управлять светодиодом и принимать информацию с датчика влажности и температуры DHT11. Отдельно мы уже работали и со светодиодом, и с датчиком DHT11, вы можете рассмотреть их подключение к Arduino в отдельности нажав кнопкой мышки по названию. В самом скетче есть пояснение к каждой строчке кода, но мы дополнительно обговорим некоторые детали

Для начала, я бы хотел разделить код нашей программы на несколько частей. Вы можете увидеть это разделение в самом коде, который представлен выше. Мы будем рассматривать их по отдельности для нашего удобства. Почему я разбил код нашей программы на четыре части, вы сейчас поймете.

Первая часть кода

В первой части кода мы как, обычно, указываем пусть к необходимым библиотекам, номер пинов наших устройств. Для подключения Ethernet Shield нам пришлось указать ip адрес и mac адрес


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);

Хотелось бы сказать, что mac адрес не зашит в шилд и вы сами задаете его в скетче. Можно использовать mac адрес, который мы привели в нашем примере! Что касается ip адреса,как известно, по стандартам протокола для частных сетей можно использовать разные адреса, в частности, адресация 192.168... Последующие четыре цыфры могут быть произвольные, но в той последовательности, как у нас приведены в скетче. Важно, что ip адрес, указанный в скетче программы не должен пересекаться с ip адресами всех устройств в домашней сети!

Вторая часть кода

Во второй части кода мы инициируем датчики и запускаем сервер с указанными раннее ip и mac. Тут ничего сложного нет, так что мы пойдем дальше.

Третья часть кода

В третьей части кода происходят основные действия. Подробно их описывать я не буду, ведь в скетче программы все подробно описано. Здесь мы указали переменную "t" и "h".


float h = dht.readHumidity(); //Считываем влажность в переменную "h"
float t = dht.readTemperature(); //Считываем температуру в переменную "t"

Также мы вводим переменную "c" для работы со светодиодом.


while (client.connected()) {
if (client.available()) {
char c = client.read();

Также указываем условие для включения и выключения светодиода


if (c == '1'){
Serial.println ("Включить");
digitalWrite (8, HIGH);
}
if (c == '2'){
Serial.println ("Выключить");
digitalWrite (8, LOW);
}

Четвертая часть кода

Заключающей частью нашего скетча я выделил html код, который будет отображаться в браузере. Описание каждой строчки вы также можете найти в самом скетче. Это самый простой web-сайт, так что тут ничего сложного нет.

В конце у вас должно получиться что-то похожее на это!

Готовое подключение Ethernet Shield к Arduino с созданием сервера Готовое подключение Ethernet Shield к Arduino с созданием сервера

Также вы можете посмотреть видео версию нашего проекта!

Надеюсь у вас все получилось! Если у вас остались вопросы, можете написать нам в вконтакте или в комментариях ниже. Мы постараемся ответить на ваши вопросы в скором времени!


Вам возможно будет интересно

Комментарии