Веб-сервер Arduino Ethernet с управлением реле

В этой статье показано, как создать веб-сервер Arduino Ethernet, который управляет реле, подключённым к лампе.

Вы можете получить доступ к вашему веб-серверу с любого устройства, имеющего браузер и подключённого к той же сети.

Веб-сервер Arduino Ethernet с управлением реле — демонстрация

Рекомендуемые ресурсы:

Если вам нравятся проекты Arduino и вы хотите создать больше, я рекомендую получить мой курс Arduino Step-by-step Projects — Build 25 Projects.

Предупреждение о работе с сетевым напряжением

Примечание: если вам некомфортно работать с сетевым напряжением, но вы всё равно хотите попробовать выполнить проект, вы можете заменить модуль реле на светодиод, например. Код и схемы очень похожи.

Ethernet Shield

Arduino Ethernet Shield подключает вашу Arduino к интернету простым способом. Просто установите этот модуль поверх платы Arduino, подключите его к сети кабелем RJ45 и выполните несколько простых шагов, чтобы начать управлять вашими проектами через веб.

Примечание: вы должны подключить кабель Ethernet от вашего роутера к Ethernet Shield, как показано на следующем рисунке.

Arduino Ethernet Shield

Использование пинов

Когда Arduino подключена к Ethernet Shield, вы не можете использовать цифровые пины с 10 по 13, потому что они используются для установления связи между Arduino и Ethernet Shield.

Распиновка Arduino Ethernet Shield — пины 10-13 заняты

Модуль реле

Реле — это переключатель с электрическим управлением. Это означает, что его можно включить или выключить, пропуская ток через него или нет. Модуль реле показан на рисунке ниже.

Двухканальный модуль реле

Этот конкретный модуль реле поставляется с двумя реле (эти синие кубики).

Что касается сетевого напряжения, реле имеют 3 возможных подключения:

Модуль реле — контакты COM, NO, NC
  • COM: общий контакт

  • NO: нормально разомкнутый — между общим контактом и нормально разомкнутым контактом нет соединения. Поэтому, когда вы активируете реле, оно подключается к контакту COM и питание подаётся на нагрузку (в нашем случае — лампу).

  • NC: нормально замкнутый — между общим контактом и нормально замкнутым контактом есть соединение. Контакты COM и NC всегда соединены, даже когда реле выключено. Когда вы активируете реле, цепь размыкается и питание на нагрузку не подаётся.

Для этого проекта лучше использовать нормально разомкнутую цепь, поскольку мы хотим зажигать лампу лишь время от времени. Прочитайте это руководство, чтобы узнать больше об использовании модуля реле с платой Arduino.

Подключения между реле и Arduino действительно просты:

Контакты модуля реле — GND, IN1, IN2, VCC
  • GND: подключается к земле

  • IN1: управляет первым реле. Должен быть подключён к цифровому пину Arduino

  • IN2: управляет вторым реле. Должен быть подключён к цифровому пину Arduino

  • VCC: подключается к 5V

Необходимые компоненты

Вот полный список компонентов, необходимых для этого проекта:

1

Arduino UNO — читайте Лучшие стартовые наборы Arduino

2

Ethernet Shield

3

Модуль реле

4

Шнур для лампы (посмотреть на eBay)

5

Макетная плата

6

Соединительные провода

Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Код

Скопируйте следующий код в вашу Arduino IDE и перед загрузкой на плату Arduino прочитайте раздел «Настройка вашей сети» ниже.

/*
 * Rui Santos
 * Complete Project Details https://randomnerdtutorials.com
*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 111);

// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);

// Relay state and pin
String relay1State = "Off";
const int relay = 7;

// Client variables
char linebuf[80];
int charcount=0;

void setup() {
  // Relay module prepared
  pinMode(relay, OUTPUT);
  digitalWrite(relay, HIGH);

  // Open serial communication at a baud rate of 9600
  Serial.begin(9600);

  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}

// Display dashboard page with on/off button for relay
// It also print Temperature in C and F
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>");
  // Generates buttons to control the relay
  client.println("<h4>Relay 1 - State: " + relay1State + "</h4>");
  // If relay is off, it shows the button to turn the output on
  if(relay1State == "Off"){
    client.println("<a href=\"/relay1on\"><button>ON</button></a>");
  }
  // If relay is on, it shows the button to turn the output off
  else if(relay1State == "On"){
    client.println("<a href=\"/relay1off\"><button>OFF</button></a>");
  }
  client.println("</body></html>");
}

void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    memset(linebuf,0,sizeof(linebuf));
    charcount=0;
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
       char c = client.read();
       //read char by char HTTP request
        linebuf[charcount]=c;
        if (charcount<sizeof(linebuf)-1) charcount++;
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          dashboardPage(client);
          break;
        }
        if (c == '\n') {
          if (strstr(linebuf,"GET /relay1off") > 0){
            digitalWrite(relay, HIGH);
            relay1State = "Off";
          }
          else if (strstr(linebuf,"GET /relay1on") > 0){
            digitalWrite(relay, LOW);
            relay1State = "On";
          }
          // you're starting a new line
          currentLineIsBlank = true;
          memset(linebuf,0,sizeof(linebuf));
          charcount=0;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}

Просмотреть исходный код

Настройка вашей сети

Взгляните на фрагмент кода настройки сети:

byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,XXX);

Важно: вам, возможно, потребуется заменить эту переменную, выделенную красным, на подходящие значения для вашей сети, иначе Arduino не установит соединение с вашей сетью.

Замените следующую строку на IP-адрес, который доступен и подходит для вашей сети:

IPAddress ip(X, X, X, X);

В моём случае мой диапазон IP — 192.168.1.X, и с помощью программы Angry IP Scanner я знаю, что IP 192.168.1.111 доступен в моей сети, потому что ни одно активное устройство в моей сети не использует этот IP-адрес:

IPAddress ip(192, 168, 1, 111);

Схема подключения

Подключите вашу схему в соответствии со схемой ниже:

Схема подключения Arduino Ethernet Shield с модулем реле

Демонстрация

Ваш веб-сервер Arduino выглядит так, как показано на рисунке ниже:

Веб-сервер Arduino Ethernet — интерфейс в браузере

Вот демонстрация, показывающая, что вы получите в результате этого проекта:

Демонстрация веб-сервера Arduino Ethernet с реле

Заключение

С помощью этого проекта вы создали веб-сервер Arduino, который включает и выключает реле.

Теперь вы можете использовать этот проект для управления любым электронным устройством, которое захотите.

Этот проект является упрощённой версией одного из моих проектов в курсе Arduino Step-by-step Projects. Если вам понравился этот проект, обязательно ознакомьтесь с курсом, который включает 23 проекта Arduino.