| Ваш IP: 44.197.197.23 | Online(33) - гости: 8, боты: 25 | Загрузка сервера: 0.78 ::::::::::::

Веб-сервер на W5500 (Arduino)

Сетевой модуль W5500 представляет собой Ethernet-контроллер на базе чипа W5500 (производства компании WIZnet). Для подключения к сети TCP/IP используется разъём RJ-45. Используя данный модуль Вы сможете передавать данные как по локальной сети, так и по сети интернет. В модуле установлен стабилизатор на 3,3 В, что позволяет его записывать от напряжения 5 В, соответственно  модуль может работать при питании 3,3 В.

Характеристики модуля W5500:

  • Напряжение питания: 3,3 или 5 В постоянного тока.
  • Ток потребляемый модулем: до 185 мА (при Vcc = 3,3 В).
  • Интерфейс: SPI (MODE 3).
  • Количество независимых сетевых подключений: до 8.
  • Сетевые протоколы: TCP/IP: TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE.
  • Сетевые интерфейсы: 10BaseT/100BaseTX Ethernet PHY embedded.
  • Размер внутреннего буфера TX/RX: 32 Kbyte.
  • Светодиодная индикация режимов работы: (Full/Half duplex, Link, Speed, Active).
  • Рабочая температура 0…70 °C.

На базе Arduino с использованием сетевого модуля W5500 можно создать простой веб-сервер, который позволяет создать страницу HTML. На HTML страницу будут выводится например информация об подключенных к плате Arduino датчиков. Сам модуль W5500 при помощи сетевого кабеля подключается к маршрутизатору (роутер) или напрямую к сетевой карте ПК.

Подключение модуля W5500 к плате Arduino Uno (Nano):

Плата Arduino UNO Модуль W5500
3.3V 3.3V
D12 MISO
D11 MOSI
D10 SCS
D13 SCLK
GND GND
RST RES
D2 INT

Для нормальной загрузки  скетча Вам понадобится библиотека — ethernet2.zip

#include <SPI.h>
#include <Ethernet2.h>
 
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
  IPAddress ip(10,42,0,100);
  EthernetServer server(80);
 
void setup() { 
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("IP: ");
  Serial.println(Ethernet.localIP());
}
 
 
void loop() {
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    boolean ok = true;
 
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
 
        if (c == '\n' && ok) {
 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 5"); // время обновления страницы 
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html><meta charset='UTF-8'>");
 
          client.println("<h1>Привет МИР!!!</h1>");
 
          client.println("</html>");
 
          break;
        }
        if (c == '\n'){ok = true;}else if(c != '\r'){ok = false;}
      }
    }
 
    delay(1);
    client.stop();
    Serial.println("client disconnected");
  }
}

Для просмотра содержимого страницы Вы должны ввести в адресную строку браузера IP адрес сервера на W5500. Он должен заранее прописан в скетче:

static byte myip[] = { 10,42,0,100 };

Если Вы подключили W5500 к роутеру, то Вы должны использовать IP адрес внутренней сети. Например роутер имеет адрес 192.168.0.1 , то Вы можете выбрать любой не занятый IP адрес сети (к примеру 192.168.0.100).

У меня указан немного другой адрес, так как я подключил W5500 напрямую к сетевой карте ПК, то моя сеть состоит всего из двух устройств (ПК и W5500) и выбрал IP соответствующий именно этой сети.

В качестве МАС адреса можете использовать любые цифры (в шестнадцатеричной системе), главное чтобы он не совпадал с MAC адресами уст-в имеющихся в сети.


Термометр на DS18B20

В следующим примере будем использовать цифровой датчик температуры DS18B20. Датчик будет измерять температуру и его показания будут выводится на HTML страницу.

Дополнительные библиотеки:

#include <SPI.h>
#include <Ethernet2.h>
#include <OneWire.h>
#include <DallasTemperature.h>
  OneWire oneWire(A0);
  DallasTemperature t(&oneWire);
 
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
  IPAddress ip(10,42,0,100);
  EthernetServer server(80);
 
void setup() { 
  Serial.begin(9600);
  t.begin(); 
  t.setResolution(12);// 12 bit 18b20
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("IP: ");
  Serial.println(Ethernet.localIP());
}
 
 
void loop() {
  t.requestTemperatures();
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    boolean ok = true;
 
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
 
        if (c == '\n' && ok) {
 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 5"); // время обновления страницы 
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html><meta charset='UTF-8'>");
 
          client.println("<h1>Температура: ");
          client.println(t.getTempCByIndex(0));
          client.println(" &#176;C</h1>");
          client.println("</html>");
 
          break;
        }
        if (c == '\n'){ok = true;}else if(c != '\r'){ok = false;}
      }
    }
 
    delay(1);
    client.stop();
    Serial.println("client disconnected");
  }
}

Терморегулятор DS18B20

Следующий пример позволяет реализовать терморегулятор с управлением через HTML страницу. Вы можете задать температуру регулирования, при достижении которой изменяется логическое состояние выхода D3 Arduino. Так же установленная температура регулирования заносится в энергонезависимую память.

#include <SPI.h>
#include <Ethernet2.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
  OneWire oneWire(A0);
  DallasTemperature t(&oneWire);
 
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
  IPAddress ip(10,42,0,100);
  EthernetServer server(80);
 
  float temp;
  int reg,w,flag;
  String readString = String(30);
  const byte gis = 1; // гистерезис 1 градус
 
void setup() { 
  Serial.begin(9600);
  t.begin(); 
  t.setResolution(12);// 12 bit 18b20
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("IP: ");
  pinMode(3, OUTPUT); // D3 управление реле нагревательного элемента
  reg = EEPROM.read(0);
}
 
 
void loop() {
  t.requestTemperatures();
  temp = t.getTempCByIndex(0);
  if(reg >= (int)temp + gis){digitalWrite(3,HIGH);flag=1;} 
  if(reg <= (int)temp - gis){digitalWrite(3,LOW);flag=0;} 
 
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
 
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
 
        if (readString.length() < 30){readString.concat(c);}//Serial.print(c);
 
        if (c == '\n') {
        int a;
        a = readString.indexOf("?temp=");if(a>0){reg = readString.substring(a+6, a+9).toInt();w=1;
        if(reg<0){reg=0;}if(reg>125){reg=125;}}
 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 10"); // время обновления страницы 
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html><meta charset='UTF-8'>");
          client.println("<style>.tab1 {background-color:#F5F5F5;border-radius: 5px;margin: auto;}</style>"
          "<br><TABLE class='tab1' align='center' width='470' BORDER='1' cellspacing='0' cellpadding='10'>"
          "<td><center><big><b>Терморегулятор DS18B20</b></big></td><tr><td><center>");
          client.println("<h1>Температура: ");
          client.println(temp);
          client.println(" &#176;C</h1>"
          "</td><tr><td align='center'>Установка температуры регулирования (0...125&#176;C)"); 
          client.println("<form action='' method='GET'>"
          "<br><input type='text' name='temp' autocomplete='off' size='1'></input>  "
          "<button>Подтвердить</button></form></td><tr>");
 
          client.println("<td><center>Температура регулировки: <b>");
          client.println(reg);
          client.println("&#176;C</b><br>");
 
          if(flag==1){client.print("ON");}
          if(flag==0){client.print("OFF");}
 
          client.println("</td></table></center>");
          client.println("</html>");
          readString="";
          break; 
        }
      }
    }
     if(w==1){w=0;EEPROM.update(0,reg);}
    delay(1);
    client.stop();
    Serial.println("client disconnected");
  }
}

Управление реле

В следующем примере показана возможность управления реле при помощи HTML страницы. При нажатии на кнопки меняется логическое состояние цифрового выхода D3 Arduino .

#include <SPI.h>
#include <Ethernet2.h>
 
  byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
  IPAddress ip(10,42,0,100);
  EthernetServer server(80);
 
  String readString = String(30);
 
void setup() { 
  Serial.begin(9600);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("IP: ");
  Serial.println(Ethernet.localIP());
  pinMode(3,OUTPUT);
}
 
 
void loop() {
 
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
 
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
 
        if (readString.length() < 30){readString.concat(c);}Serial.print(c);
 
        if (c == '\n') {
 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println("Refresh: 5"); // время обновления страницы 
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html><meta charset='UTF-8'>");
 
          client.println("<h1>Реле: ");
 
        if(readString.indexOf("p=1") >=0){client.println("ON");digitalWrite(3,HIGH);}
        else if(readString.indexOf("p=0") >=0){client.println("OFF");digitalWrite(3,LOW);}
        else{client.println("OFF");digitalWrite(3,LOW);}
 
          client.println("<h1>");
          client.print("<input type=button value='ON' onmousedown=location.href='/?p=1'> ");
          client.println(" <input type=button value='OFF' onmousedown=location.href='/?p=0'><br/><br/>");
 
          client.println("</html>");
          readString="";
 
          break;
 
        }
      }
    }
 
    delay(1);
    client.stop();
    Serial.println("client disconnected");
  }
}

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=1524#p1524

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Узкополосный приемный тракт на КФ1066ХА2

    КФ1066ХА2 (аналог К174ХА26) — в данной схеме предпочтительно использовать КФ1066ХА2 так как она более приспособлена при работе на ВЧ и потребляет значительно меньший ток и может питаться от 3 до 9 В. В данной статье рассматривается приемный тракт расчитанный на частоту 27,12МГц. Характеристики: Чувствительность при отношении сигн\шум 10дБ не хуже …Подробнее...
  • Дроссель на резисторе МЛТ

    Дроссель на резисторе МЛТ

    Самодельные дроссели основанный на резисторе МЛТ мощность от 0,125 до 2 Вт, является простым и не дорогим способом получить малогабаритный электронный компонент. Витки катушки индуктивности непосредственно наматываются на высокоомный резистор (100 кОм и более). Для расчета необходимого количества витков можно воспользоваться формулой: где: N — необходимое количество витков, L — нужная индуктивность дросселя в …Подробнее...
  • Электронный переключатель реле

    Электронный переключатель реле

    На основе D-триггера 4013 можно сделать простой электронный переключатель реле. Переключение реле происходит при помощи всего одной кнопки, при нажатии на которую включается реле, при повторном нажатии отключается. Источник — https://circuitswiring.com/electronic-toggle-switch/Подробнее...
  • Автомобильный усилитель 20 Вт (моно) на TDA7240А

    Автомобильный усилитель 20 Вт (моно) на TDA7240А

    УМЗЧ на базе TDA7240A является усилителем класса АВ предназначен для автомобильной ауди техники, микросхема имеет защиту от КЗ выходов с корпусом и шиной питания. Усилитель снабжен системой STAND-BY. Усилитель имеет следующие основные характеристики: Напряжение питания 14,4В (напряжение аккумуляторной батареи автомобиля), максимально допустимое напряжение питания до 18В Ток покоя 65мА (14,4В) …Подробнее...
  • LM3670 миниатюрный понижающий DC-DC преобразователь

    LM3670 миниатюрный понижающий DC-DC преобразователь

    LM3670 миниатюрный понижающий DC-DC преобразователь. Преобразователь обеспечивает выходной ток до 350 мА при напряжении питания от 2,5 до 5,5 В. ИМС LM3670 имеет фиксированное выходное напряжение  1.2, 1.5, 1.6, 1.8, 1.875, 2.5, 3.3 В, а так же регулируемое ADJ от 0,7 В. Частота преобразования 1 МГц. КПД 95%. Ток потребления микросхемы не …Подробнее...