Сетевой модуль W5500 и ардуино

Это сравнительно новый сетевой модуль, который пришел на смену китайским платам на чипах W5100 и ENC28J60. Питается как от 5 так и 3,3 вольта. Подключается на протоколу SPI.

Данный модуль хорошо работает со встроенной в Arduino IDE библиотекой Ethernet. Библиотеку требуется обновить до версии 2.0.

Скетч ниже сделан на базe библиотечного примера webserver.ino. Добавлен вывод нескольких кнопок, которые управляют блоком реле, подключенным к цифровым пинам 4 — 7.

IP адрес модуля в данном коде — 192.168.0.177

#include <SPI.h>
#include <Ethernet.h>
 
// введите ниже MAC-адрес и IP-адрес вашего контроллера;
// IP-адрес будет зависеть от вашей локальной сети:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0, 177);
 
// инициализируем библиотеку Ethernet Server, указывая нужный порт
// (по умолчанию порт для HTTP – это «80»):
EthernetServer server(80);
 
// задаем контакт и начальное состояние для реле:
String relay1State = "Off";
String relay2State = "Off";
const int relay4 = 7;
const int relay3 = 6;
const int relay2 = 5;
const int relay1 = 4;
 
// задаем переменные для клиента:
char linebuf[80];
int charcount=0;
 
void setup() {
  // подготавливаем реле-модуль:
  pinMode(relay1, OUTPUT);
  digitalWrite(relay1, HIGH);
  pinMode(relay2, OUTPUT);
  digitalWrite(relay2, HIGH);
 
  // открываем последовательную коммуникацию на скорости 9600 бод:
  Serial.begin(9600);
 
  // запускаем Ethernet-коммуникацию и сервер:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");  //  "сервер на "
  Serial.println(Ethernet.localIP());
}
 
// Показываем веб-страницу с кнопкой «вкл/выкл» для реле:
void dashboardPage(EthernetClient &client) {
  client.println("<!DOCTYPE HTML><html><head>");
  client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><body>");                                                            
  client.println("<h3>Arduino Web Server - <a href=\"/\">Refresh</a></h3>");
  
  // генерируем кнопку для управления реле:
  client.println("<h4>Relay 1 - State: " + relay1State + "</h4>");
  // если реле выключено, показываем кнопку «вкл»:          
  if(relay1State == "Off"){
    client.println("<a href=\"/relay1on\"><button>ON</button></a>");
  }
  // если реле включено, показываем кнопку «выкл»:
  else if(relay1State == "On"){
    client.println("<a href=\"/relay1off\"><button>OFF</button></a>");                                                                    
  }

    // генерируем кнопку для управления реле:
  client.println("<h4>Relay 2 - State: " + relay2State + "</h4>");
  // если реле выключено, показываем кнопку «вкл»:          
  if(relay2State == "Off"){
    client.println("<a href=\"/relay2on\"><button>ON</button></a>");
  }
  // если реле включено, показываем кнопку «выкл»:
  else if(relay2State == "On"){
    client.println("<a href=\"/relay2off\"><button>OFF</button></a>");                                                                    
  }
  
  client.println("</body></html>");
}
 
 
void loop() {
  // прослушиваем входящих клиентов:
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");  //  "новый клиент"
    memset(linebuf,0,sizeof(linebuf));
    charcount=0;
    // HTTP-запрос заканчивается пустой строкой:
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
       char c = client.read();
        // считываем HTTP-запрос, символ за символом:
        linebuf[charcount]=c;
        if (charcount<sizeof(linebuf)-1) charcount++;
        // если вы дошли до конца строки (т.е. если получили
        // символ новой строки), это значит,
        // что HTTP-запрос завершен, и вы можете отправить ответ:
        if (c == '\n' && currentLineIsBlank) {
          dashboardPage(client);
          break;
        }
        if (c == '\n') {
          if (strstr(linebuf,"GET /relay1off") > 0){
            digitalWrite(relay1, HIGH);
            relay1State = "Off";
          }
          else if (strstr(linebuf,"GET /relay1on") > 0){
            digitalWrite(relay1, LOW);
            relay1State = "On";
          }

          if (strstr(linebuf,"GET /relay2off") > 0){
            digitalWrite(relay2, HIGH);
            relay2State = "Off";
          }
          else if (strstr(linebuf,"GET /relay2on") > 0){
            digitalWrite(relay2, LOW);
            relay2State = "On";
          }
          
          // если получили символ новой строки...
          currentLineIsBlank = true;
          memset(linebuf,0,sizeof(linebuf));
          charcount=0;          
        }
        else if (c != '\r') {
          // если получили какой-то другой символ...
          currentLineIsBlank = false;
        }
      }
    }
    // даем веб-браузеру время на получение данных:
    delay(1);
    // закрываем соединение:
    client.stop();
    Serial.println("client disonnected");  //  "Клиент отключен"
  }
}

Красивое графическое оформление страницы вебсервера реализовано в этой статье. Используется флеш карта.

Оставьте комментарий

Создайте подобный сайт на WordPress.com
Начало работы