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(); } }