Веб-сервер 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, вы не можете использовать цифровые пины с 10 по 13, потому что они используются для установления связи между Arduino и Ethernet Shield.
Модуль реле
Реле — это переключатель с электрическим управлением. Это означает, что его можно включить или выключить, пропуская ток через него или нет. Модуль реле показан на рисунке ниже.
Этот конкретный модуль реле поставляется с двумя реле (эти синие кубики).
Что касается сетевого напряжения, реле имеют 3 возможных подключения:
COM: общий контакт
NO: нормально разомкнутый — между общим контактом и нормально разомкнутым контактом нет соединения. Поэтому, когда вы активируете реле, оно подключается к контакту COM и питание подаётся на нагрузку (в нашем случае — лампу).
NC: нормально замкнутый — между общим контактом и нормально замкнутым контактом есть соединение. Контакты COM и NC всегда соединены, даже когда реле выключено. Когда вы активируете реле, цепь размыкается и питание на нагрузку не подаётся.
Для этого проекта лучше использовать нормально разомкнутую цепь, поскольку мы хотим зажигать лампу лишь время от времени. Прочитайте это руководство, чтобы узнать больше об использовании модуля реле с платой Arduino.
Подключения между реле и Arduino действительно просты:
GND: подключается к земле
IN1: управляет первым реле. Должен быть подключён к цифровому пину Arduino
IN2: управляет вторым реле. Должен быть подключён к цифровому пину Arduino
VCC: подключается к 5V
Необходимые компоненты
Вот полный список компонентов, необходимых для этого проекта:
1 |
Arduino UNO — читайте Лучшие стартовые наборы Arduino |
2 |
|
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 выглядит так, как показано на рисунке ниже:
Вот демонстрация, показывающая, что вы получите в результате этого проекта:
Заключение
С помощью этого проекта вы создали веб-сервер Arduino, который включает и выключает реле.
Теперь вы можете использовать этот проект для управления любым электронным устройством, которое захотите.
Этот проект является упрощённой версией одного из моих проектов в курсе Arduino Step-by-step Projects. Если вам понравился этот проект, обязательно ознакомьтесь с курсом, который включает 23 проекта Arduino.