При создании на Arduino чего-то большего, чем учебные примеры, часто требуется обмен данными. Один из способов - использовать протокол TCP/IP с проводным подключением к локальной сети. Для этого и нужен Ethernet shield w5100.
Выглядит шилд отдельно и на плате Arduino Uno так:
Важно знать, что шилд использует пины под номерами 10, 11, 12 и 13, поэтому их использовать нельзя. Пин 4 также используется для встроенного в шилд картридера.
Для работы с сетью требуется библиотека Ethernet. Вот так выглядит код подключения к сети:
#include <Arduino.h>
#include <SPI.h>
#include <Ethernet.h>
byte ip[] = {192, 168, 1, 178};
byte mac[] = {0xDE, 0xED, 0xBA, 0xEF, 0xEF, ED};
void setup()
{
Ethernet.begin(mac, ip);
}
Но это не очень интересный пример. Давайте сделаем небольшой web-сервер:
#include <Arduino.h>
#include <SPI.h>
#include <Ethernet.h>
byte ip[] = {192, 168, 1, 178};
byte mac[] = {0xDE, 0xED, 0xBA, 0xEF, 0xEF, 0xED};
// слушаем стандартный порт http
EthernetServer server(80);
void setup() {
// подключаемся к локальной сети
Ethernet.begin(mac, ip);
}
void loop() {
// слушаем порт, ждем запросов
EthernetClient client = server.available();
if (client) {
// запрос должен заканчиваться пустой строкой, так что считываем
bool currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// если мы дошли до конца строки (получили символ новой строки) и строка пустая,
// то http-запрос завершен и можно выдать ответ
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
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("Hello world!");
client.println("</html>");
break;
}
if (c == '\n') {
// получен символ новой строки
currentLineIsBlank = true;
} else if (c != '\r') {
// текущая строка продолжается
currentLineIsBlank = false;
}
}
}
// дадим время браузеру получить все данные
delay(1);
// после чего закроем соединение
client.stop();
}
}
Этот пример уже поинтереснее. На его основе можно сделать, например, метеостанцию: подключить к плате датчики давления, температуры, влажности и выдавать их значения. Причем, если провайдер предоставляет вам статический IP, вы можете настроить "проброс" порта на роутере и обращаться к страничке через интернет.
Купить ethernet shield w5100 можно здесь: 1 2 3 4 5 6 или найти ссылку в каталоге.