Ethernet Shield на базе WIZnet w5100
Ethernet Shield - плата расширения, позволяющая Arduino работать в локальных вычислительных сетях для приёма и передачи данных в сети Интернет. Плата основана на чипе Wiznet w5100.
Подключение к Arduino
Ethernet shield выпускается в формате шилда, т.е. устанавливается поверх платы Arduino (см. рисунок ниже). На плате присутствует разъем для подключения microSD карт. Плата Arduino взаимодействует как с w5100, так и с SD-картой, по протоколу SPI. Вывод 10 используется для выбора w5100 и вывод 4 для выбора SD-карты, одновременно может быть активно только одно устройство.
Технические характеристики
- Напряжение питания — 5 В;
- Контроллер — W5100;
- Поддержка до 4-х соединений;
- Скорость подключения — 10 и 100 Мбит/с;
- Разъем для карт памяти — micro-SD;
- Протокол обмена данными — SPI;
- Габариты — 74х54х27 мм.
Примеры использования
Скетч для получения IP-адреса по DHCP
#include <Ethernet.h> //Библиотеки
#include <SPI.h> //Arduino
#define ETH Ethernet
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33};
void setup() {
Serial.begin(9600);
if (ETH.begin(mac) == 0) {
Serial.println("Failed!");
}
else{
Serial.print("ip=");
for (int k = 0; k < 4; k++) {
Serial.print(ETH.localIP()[k], DEC);
Serial.print(".");
}
Serial.println();
}
}
void loop() {}
Проект использования платы Arduino с Ethernet shield в качестве сервера.
Модуль формирует при обращении к нему страницу с показаниями, подключенных к нему датчиков. После загрузки проекта, в браузер вбиваем наш IP-адрес сервера и видим страницу с показаниями температуры и влажности.
// подключение библиотек
#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#define ETH Ethernet
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33};
byte ip[]={***,***,***,***};
byte dns[]={***,***,***,***};
byte gtway[]={***,***,***,***};
byte subnet[]={***,***,***,***};
// сервер
EthernetServer srv (80);
// создание экземпляра датчика
Adafruit_BMP280 sensor; // I2C
void setup() {
Serial.begin(9600);
ETH.begin(mac, ip, dns, gtway, subnet);
delay(1000);
srv.begin();
Serial.println(ETH.localIP());
bmp.begin();
}
void loop() {
//
EthernetClient W5100 = server.available();
if (W5100) {
int blank = 1;
while (W5100.connected()) {
if (W5100.available()) {
char s = W5100.read();
Serial.write(s);
if (s == '\n' && blank==1) {
//
W5100.println("HTTP/1.1 200 OK");
W5100.println("Content-Type: text/html");
W5100.println("Connection: close");
W5100.println("Refresh: 10"); // обновление каждые 10 сек
W5100.println();
//
W5100.println("");
W5100.println("");
W5100.print("Sensor BMP280");
W5100.print("T = ");
W5100.print(bmp.readTemperature());
W5100.print(" *C");
W5100.print("P = ");
W5100.print(bmp.readPressure()/133.3224);
W5100.print(" mm hg st");
W5100.println("");
break;
}
if (s == '\n') {
blank = 1;
} else if (s != '\r') {
blank = 0;
}
}
}
delay(1);
W5100.stop();
}
}