Ethernet Shield на базе WIZnet w5100

Материал из MIK32 микроконтроллер
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
никакой

Ethernet Shield - плата расширения, позволяющая Arduino работать в локальных вычислительных сетях для приёма и передачи данных в сети Интернет. Плата основана на чипе Wiznet w5100.

Подключение к Arduino

Ethernet shield выпускается в формате шилда, т.е. устанавливается поверх платы Arduino (см. рисунок ниже). На плате присутствует разъем для подключения microSD карт. Плата Arduino взаимодействует как с w5100, так и с SD-картой, по протоколу SPI. Вывод 10 используется для выбора w5100 и вывод 4 для выбора SD-карты, одновременно может быть активно только одно устройство.

Подключение Ethernet Shield к Arduino. В разъём RJ-45 вставляется патч-корд.

Технические характеристики

  • Напряжение питания — 5 В;
  • Контроллер — W5100;
  • Поддержка до 4-х соединений;
  • Скорость подключения — 10 и 100 Мбит/с;
  • Разъем для карт памяти — micro-SD;
  • Протокол обмена данными — SPI;
  • Габариты — 74х54х27 мм.

Примеры использования

Скетч для получения IP-адреса по DHCP

Результат вывода IP
#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-адрес сервера и видим страницу с показаниями температуры и влажности.

Схема подключения BMP280 к Ethernet Shield
// подключение библиотек
#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();
  }
}