Работа с Ethernet Shield v2

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

Поехали.

На  этот  раз  я  решил  сохранить  себе  несколько  страничек  с сайта  freeduino.ru

[cryout-multi][cryout-column width=»1/4″]EShield_v2_1_small [/cryout-column] [cryout-column width=»1/2″]

Как и оригинальный Arduino Ethernet Shield 01, модуль не полностью совместим с Arduino Mega, и для работы с данной платой потребуются небольшие изменения конструкции.

Однако, модуль прекрасно работает с платой Freeduino Mega 2560 при установке ее SPI перемычек в режим «std».

На модуле предусмотрено место для читателя SD-карт, но данный вариант подключения SD карты не поддерживается официальным ПО Arduino.

Поскольку установленный сетевой модуль физически затрудняет доступ к Freeduino, на лицевую сторону выведены все линии ввода/вывода, а также кнопка сброса.

Freeduino использует цифровые порты 10, 11, 12 и 13 для обмена информацией с модулем, и они не могут использоваться для других целей.

[/cryout-column] [cryout-column width=»1/4″]EShield_v2_2_small [/cryout-column] [/cryout-multi]

Модуль поддерживает до четырех одновременных соединений по IP протоколам TCP и UDP. Для программирования модуля рекомендуется использовать стандартную Arduino библиотеку Ethernet, входящую в состав программного обеспечения Arduino с версии 0.12. В настоящее время стандартная библиотека позволяет реализовать TCP-сервер и TCP-клиент.

Из-за особенностей цепи сброса Arduino-совместимых плат для нормальной работы модуля может потребоваться подключение конденсатора емкостью порядка 1 мкФ между выводами Gnd и Reset платы Arduino.

Подключается этот шилд к вашей Ардуино так же просто как и любой другой, просто состыкуйте их вместе, как показано на фото. Также следует учесть, что подключение других шилдов поверх Ethernet Shield’а будет затруднительно. Это связано с большими размерами разъема RJ-45 для подключения сетевого кабеля, поэтому если вы хотите использовать другие шилды лучше их размещать между ардуино и Ethernet Shield’ом.

Основой шилда является чип WIZnet W5100, который имеет внутренний буфер в 16 кб. Поддерживается работа на скоростях 10/100 Мбит/c.

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

Так же на борту расположен слот для подключения карты памяти micro SD на которую можно записывать, а также считывать информацию. Для работы с карточкой тоже нужна библиотека. В данной статье не будут описаны принципы работы с картой памяти.

Еще на шилде присутствует разъем для подключения модуля PoE (Power over Ethernet), он используется для питания устройства через сетевой кабель. Подробнее про эту технологию можно прочитать на официальном сайте Arduino.

Плату подключите к USB порту компьютера, а к шилду подсоедините сетевой кабель, идущий от модема, подключенного к сети интернет. Затем откройте среду разработки (советую использовать самую последнюю версию с официального сайта, так как, например, в версиях до 1.0 нет поддержки DHCP). Если ваш модем настроен как DHCP сервер, то вы можете открыть скетч DhcpAddressPrinter, после прошивки вашей плате будет автоматически назначен IP-адрес, который можно будет увидеть в Serial Monitor.

Скетч находится здесь:

File -> Examples -> Ethernet -> DhcpAddressPrinter

После открытия скетча можете изменить MAC-адрес платы (уникальный идентификатор любого сетевого устройства. В более новых версиях Ethernet шилда MAC адрес можно увидеть на наклейке на плате. Если наклей нет, то просто введите любую комбинацию, главное чтобы в вашей сети не было устройств с совпадающими MAC-адресами.

4. Arduino — сервер

Вы можете использовать Arduino Ethernet Shield в качестве веб-сервера для отображения HTML страницы. Также можно анализировать запросы, отправленные клиентом (например веб-браузером). Следующие два скетча показывают как можно “отдавать” HTML страницу клиенту, подключенному к нашему Arduino-серверу, а так же как парсить строку URL.

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

В первом примере показано как по нажатию кнопки изменять HTML страницу на нашем сервере:


/*
 
 Простой веб-сервер, изменяющий отдаваемую страницу при нажатии кнопки
 
 Цепь:
 * Ethernet shield подсоеденённый к пинам 10, 11, 12, 13
 * Подсоедените кнопку между пинами D2 и 5V
 * Подсоедените резистор 10 кОм между пином D2 и землёй
 
 */
 
#include <SPI.h>
#include <Ethernet.h>
 
// Введите MAC-адрес и IP-адрес вашего контроллера
// IP-адрес должен соответствовать вашей локальной сети
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(192,168,1,5); //<<< IP-АДРЕС ВВОДИТЬ СЮДА!!!
 
// Инициализация библиотеки Ethernet server
// с тем IP-адресом и портом который мы хотим использовать
// (порт 80 по умолчанию используется для HTTP):
EthernetServer server(80);
 
int buttonPress = 1;
 
void setup()
{
  pinMode(2, INPUT);
 
  // запускаем Ethernet соединение и сервер:
  Ethernet.begin(mac, ip);
  server.begin();
}
 
void loop()
{
  buttonPress = digitalRead(2);
  // ожидание подключения клиентов
  EthernetClient client = server.available();
  if (client) {
    // HTTP запрос заканчивается пустой строкой
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
    // если вы дошли до конца строки (был получен символ конца строки)
    // и следующая строка пустая, значит http запрос закончился,
    // можно отправлять ответ
        if (c == '\n' && currentLineIsBlank) {
          // отправляем стандартный HTTP-заголовок "Успешный запрос"
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
 
          // В зависимости от состояния кнопки (нажата или нет),
          // отдаем определенную страницу
          if (buttonPress == 1) {
            client.println("СВЕТ!");
          }
          else if (buttonPress == 0){
            client.println("ТЕМНОТА!");
          }
 
          break;
        }
        if (c == '\n') {
          // начало новой строки
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // получили символ в текущей строке
          currentLineIsBlank = false;
        }
      }
    }
    // Небольшая задержка, чтобы дать время
    // браузеру для получения данных
    delay(1);
    // закрываем соединение
    client.stop();
  }
}


Чтобы все заработало просто подключите кнопку между пинами D2 и 5V, а также резистор на 10 кОм между D2 и GND. Теперь введите IP-адрес назначенный Arduino в адресной строке браузера. Должна загрузиться страница с черным фоном. Нажмите и удерживайте кнопку, затем обновите страницу – теперь она загрузиться с белым фоном.

Следующий пример показывает как управлять состоянием светодиода, в зависимости от URL отправляемого Arduino:

/*
 
 Включение и отключение светодиода в зависимости от переданого URL
 
 Включить:
 
http://ВАШ-IP-АДРЕС/$1
 
 Выключить:
 
http://ВАШ-IP-АДРЕС/$2
 
 Цепь:
 * Ethernet shield подключен к пинам 10, 11, 12, 13
 * Плюс светодиода к пину D2, минус через резистор 220 Ом к земле
 
 */
 
#include <SPI.h>
#include <Ethernet.h>
 
boolean incoming = 0;
 
// Введите MAC-адрес и IP-адрес вашего контроллера
// IP-адрес должен соответствовать вашей локальной сети
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(191,11,1,1); //<<< IP-АДРЕС ВВОДИТЬ СЮДА!!!
 
// Инициализация библиотеки Ethernet server
// с тем IP-адресом и портом который мы хотим использовать
// (порт 80 по умолчанию используется для HTTP):
EthernetServer server(80);
 
void setup()
{
  pinMode(2, OUTPUT);
 
  // запускаем Ethernet соединение и сервер:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}
 
void loop()
{
  // ожидание подключения клиентов
  EthernetClient client = server.available();
  if (client) {
    // Запрос HTTP заканчивается пустой строкой
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // Если будет получен символ переноса строки и
    // сама строка при этом пустая, значит
    // HTTP-запрос закончился, можно отвечать
 
    // считываем URL с символа "$" до первого пробела
        if(incoming && c == ' '){
          incoming = 0;
        }
        if(c == '$'){
          incoming = 1;
        }
 
        // Определяем что было в URL: $1 или $2
        if(incoming == 1){
          Serial.println(c);
 
          if(c == '1'){
            Serial.println("ON");
            digitalWrite(2, HIGH);
          }
          if(c == '2'){
            Serial.println("OFF");
            digitalWrite(2, LOW);
          }
 
        }
 
        if (c == '\n') {
          // началась новая строка
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // в текущей строке ещё есть символы
          currentLineIsBlank = false;
        }
      }
    }
    // даём время браузеру для получения данных
    delay(1);
    // закрываем соединение
    client.stop();
  }
}

Чтобы все заработало, подсоедините анод (положительный контакт) светодиода к пину D2, а катод через резистор в ~220 Ом к земле (GND).

После того как схема собрана и скетч залит в Arduino, откройте браузер и в введите в адресной строке:

Включить светодиод:
http://[ВАШ IP-адрес]/$1

Выключить:
http://[ВАШ IP-адрес]/$2

Внимание: строку [ВАШ IP-адрес] замените на IP-адрес, назначенный вами для Arduino.

Пример   уже  готовой  странички:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; Charset=Windows-1251">
<meta http-equiv="Content-Language" Content="ru">
<title>HTML структура документа</title>
</head>
<body>
<h3>Мой первый заголовок</h3>
<p>Мой первый параграф</p>
<p>Мой второй параграф</p>
<a href="http:// 172.24.0.138/$a">
<input type="submit" value="НАЖМИ ЭТУ КНОПКУ И УЗНАЙ ЧТО ПРОИЗОЙДЁТ" /></a>

<br>
<a href="http:// 172.24.0.138/$d">
<input type="submit" value="выключение" /></a>

</body>
</html>

по  материалам: http://diy-blog.net и  фридуино.ру

Метки: , , , , , . Закладка Постоянная ссылка.

Комментарии запрещены.