Відмінності між версіями «Ethernet модуль»

 
(Не показано 15 проміжних версій цього користувача)
Рядок 1: Рядок 1:
 
=='''Загальні відомості'''==
 
=='''Загальні відомості'''==
Arduino Ethernet Shield W5100 одна з найцікавіших плат розширення дозволяє управляти платою Arduino через локальну мережу або інтернет. Використовується, якщо вам потрібно отримувати якусь інформацію для роботи з мережі, розмістити свій власний веб сайт або керувати Ардуіно по мережі, що і розглядається у даній роботі. На даній платі розширення також є слот для microSD карти пам'яті.  
+
'''Arduino Ethernet Shield W5100''' -  багатофункціональна плата розширення, дозволяє управляти платою Arduino через локальну мережу або інтернет. Використовується для отримання інформації у роботі з мережею, дозволяє розмістити свій власний веб сайт або керувати Ардуіно по мережі (на даній платі розширення також є слот для microSD карти пам'яті).  
  
Для управління платою використовується базова бібліотека Arduino IDE - Ethernet library, а для роботи microSD картою - SD library. Для роботи, крім Ардуіно і власне Шилда вам також знадобиться мережевий кабель (Вита пара), причому, якщо підключати плату безпосередньо комп'ютера (а не через роутер), то він повинен бути обжатий за схемою Crossover.
+
[[Файл:ArduinoEthernetShieldV3.jpg|left|256 px|Ethernet Shield (W5100) вигляд спереду|thumb]]
Wiznet W5100 підтримує стек мережевих протоколів  IP  і дозволяє працювати як з TCP , так і з UDP - протоколами. При цьому мікросхема може обслуговувати до чотирьох одночасно відкритих сокет - з'єднань.
+
[[Файл:images.jpg|center|270 px|Ethernet Shield (W5100) вигляд ззаду|thumb]]
  
Для підключення плати розширення до Ардуіно передбачений спеціальний роз'єм , який представляє собою металеві висновки (" папа ") з одного боку плати та гнізда (" мама ") - з іншого боку . Така конструкція дозволяє підключити до Ардуіно відразу кілька плат розширення , розмістивши їх одну над іншою .
+
 
 +
 
 +
Для управління платою використовується базова бібліотека Arduino IDE - Ethernet library, а для роботи microSD картою - SD library. Для роботи, крім Ардуіно і власне Шилда також знадобиться мережевий кабель (Вита пара), причому, якщо підключати плату безпосередньо комп'ютера (а не через роутер), то він повинен бути обжатий за схемою Crossover.
 +
'''Wiznet W5100''' підтримує стек мережевих протоколів  IP  і дозволяє працювати як з TCP , так і з UDP - протоколами. При цьому мікросхема може обслуговувати до чотирьох одночасно відкритих сокет - з'єднань.
 +
 
 +
Для підключення плати розширення до Ардуіно передбачений спеціальний роз'єм , який представляє собою металеві виводи(" папа ") з одного боку плати та гнізда (" мама ") - з іншого боку . Така конструкція дозволяє підключити до Ардуіно відразу кілька плат розширення , розмістивши їх одну над іншою .
 
Остання версія плати розширення підтримує стандарт терморегулятора 1.0 , прийняту в моделі Arduino UNO R3.
 
Остання версія плати розширення підтримує стандарт терморегулятора 1.0 , прийняту в моделі Arduino UNO R3.
  
Рядок 19: Рядок 24:
 
* DC - DC перетворювач з високим ККД : 75 % при 50 % навантаженні.
 
* DC - DC перетворювач з високим ККД : 75 % при 50 % навантаженні.
 
* Ізоляція між входом і виходом в 1500 В.
 
* Ізоляція між входом і виходом в 1500 В.
Примітка: оскільки обидва пристрої, W5100 і SD-карта пам'яті, підключені до однієї SPI-шині, то в кожен момент часу активним може бути тільки один з них. При використанні в вашому проекті обох пристроїв, розподіл доступу до шини контролюється відповідними бібліотеками.  
+
Примітка: оскільки обидва пристрої, W5100 і SD-карта пам'яті, підключені до однієї SPI-шині, то в кожен момент часу активним може бути тільки один з них. При використанні в проекті обох пристроїв, розподіл доступу до шини контролюється відповідними бібліотеками.  
 
У платі розширення використовується стандартний мережевий роз'єм RJ45 .
 
У платі розширення використовується стандартний мережевий роз'єм RJ45 .
 
Також на платі розширення розташовано декілька світлодіодів - індикаторів :
 
Також на платі розширення розташовано декілька світлодіодів - індикаторів :
  
* PWR : показує наявність харчування основного пристрою і плати розширення
+
* PWR : показує наявність живлення основного пристрою і плати розширення
 
* LINK : світиться , якщо є з'єднання з мережею ; блимає під час передачі або отримання даних
 
* LINK : світиться , якщо є з'єднання з мережею ; блимає під час передачі або отримання даних
 
* FULLD : світиться , якщо мережеве з'єднання підтримує повнодуплексний режим роботи
 
* FULLD : світиться , якщо мережеве з'єднання підтримує повнодуплексний режим роботи
 
* 100M : світиться , якщо мережеве з'єднання відноситься до класу 100 Мб / с ( на відміну від мереж 10 Мб / с )
 
* 100M : світиться , якщо мережеве з'єднання відноситься до класу 100 Мб / с ( на відміну від мереж 10 Мб / с )
 
* RX : блимає в процесі отримання даних
 
* RX : блимає в процесі отримання даних
* TX : блимає в процесі відправки даних
+
* TX : блимає в процесі відправлення даних
 
* COLL : інформує про виявлення мережевих колізій
 
* COLL : інформує про виявлення мережевих колізій
  
Рядок 35: Рядок 40:
 
== Характеристика ==
 
== Характеристика ==
 
Ethernet контролер W5100 (апаратна реалізація стека протоколів TCP / IP)
 
Ethernet контролер W5100 (апаратна реалізація стека протоколів TCP / IP)
* Слот для Micro SD карти.
+
*   Слот для Micro SD карти.
* Рівень напруги 5 / 3.3В.
+
*   Рівень напруги 5 / 3.3В.
* 10Mb / 100Mb Ethernet з підтримкою PoE.
+
*   10Mb / 100Mb Ethernet з підтримкою PoE.
* сумісна з Arduino Uno і Arduino Mega.
+
*   сумісна з Arduino Uno і Arduino Mega.
  
 
Мікросхема апаратно реалізує наступні протоколи  різних рівнів системи OSI:
 
Мікросхема апаратно реалізує наступні протоколи  різних рівнів системи OSI:
 
* TCP, UDP, IPv4, ICMP, ARP, IGMP і MAC.  
 
* TCP, UDP, IPv4, ICMP, ARP, IGMP і MAC.  
 
* Апаратна підтримка протоколу PPPoE (Point-to-point over Ethernet) з PAP / CHAP протоколами аутентифікації.
 
* Апаратна підтримка протоколу PPPoE (Point-to-point over Ethernet) з PAP / CHAP протоколами аутентифікації.
 +
 +
[[Зображення:Ethernetshield-Schematic.jpg|580px|center|thumb|СЕП модуля ethernet  ]]
  
 
== Клієнт-серверний принцип роботи пристрою ==
 
== Клієнт-серверний принцип роботи пристрою ==
Роль клієнта грає браузер , за допомогою якого ви будете підключатися до сервера . Основне призначення клієнта - це посилати різні запити серверу , наприклад запит на відображення якоїсь інформації (GET) або запит про передачу будь-яких даних (POST).
 
  
Сервер - це власне ethernet shield . Він працює відповідно до HTTP протоколом . У скетчі повинен бути вказаний ip адресу, за якою ви будете отримувати до нього доступ (наприклад 192.168.0.1).
+
[[Зображення:37-3.jpg|400px|rightr|thumb|Схема підключення ethernet shield до Arduino UNO ]]
 +
 
 +
Роль клієнта відіграє браузер , за допомогою якого здійснюється підключення до сервера . Основне призначення клієнта - це посилати різні запити серверу , наприклад запит на відображення певної інформації (GET) або запит про передачу будь-яких даних (POST).
 +
Сервер - це власне ethernet shield . Він працює відповідно до HTTP протоколом . У скетчі повинна бути вказана ip адреса, за якою відбуватиметься отримання доступу до сервера (наприклад 192.168.0.1).
 
Основні функції сервера - це відстеження запитів клієнта , виконання різних функцій на підставі отриманих даних і відображення результату у вигляді HTML коду.
 
Основні функції сервера - це відстеження запитів клієнта , виконання різних функцій на підставі отриманих даних і відображення результату у вигляді HTML коду.
  
Розберемо цикл роботи пристрою для нашого прикладу . Після того , як ви залили скетч і підключили його до комп'ютера за допомогою мережевого кабелю , ethernet shield знаходиться в режимі очікування . Як тільки ви перейдете по заданому ip адресою , на сервер потрапить GET запит , який говорить про те , що необхідно видати сторінку.
+
Розберемо цикл роботи пристрою для нашого прикладу . Після залиття скетчу і підключення його до комп'ютера за допомогою мережевого кабелю , ethernet shield знаходиться в режимі очікування . Як тільки перейти за заданою ip адресою , на сервер потрапить GET запит , який свідчить про те , що необхідно видати сторінку.
Сервер формує цю сторінку і віддає назад на клієнта , де браузер перетворює HTML код в відповідний текст і елементи управління , а сервер знову переходить в режим очікування . У нашому випадку формується форма , яка дозволяє включити вибрані реле . Після того , як ви відзначите галочками відповідні реле і натиснете на кнопку " Refresh " , на сервер відправляється POST запит , в якому передаються відповідні дані про реле , які необхідно включити .
+
Сервер формує цю сторінку і віддає назад на клієнта , де браузер перетворює HTML код в відповідний текст і елементи управління , а сервер знову переходить в режим очікування . Після того формується форма , яка дозволяє включити вибрані реле . А тоді вже , після відзначення галочками відповідні реле і натиску на кнопку " Refresh " , на сервер відправляється POST запит , в якому передаються відповідні дані про реле , які необхідно включити .
 
Далі ці дані виділяються і зберігаються , а потрібні реле включаються . Після цього користувачеві знову видається HTML сторінка , але тепер на ній заздалегідь відзначені галочками реле , які включені на даний момент .
 
Далі ці дані виділяються і зберігаються , а потрібні реле включаються . Після цього користувачеві знову видається HTML сторінка , але тепер на ній заздалегідь відзначені галочками реле , які включені на даний момент .
Оскільки ми самі формуємо HTML код , то ми можемо видавати інформацію про значеннях будь-яких датчиків , а також отримувати будь-яку потрібну нам інформацію, що управляє .
+
Оскільки користувач сам формує HTML код , то є можливість видавати інформацію про значеннях будь-яких датчиків , а також отримувати будь-яку потрібну користувачеві інформацію, що управляє .
 +
 
 +
 
 
== Мікросхема WIZnet W5100 ==
 
== Мікросхема WIZnet W5100 ==
У якості процесора плати розширення служить Мікросхема WIZnet W5100. Вона являє собою однокристальне Ethernet-рішення з вбудованим стеком TCP-IP. Такий стек часто називають «зашитим». Всі чудові можливості для доступу в Інтернет, які надає W5100, поміщаються в компактному 80-вивідному корпусі LQFP. Крім вбудованого стека TCP-IP, W5100 містить вбудовану IEEE 802.3 10Base-T і 802.3u 100Base-TX сумісну реалізацію MAC і PHY рівнів. Можна очікувати, що раз стек TCP-IP забезпечує все необхідне, то пристрій можна відразу підключити до мережі Ethernet. Стек TCP-IP в W5100 підтримує протоколи TCP, UDP, ICMP і ARP. Цього достатньо для більшості вбудованих мережевих Ethernet-додатків, що розробляються звичайними користувачами. Крім того, пристрій W5100 підтримує PPPoE, що дозволяє використовувати його в додатках ADSL.
+
 
 +
[[Зображення:W5100_2_.png‎|230px|left|thumb|Зовнішній вигляд мікросхеми WIZnet W5100  ]]
 +
 
 +
У якості процесора плати розширення служить '''Мікросхема WIZnet W5100'''. Вона являє собою однокристальне Ethernet-рішення з вбудованим стеком TCP-IP. Такий стек часто називають «зашитим». Великий масив можливостей для доступу в Інтернет, які надає W5100, поміщаються в компактному 80-вивідному корпусі LQFP. Крім вбудованого стека TCP-IP, W5100 містить вбудовану IEEE 802.3 10Base-T і 802.3u 100Base-TX сумісну реалізацію MAC і PHY рівнів. Можна очікувати, що раз стек TCP-IP забезпечує все необхідне, то пристрій можна відразу підключити до мережі Ethernet. Стек TCP-IP в W5100 підтримує протоколи TCP, UDP, ICMP і ARP. Цього достатньо для більшості вбудованих мережевих Ethernet-додатків, що розробляються звичайними користувачами. Крім того, пристрій W5100 підтримує PPPoE, що дозволяє використовувати його в додатках ADSL.
 +
 
 +
Більшість однокристальних Ethernet - рішень , пропонованих в даний час , містять достатню кількість спеціальної буферної пам'яті для прийому і передачі . Мікросхема W5100 не є винятком і має 16 кбайт внутрішньої буферної пам'яті .
 +
Для забезпечення роботи з невеликими мікроконтролерами в W5100 передбачено три способи обміну інформацією з керуючим мікроконтролером: через SPI і за допомогою прямого або непрямого доступу до пам'яті. Для кращої сумісності з більшістю сучасних мікроконтролерів напруга живлення W5100 зроблена рівним 3,3 В. Це дозволяє безпосередньо підключатися до малоспоживаючих мікроконтролерів, які теж живляться від цієї напруги. Мікросхема W5100 може також працювати з розробленими раніше системами з напругою живлення 5 В, тому що її підсистема введення / виводу може витримувати таку напругу.
 +
W5100 підтримує до чотирьох одночасно активних сокетів .
 +
 
 +
Таким чином , все , що користувач повинен знати , - це основи програмування сокетів , тому що W5100 розроблена так , щоб якомога зручніше надати все необхідне для роботи вбудованого пристрою з Ethernet .
 +
 
 +
 
 
== Загальні властивості і W5100  ==
 
== Загальні властивості і W5100  ==
* Апаратна підтримка стека протоколів TCP / IP: TCP, UDP, IPv4, ICMP, ARP, IGMP, MAC
 
* Одночасна і незалежна підтримка 4-х з'єднань;
 
* Підтримка 10BaseT / 100BaseTX в повнодуплексному режимі;
 
* Висока продуктивність до 25Mbps;
 
* Інтерфейси підключення до мікроконтролеру: Direct (Clocked), Indirect (Clocked), SPI (режими 0 і 3);
 
* Вбудований 16К блок двухпортовой статичної пам'яті для буферів даних TX / RX;
 
* Напруга живлення 3,3 В; лінії введення / виводу підтримують рівні сигналів 5,0В;
 
0,18 мкм CMOS технологія;
 
* Відповідність RoHS-стандарту.
 
== Приклад написання програми ==
 
Приклад реалізації програми для дистанційного регулювання температурних показників в середовищі із встановленням значення гістерезису
 
#include <SPI.h>      // завантажуємо бібліотеку SPI для работи з pin 10,11,12,13
 
#include <Ethernet.h> // завантажуємо бібліотеку для работи з мережею
 
#include <SD.h>      // завантажуємо бібліотеку для работи з sd картою
 
#include <EEPROM.h>  // завантажуємо бібліотеку для работи з енергонезалежною памятю
 
#include <DHT.h>      // завантажуємо бібліотеку для работи з датчиками температури
 
#define REQ_BUF_SZ  30  // розмір буфера використовується для HTTP запиту
 
#define DHTPIN1 2        // Вулиця
 
#define DHTPIN2 3        // Кімната
 
#define DHTTYPE DHT11    // тип датчика DHT
 
DHT dht1(DHTPIN1, DHTTYPE);
 
DHT dht2(DHTPIN2, DHTTYPE);
 
byte mac[] = { 0xDE, 0xAA, 0xBE, 0xEF, 0xFE, 0xAA };  // MAC адреса Ethernet шилда
 
  
// the dns server ip
+
[[Зображення:shema_podklyuchenie_spimtu.png‎|325px|right|thumb|Приклад схеми підключення W5100 до зовнішнього мікроконтролера по інтерфейсу SPI  ]]
IPAddress dnServer(10, 245, 250, 00);
 
// the router's gateway address:
 
IPAddress gateway(10, 245, 50, 00);
 
// the subnet:
 
IPAddress subnet(255, 255, 255, 000);
 
  
IPAddress ip(10, 245, 50, 58); // IP адреса локальної мережі
+
*    Апаратна підтримка стека протоколів TCP / IP: TCP, UDP, IPv4, ICMP, ARP, IGMP, MAC
EthernetServer server(80); // порт для роботи з сервером
+
*    Одночасна і незалежна підтримка 4-х з'єднань;
File webFile;
+
*    Підтримка 10BaseT / 100BaseTX в повнодуплексному режимі;
char HTTP_req[REQ_BUF_SZ] = {0}; // буферний запит HTTP зберігаються у вигляді нульового рядка
+
*    Висока продуктивність до 25Mbps;
char req_index = 0;             // індекс в буфері HTTP_req
+
*    Інтерфейси підключення до мікроконтролеру: Direct (Clocked), Indirect (Clocked), SPI (режими 0 і 3);
float ts = 0;                    // температура в будинку
+
*    Вбудований 16К блок двохпортовой статичної пам'яті для буферів даних TX / RX;
 +
*    Напруга живлення 3,3 В; лінії введення / виводу підтримують рівні сигналів 5,0В;
 +
*    0,18 мкм CMOS технологія;
 +
*    Відповідність RoHS-стандарту.
  
void setup() {
 
  SD.begin(4);              // пін для карти SD
 
  pinMode(8, OUTPUT);      // пін реле працює як вихід
 
  digitalWrite(8, HIGH);    // реле по замовчуванню увімкнене
 
  Ethernet.begin(mac, ip, gateway, subnet);  // инициализация Ethernet шилда
 
  server.begin();          // запуск сервера
 
  dht1.begin();
 
  dht2.begin();
 
}
 
  
void loop() {
+
== Приклад написання програми ==
  EthernetClient client = server.available();
+
Код, який наведений нижче, включає світлодіод в залежності від URL адреси, який відсилається на Arduino:
  if (client) {
 
    boolean currentLineIsBlank = true;
 
    while (client.connected()) {
 
      if (client.available()) {
 
        char c = client.read();
 
        if (req_index < (REQ_BUF_SZ - 1)) {
 
          HTTP_req[req_index] = c;
 
          req_index++;
 
        }
 
        if (c == '\n' && currentLineIsBlank) {
 
          if (StrContains(HTTP_req, "GET /")) {
 
            if (StrContains(HTTP_req, "/ ") || StrContains(HTTP_req, "/index.htm")) {
 
              sendHtmlFile(client, "index.htm");
 
            } else if (StrContains(HTTP_req, "/favicon.ico")) {
 
              sendFile(client, "favicon.ico");
 
            }
 
  
            else if (StrContains(HTTP_req, "/temp.png")) {
+
/*
              sendFile(client, "temp.png");
+
Web Server - для прикладу
            }
+
Дає можливість включити і виключити світлодіод при вводі різних URL адрес в браузері
            else if (StrContains(HTTP_req, "/humid.png")) {
+
Для того, щоб включити:
              sendFile(client, "humid.png");
+
http: //ВАША_IP_АДРЕСА/$1
            }
+
Для того, щоб виключити:
            else if (StrContains(HTTP_req, "ajax")) {
+
http: //ВАША_IP_АДРЕСА/$2
              sendBaseAnswer(client);
+
Схема підключення:
              GetTempState(client);
+
- Ethernet shield підключається до пінів 10, 11, 12, 13
            } else if (StrContains(HTTP_req, "set?")) {
+
- Підключіть світлодіод до піна D2, а другу ніжку до GND через регістр 220 Ом
              String input = HTTP_req;
+
-/
              int posStart = input.indexOf("temp=");
+
#include
              int posEnd = input.indexOf(' ', posStart);
+
#include
              String all = input.substring(posStart + 5, posEnd + 1);
+
boolean incoming = 0;
              int tj = all.toInt();
+
// нижче необхідно ввести MAC адресу і IP адресу вашого контролера.
              if (20 <= tj && tj <= 26) { EEPROM.write(0, tj); } // температурний діапазон
+
// IP адреса буде залежати від вашої локальної мережі:
              sendBaseAnswer(client);
+
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
            }
+
IPAddress ip(191,11,1,1); //<<< ВВЕДІТЬ ВАШУ IP АДРЕСУ В ЦЬОМУ РЯДКУ!!!
          }
+
// Ініціалізація бібліотеки Ethernet server library
          req_index = 0;
+
// з використанням IP адреси і порту, який ви вказали
          StrClear(HTTP_req, REQ_BUF_SZ);
+
// (за замовчуванням HTTP порт встановлюється на 80):
          break;
+
EthernetServer server(80);
        }
+
void setup()
        if (c == '\n') { currentLineIsBlank = true; }
+
{
        else if (c != '\r') { currentLineIsBlank = false; }
+
pinMode(2, OUTPUT);
      }
+
// запуск Ethernet і підключення сервера:
    }
+
Ethernet.begin(mac, ip);
    delay(1);
+
server.begin();
    client.stop();
+
Serial.begin(9600);
 +
}
 +
void loop()
 +
{
 +
// отримуємо дані від клієнта
 +
EthernetClient client = server.available();
 +
if (client) {
 +
// HHTP запит закінчується пустим рядком
 +
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 (ts == dht2.readTemperature()) { // порівнюємо два останніх значення температури в кімнаті
+
}
    if (ts < EEPROM.read(0) - 0.1) { digitalWrite(8, HIGH); } // реле увімкнено
+
if (c == '\n') {
    if (ts > EEPROM.read(0) + 0.1) { digitalWrite(8, LOW); } // реле вимкнено
+
// починаємо новий рядок
 +
currentLineIsBlank = true;
 +
}
 +
else if (c != '\r') {
 +
  // отримуємо символ на поточному рядку
 +
currentLineIsBlank = false;
 +
  }
 
   }
 
   }
  ts = dht2.readTemperature();
+
}
}
+
// даємо веб-браузеру час для отримання даних
 
+
delay(1);
void GetTempState(EthernetClient cl) {
+
// закриваємо з'єднання:
  if (digitalRead(8)) { cl.print("0"); }
+
client.stop();
  else { cl.print("1"); }
+
}
  float AllTemp[5] = {
 
  dht1.readHumidity(), dht1.readTemperature(),
 
  dht2.readHumidity(), dht2.readTemperature(),
 
  EEPROM.read(0)};
 
  for (int i = 0; i < 5; i++) {
 
    cl.print(",");
 
    cl.print(AllTemp[i]);
 
  }
 
}
 
bool sendHtmlFile(EthernetClient client, char *fileName) {
 
  webFile = SD.open(fileName);
 
  sendBaseAnswer(client);
 
  return sendFile(client, webFile);
 
}
 
bool sendFile(EthernetClient client, char *fileName) {
 
  webFile = SD.open(fileName);
 
  sendHttpOkAnswer(client);
 
  client.println();
 
  return sendFile(client, webFile);
 
}
 
bool sendFile(EthernetClient client, File &webFile) {
 
  if (webFile) {
 
    while (webFile.available())
 
      client.write(webFile.read());
 
    webFile.close();
 
    return 1;
 
  }
 
  return 0;
 
}
 
void sendBaseAnswer(EthernetClient client) {
 
  sendHttpOkAnswer(client);
 
  client.println(F("Content-Type: text/html"));
 
  client.println(F("Connection: close"));
 
  client.println();
 
}
 
void sendHttpOkAnswer(EthernetClient client) {
 
  client.println(F("HTTP/1.1 200 OK"));
 
}
 
void StrClear(char *str, char length) {
 
  for (int i = 0; i < length; i++) { str[i] = 0; }
 
}
 
char StrContains(char *str, char *sfind) {
 
  char found = 0;
 
  char index = 0;
 
  char len;
 
  len = strlen(str);
 
  if (strlen(sfind) > len) { return 0; }
 
  while (index < len) {
 
    if (str[index] == sfind[found]) {
 
      found++;
 
      if (strlen(sfind) == found) { return 1; }
 
    }
 
    else { found = 0; }
 
    index++;
 
  }
 
  return 0;
 
}
 
  
 
== Перелік посилань ==
 
== Перелік посилань ==
 
1. Якименко Ю.І. Терещенко Т.О. Сокол Є.І. «Мікропроцернатехніка» // К.:Кондор – 2004.
 
1. Якименко Ю.І. Терещенко Т.О. Сокол Є.І. «Мікропроцернатехніка» // К.:Кондор – 2004.
 +
 
2. Методичні вказівки щодо виконання курсової роботи.
 
2. Методичні вказівки щодо виконання курсової роботи.
 +
 
3. «Мікропроцесори та мікропроцесорні комплекти інтегральних мікросхем», довідник, під ред. В.А. Шахнова, том 2, М., «Радио и связь», 1988.
 
3. «Мікропроцесори та мікропроцесорні комплекти інтегральних мікросхем», довідник, під ред. В.А. Шахнова, том 2, М., «Радио и связь», 1988.
 +
 
4. www.arduino.cc
 
4. www.arduino.cc
 +
 
5. Матеріал дистанційного курсу  «Електроніка і мікропроцесорна техніка»
 
5. Матеріал дистанційного курсу  «Електроніка і мікропроцесорна техніка»

Поточна версія на 12:09, 7 червня 2017

Загальні відомості

Arduino Ethernet Shield W5100 - багатофункціональна плата розширення, дозволяє управляти платою Arduino через локальну мережу або інтернет. Використовується для отримання інформації у роботі з мережею, дозволяє розмістити свій власний веб сайт або керувати Ардуіно по мережі (на даній платі розширення також є слот для microSD карти пам'яті).

Ethernet Shield (W5100) вигляд спереду
Ethernet Shield (W5100) вигляд ззаду


Для управління платою використовується базова бібліотека Arduino IDE - Ethernet library, а для роботи microSD картою - SD library. Для роботи, крім Ардуіно і власне Шилда також знадобиться мережевий кабель (Вита пара), причому, якщо підключати плату безпосередньо комп'ютера (а не через роутер), то він повинен бути обжатий за схемою Crossover. Wiznet W5100 підтримує стек мережевих протоколів IP і дозволяє працювати як з TCP , так і з UDP - протоколами. При цьому мікросхема може обслуговувати до чотирьох одночасно відкритих сокет - з'єднань.

Для підключення плати розширення до Ардуіно передбачений спеціальний роз'єм , який представляє собою металеві виводи(" папа ") з одного боку плати та гнізда (" мама ") - з іншого боку . Така конструкція дозволяє підключити до Ардуіно відразу кілька плат розширення , розмістивши їх одну над іншою . Остання версія плати розширення підтримує стандарт терморегулятора 1.0 , прийняту в моделі Arduino UNO R3.

На платі передбачений роз'єм для підключення micro - SD карти пам'яті , що дає можливість зберігання файлів і організації мережевого доступу до них . Пристрій сумісний з Arduino Uno і Mega ( використовується бібліотека Ethernet ) . Для роботи з вбудованим microSD - кардрідером служить бібліотека SD . Для активізації кардридера за допомогою цієї бібліотеки в якості висновку SS слід вказувати висновок 4. Найперша версія плати розширення Ethernet містила повнорозмірний роз'єм для SD - карт , який в даний час не підтримується.

У пристрої також реалізована функція управління скиданням Ethernet - модуля W5100 при подачі живлення . Необхідність в цій функції обумовлена тим , що попередні версії плати розширення були несумісними з Arduino Mega , через що доводилося вручну скидати Ethernet - модуль після кожної подачі живлення . Поточна версія плати розширення підтримує технологію Power over Ethernet ( PoE ) і може працювати зі спеціальним модулем , що дозволяє отримувати енергію через Ethernet - кабель , який являє собою звичайну виту пару категорії 5 :

  • Модуль сумісний зі стандартом IEEE802.3af.
  • Низький рівень вихідних пульсацій і шуму ( 100 мВ від піку до піку ).
  • Діапазон вхідної напруги від 36В до 57В.
  • Захист від перевантажень і коротких замикань.
  • Вихідна напруга 9В.
  • DC - DC перетворювач з високим ККД : 75 % при 50 % навантаженні.
  • Ізоляція між входом і виходом в 1500 В.

Примітка: оскільки обидва пристрої, W5100 і SD-карта пам'яті, підключені до однієї SPI-шині, то в кожен момент часу активним може бути тільки один з них. При використанні в проекті обох пристроїв, розподіл доступу до шини контролюється відповідними бібліотеками. У платі розширення використовується стандартний мережевий роз'єм RJ45 . Також на платі розширення розташовано декілька світлодіодів - індикаторів :

  • PWR : показує наявність живлення основного пристрою і плати розширення
  • LINK : світиться , якщо є з'єднання з мережею ; блимає під час передачі або отримання даних
  • FULLD : світиться , якщо мережеве з'єднання підтримує повнодуплексний режим роботи
  • 100M : світиться , якщо мережеве з'єднання відноситься до класу 100 Мб / с ( на відміну від мереж 10 Мб / с )
  • RX : блимає в процесі отримання даних
  • TX : блимає в процесі відправлення даних
  • COLL : інформує про виявлення мережевих колізій

Плата розширення Arduino Ethernet може генерувати сигнали переривань , які дозволяють повідомляти Ардуіно про різні події , що виникають в модулі W5100 . Для цього на платі передбачена перемичка " INT ".

Характеристика

Ethernet контролер W5100 (апаратна реалізація стека протоколів TCP / IP)

  • Слот для Micro SD карти.
  • Рівень напруги 5 / 3.3В.
  • 10Mb / 100Mb Ethernet з підтримкою PoE.
  • сумісна з Arduino Uno і Arduino Mega.

Мікросхема апаратно реалізує наступні протоколи різних рівнів системи OSI:

  • TCP, UDP, IPv4, ICMP, ARP, IGMP і MAC.
  • Апаратна підтримка протоколу PPPoE (Point-to-point over Ethernet) з PAP / CHAP протоколами аутентифікації.
СЕП модуля ethernet

Клієнт-серверний принцип роботи пристрою

Схема підключення ethernet shield до Arduino UNO

Роль клієнта відіграє браузер , за допомогою якого здійснюється підключення до сервера . Основне призначення клієнта - це посилати різні запити серверу , наприклад запит на відображення певної інформації (GET) або запит про передачу будь-яких даних (POST). Сервер - це власне ethernet shield . Він працює відповідно до HTTP протоколом . У скетчі повинна бути вказана ip адреса, за якою відбуватиметься отримання доступу до сервера (наприклад 192.168.0.1). Основні функції сервера - це відстеження запитів клієнта , виконання різних функцій на підставі отриманих даних і відображення результату у вигляді HTML коду.

Розберемо цикл роботи пристрою для нашого прикладу . Після залиття скетчу і підключення його до комп'ютера за допомогою мережевого кабелю , ethernet shield знаходиться в режимі очікування . Як тільки перейти за заданою ip адресою , на сервер потрапить GET запит , який свідчить про те , що необхідно видати сторінку. Сервер формує цю сторінку і віддає назад на клієнта , де браузер перетворює HTML код в відповідний текст і елементи управління , а сервер знову переходить в режим очікування . Після того формується форма , яка дозволяє включити вибрані реле . А тоді вже , після відзначення галочками відповідні реле і натиску на кнопку " Refresh " , на сервер відправляється POST запит , в якому передаються відповідні дані про реле , які необхідно включити . Далі ці дані виділяються і зберігаються , а потрібні реле включаються . Після цього користувачеві знову видається HTML сторінка , але тепер на ній заздалегідь відзначені галочками реле , які включені на даний момент . Оскільки користувач сам формує HTML код , то є можливість видавати інформацію про значеннях будь-яких датчиків , а також отримувати будь-яку потрібну користувачеві інформацію, що управляє .


Мікросхема WIZnet W5100

Зовнішній вигляд мікросхеми WIZnet W5100

У якості процесора плати розширення служить Мікросхема WIZnet W5100. Вона являє собою однокристальне Ethernet-рішення з вбудованим стеком TCP-IP. Такий стек часто називають «зашитим». Великий масив можливостей для доступу в Інтернет, які надає W5100, поміщаються в компактному 80-вивідному корпусі LQFP. Крім вбудованого стека TCP-IP, W5100 містить вбудовану IEEE 802.3 10Base-T і 802.3u 100Base-TX сумісну реалізацію MAC і PHY рівнів. Можна очікувати, що раз стек TCP-IP забезпечує все необхідне, то пристрій можна відразу підключити до мережі Ethernet. Стек TCP-IP в W5100 підтримує протоколи TCP, UDP, ICMP і ARP. Цього достатньо для більшості вбудованих мережевих Ethernet-додатків, що розробляються звичайними користувачами. Крім того, пристрій W5100 підтримує PPPoE, що дозволяє використовувати його в додатках ADSL.

Більшість однокристальних Ethernet - рішень , пропонованих в даний час , містять достатню кількість спеціальної буферної пам'яті для прийому і передачі . Мікросхема W5100 не є винятком і має 16 кбайт внутрішньої буферної пам'яті . Для забезпечення роботи з невеликими мікроконтролерами в W5100 передбачено три способи обміну інформацією з керуючим мікроконтролером: через SPI і за допомогою прямого або непрямого доступу до пам'яті. Для кращої сумісності з більшістю сучасних мікроконтролерів напруга живлення W5100 зроблена рівним 3,3 В. Це дозволяє безпосередньо підключатися до малоспоживаючих мікроконтролерів, які теж живляться від цієї напруги. Мікросхема W5100 може також працювати з розробленими раніше системами з напругою живлення 5 В, тому що її підсистема введення / виводу може витримувати таку напругу. W5100 підтримує до чотирьох одночасно активних сокетів .

Таким чином , все , що користувач повинен знати , - це основи програмування сокетів , тому що W5100 розроблена так , щоб якомога зручніше надати все необхідне для роботи вбудованого пристрою з Ethernet .


Загальні властивості і W5100

Приклад схеми підключення W5100 до зовнішнього мікроконтролера по інтерфейсу SPI
  • Апаратна підтримка стека протоколів TCP / IP: TCP, UDP, IPv4, ICMP, ARP, IGMP, MAC
  • Одночасна і незалежна підтримка 4-х з'єднань;
  • Підтримка 10BaseT / 100BaseTX в повнодуплексному режимі;
  • Висока продуктивність до 25Mbps;
  • Інтерфейси підключення до мікроконтролеру: Direct (Clocked), Indirect (Clocked), SPI (режими 0 і 3);
  • Вбудований 16К блок двохпортовой статичної пам'яті для буферів даних TX / RX;
  • Напруга живлення 3,3 В; лінії введення / виводу підтримують рівні сигналів 5,0В;
  • 0,18 мкм CMOS технологія;
  • Відповідність RoHS-стандарту.


Приклад написання програми

Код, який наведений нижче, включає світлодіод в залежності від URL адреси, який відсилається на Arduino:

/*
Web Server - для прикладу
Дає можливість включити і виключити світлодіод при вводі різних URL адрес в браузері
Для того, щоб включити:
http: //ВАША_IP_АДРЕСА/$1
Для того, щоб виключити:
http: //ВАША_IP_АДРЕСА/$2
Схема підключення:
- Ethernet shield підключається до пінів 10, 11, 12, 13
- Підключіть світлодіод до піна D2, а другу ніжку до GND через регістр 220 Ом
-/
#include
#include
boolean incoming = 0;
// нижче необхідно ввести MAC адресу і IP адресу вашого контролера.
// IP адреса буде залежати від вашої локальної мережі:
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(191,11,1,1); //<<< ВВЕДІТЬ ВАШУ IP АДРЕСУ В ЦЬОМУ РЯДКУ!!!
// Ініціалізація бібліотеки Ethernet server library
// з використанням IP адреси і порту, який ви вказали
// (за замовчуванням HTTP порт встановлюється на 80):
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) {
// HHTP запит закінчується пустим рядком
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();
}

Перелік посилань

1. Якименко Ю.І. Терещенко Т.О. Сокол Є.І. «Мікропроцернатехніка» // К.:Кондор – 2004.

2. Методичні вказівки щодо виконання курсової роботи.

3. «Мікропроцесори та мікропроцесорні комплекти інтегральних мікросхем», довідник, під ред. В.А. Шахнова, том 2, М., «Радио и связь», 1988.

4. www.arduino.cc

5. Матеріал дистанційного курсу «Електроніка і мікропроцесорна техніка»