Л.р. 5 Створення сервера на базі Arduino Uno
Лабораторна робота. Створення сервера на базі Arduino Uno за
допомогою W5100 Ethernet Shield
Мета: дослідити роботу модуля W5100 Ethernet Shield для Arduino.
Завдання: прочитати унікальний ID код та температуру датчика DS18S20 та передати їх в комп’ютер через інтерфейс USB.
Обладнання: мікроконтролер Arduino UNO R3; проводи папа-папа; модуль Ethernet shield W5100; макетна плата; USB-кабель, плата для прототипування; світлодіоди; резистори (220 Ом).
Загальні відомості
Arduino Ethernet Shield дозволяє підключити плату Arduino до мережі. Вона заснована на Ethernet-мікросхемі Wiznet W5100. Wiznet W5100 підтримує стеки TCP і UDP в IP-мережі. Підтримує до чотирьох одночасних підключень до сокета. Для створення скетчів, які підключаються до мережі за допомогою даної плати, слід використовувати бібліотеку Ethernet. Дана плата з’єднується з платою Arduino за допомогою довгих стрижнів, що проходять через неї. Це дозволяє не змінювати розташування виводів і встановлювати інші плати поверх неї.
Плата Ethernet Shield має стандартний роз’єм RJ-45 з вбудованим лінійний трансформатором і опцією Power over Ethernet.
6-контактний роз’єм для послідовного програмування сумісний з кабелями і платами-перехідниками FTDI USB. Він підтримує автоматичне скидання, що дозволяє завантажувати скетчі без натискання кнопки скидання на платі. При підключенні через адаптер FTDI-USB, Arduino і Ethernet Shield отримують живлення від адаптера.
Arduino здійснює зв’язок з W5100 і картою SD за допомогою шини SPI (через роз’єм ICSP header). Вона розташована на виводах 11, 12, і 13 плати
Uno/Duemilanove і виводах 50, 51, і 52 плати Mega. На обох платах виводи №
10 використовуються для вибору W5100 і введення № 4 – для карти SD. Дані виводи не можуть бути використані для іншого введення-виведення. На платі Mega, апаратний вивід SS, № 53, не використовується для вибірки ні W5100, ні карти SD, але він повинен бути налаштований на вивід, інакше інтерфейс SPI не працюватиме.
Відзначимо, що оскільки W5100 і карта SD поділяють шину SPI, то одночасно працювати вони не можуть. Якщо ви використовуєте обидва цих периферійних пристрої в своїй програмі, вам слід подбати про відповідні бібліотеки. Якщо ви не використовуєте один з цих периферійних пристроїв, вам слід відключити його. Щоб зробити це, налаштуйте вивід плати 4 як вихід і запишіть в нього "1". Для W5100, встановіть на виводі 10 високий рівень. Ця плата має стандартний роз’єм Ethernet RJ45. Кнопка скидання плати перезапускає і дочірню плату, і плату Arduino.
Плата має кілька індикаторних світлодіодів:
• PWR індикація наявності живлення плати;
• LINK індикація наявності мережевого линка, миготіння при відправці або отриманні даних;
• FULLD індикація повнодуплексного з’єднання;
• 100M індикація з’єднання на швидкості 100 Mб/с (на відміну від з’єднання на 10 Мб/с)
• RX миготить при отриманні платою даних;
• TX миготить при відправці платою даних; COLL миготить при мережевий колізії.
Хід виконання роботи
1. Підключити Ethernet Shield до плати Arduino та до мережі.
2. Скласти макет згідно завданню (рис. 1).
3. Завантажити програму в мікроконтролер Arduino.
4. Перевірити правильність роботи макету.
Рисунок 1 – Схема макету
Завдання
Ethernet Shield дозволяє легко підключити плату Arduino до локальної мережі або мережі Інтернет. Він надає можливість Arduino відправляти і приймати дані з будь-якої точки світу за допомогою інтернет-з’єднання. Наприклад, можна реалізувати дистанційне керування вашими виконавчими пристроями, підключеними до реле, через веб-сайт або створити пристрій, який за допомогою звукового сигналу сповістить вас про новий електронний лист. Підключаємо до плати Arduino Ethernet Shield, а до висновків D7, D8 -
світлодіоди через резистор 220 Ом (рис.).
Порядок підключення
1. Підключаємо Ethernet Shield до плати Arduino, за допомогою кабелю RJ45 підключаємо Ethernet Shield до мережі.
2. Підключаємо світлодіоди за схемою на рис..
3. Завантажуємо в плату Arduino скетч з лістингу.
4. Відкриваємо браузер на будь-якому комп’ютері даної мережі і в адресному рядку набираємо http://192.168.0.214 (ту адресу, яку ви привласнюєте Arduino в скетчі).
5. На сторінці (рис.), змінюючи статус елементів input radio, можемо спостерігати зміну стану світлодіодів, підключених до плати Arduino.
При написанні скетчу використовуємо вбудовану в Arduino IDE бібліотеку Ethernet.
Вміст скетчу показано нижче:
#include <SPI.h>
#include <Ethernet2.h>
// mac-адрес плати и ip-адрес сервера byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,7);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP): EthernetServer server(80); int pins[] = { 7, 8}; // Пини для светодіодів int pinState[] = {0, 0}; // Стан пінів String getData=""; boolean startGet=false; void setup()
{
Serial.begin(9600); for(int i=0;i<2;i++)
{ pinMode(pins[i],OUTPUT); // контакти підключення світлодіодів digitalWrite(i,LOW); // вимкнути світлодіоди
}
// ініціалізація бібліотеки Ethernet server Ethernet.begin(mac, ip); server.begin();
} void loop()
{
// очікування підключення клієнтів EthernetClient client = server.available(); if (client) { boolean currentLineIsBlank = true; while (client.connected())
{ if (client.available())
{ char c = client.read(); if(startGet==true) // дані після ‘?’ getData+=c; if(c == ‘?’) // початок збору даних після ‘?’ startGet=true; if (c == ‘\n’ && currentLineIsBlank) // закінчення отримання
{ if(getData.length()<1) // запрос без get-данных
{ pinState[0]=0; pinState[1]=0;
} else { pinState[0]=int(getData[5])-48; pinState[1]=int(getData[12])-48;
}
// відправка заголовків клієнту client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println();
// формування сторінки відповідей client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.println("<h3>Ethernet shield + LEDS</h3>"); client.println("<form method=‘get’>");
// світлодіод 1 client.print("<div>");
client.print("led1 off<input type=‘radio’ name=‘led1’ value=0 onclick=‘document.getElementById(\"submit\").click();’ "); if (pinState[0] == 0) client.print("checked"); client.println(">");
client.print("<input type=‘radio’ name=‘led1’ value=1 onclick=‘document.getElementById(\"submit\").click();’ "); if (pinState[0] == 1) client.print("checked"); client.println("> on"); client.println("</div>");
// світлодіод 2 client.print("<div>");
client.print("led2 off<input type=‘radio’ name=‘led2’ value=0 onclick=‘document.getElementById(\"submit\").click();’ "); if (pinState[1] == 0) client.print("checked"); client.println(">");
client.print("<input type=‘radio’ name=‘led2’ value=1 onclick=‘document.getElementById(\"submit\").click();’ "); if (pinState[1] == 1) client.print("checked"); client.println("> on"); client.println("</div>");
client.println("<input type=‘submit’ id=‘submit’
style=‘visibility:hidden;’ value=‘Refresh’>"); client.println("</form>"); client.println("</html>"); break; } if (c == ‘\n’)
{currentLineIsBlank = true;} else if (c != ‘\r’)
{currentLineIsBlank = false;}
}
}
}
// затримка для отримання клієнтом даних delay(1);
// закрити з’єднання client.stop(); for(int i=0;i<2;i++) // світлодіоди ввімкнути або вимкнути
{digitalWrite(pins[i],pinState[i]);} startGet=false; getData="";
}
Рисунок 2 – Веб-сторінка сформована Arduino-сервером
Контрольні питання
1. Поясніть призначення модуля W5100 Ethernet Shield?
2. Як підключити модуль Ethernet Shield до плати Arduino?
3. Чи можуть одночасно працювати модуль W5100 і карта SD?
4. Яку бібліотеку слід використовувати для модуля Ethernet Shield?
5. Наведіть основні технічні характеристики модуля Ethernet Shield?
Підготувати звіт (лістинг програми, висновки, перелік посилань)
Відмінно виконана робота оцінюється в 10 балів.
8 балів - правильність проекту і чіткість оформлення.
5 балів - обґрунтування.
- 23 березня 2022, 16:03
Шрифти
Розмір шрифта
Колір тексту
Колір тла
Кернінг шрифтів
Видимість картинок
Інтервал між літерами
Висота рядка
Виділити посилання