Проект 29: Работа с Интернетом на примере Arduino Ethernet shield W5100

В этом эксперименте мы покажем, как нашей плате Arduino получить доступ к сети Интернет с помощью модуля Ethernet shield W5100.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
модуль Ethernet shield W5100;
светодиод – 2 шт.;
резистор 220 Ом – 2 шт.;
провода папа-папа.

Ethernet Shield позволяет легко подключить вашу плату Arduino к локальной сети или сети Интернет. Он предоставляет возможность Arduino отправлять и принимать данные из любой точки мира с помощью интернет-соединения. Например, можно реализовать удаленное управление вашими исполнительными устройствами, подключенными к реле, через веб-сайт или создать устройство, которое с помощью звукового сигнала оповестит вас о новом электронном письме.
В первой части эксперимента рассмотрим использование платы Arduino с подключенным Ethernet Shield в качестве сервера, выдающего клиенту (браузеру) веб-страницу и позволяющего запросами с браузера изменять состояния подключенного к Arduino светодиода.
Подключаем к плате Arduino Ethernet shield, а к выводам D7, D8 – светодиоды через резистор 220 Ом (см. рис. 29.1).

Схема подключения модуля Ethernet shield и светодиодов
Рис. 29.1. Схема подключения модуля Ethernet shield и светодиодов

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

#include <SPI.h>
#include <Ethernet.h>
// mac-адрес платы и ip-адрес сервера
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,214);
// 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="";
}


 
Порядок подключения:
1. Подключаем Ethernet shield к плате Arduino, с помощью кабеля RJ45 подключаем Ethernet shield к сети.
2. Подключаем светодиоды по схеме на рис. 29.1.
3. Загружаем в плату Arduino скетч из листинга 29.1.
4. Открываем браузер на любом компьютере данной сети и в адресной строке набираем http://192.168.0.214 (тот адрес, который вы присваиваете Arduino в скетче).
5. На странице (рис. 29.2), изменяя статус элементов input radio, видим изменение состояния светодиодов, подключенных к плате Arduino.


Рис. 29.2. Веб-страница, формируемая Arduino-сервером

Листинги программ скачать



 
Вверх