Control 16 relays via Arduino with Ethernet

Hello, I'm going to share again with another project that helps many of you to solve the issue of how to switch the relay remotely.
I have done a bit of a specific project for 2 chats that are remotely controlled when each user has their own sites where they manage their outputs. Arduino Due and Ethernet shield W5100 have enough microcontrollers and have enough GPIO pins for 16 relay channels . As Due does not have everyone, the codes for this project will be customized for 2 Arduino Uno boards with W5100 Ethernet shields.

The web part is written in PHP procedural style. There are 2 user accounts where you can control 8 outputs for each user. One user does not see the other outputs and can not change them. At the same time, both users can both be in the web application, and each one can manage their outputs.

1st user
Name: user1
Password: user1

2nd user
Name: admin
Password: admin

The login data can be changed to the site you choose whenever it is possible to change it as needed. Once the data is changed, you will be able to print your system to make sure that your name and password have been altered (for example, inverted y and z may disable the login). All the names and passwords to the application are stored with the fixed length SHA1 hash.
The system does not use the database, so just copy and work with the site.

The pages consist of a login page and a functional login page. If the user is not logged in, he / she will not be able to get to the demo site, it will automatically be redirected to the login page.

Functional pages have the role of:


  • Switching the relay
  • Changing relay names
  • Change your login information
  • Save Arduino code
  • Safe sign out of the app
For username: user1 password: user1
#include <SPI.h>
#include <Ethernet.h> //Zmenit pre Ethernet2.h pre W5500
const int vystup1 = 0;
const int vystup2 = 1;
const int vystup3 = 2;
const int vystup4 = 3;
//D4 vynechany - pre SD kartu
const int vystup5 = 5;
const int vystup6 = 6;
const int vystup7 = 7;
const int vystup8 = 8;

byte mac[] = { 0xAA, 0xBB, 0xCC, 0x81, 0x7B, 0x4A }; //fyzicka adresa MAC
char serverName[] = "www.arduino.php5.sk"; // webserver
IPAddress ip(192, 168, 1, 254);
EthernetClient client;
String readString;
int x=0; //pocitadlo riadkov
char lf=10; //line feed character
void setup(){
pinMode(vystup1, OUTPUT);
pinMode(vystup2, OUTPUT);
pinMode(vystup3, OUTPUT);
pinMode(vystup4, OUTPUT);
pinMode(vystup5, OUTPUT);
pinMode(vystup6, OUTPUT);
pinMode(vystup7, OUTPUT);
pinMode(vystup8, OUTPUT);
 if (Ethernet.begin(mac) == 0) {
    Serial.println("DHCP nepridelilo adresu, skusam so statickou...");
    Ethernet.begin(mac, ip); //nastav k mac adrese i IP adresu staticku
  }
  Serial.begin(9600); 
}
void stav_vystup1(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele1.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup1, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup1, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
  void stav_vystup2(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele2.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup2, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup2, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
    void stav_vystup3(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele3.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup3, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup3, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
 void stav_vystup4(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele4.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup4, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup4, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
    void stav_vystup5(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele5.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup5, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup5, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
void stav_vystup6(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele6.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup6, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup6, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
void stav_vystup7(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele7.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup7, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup7, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
 void stav_vystup8(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele8.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup8, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup8, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }

void loop(){
stav_vystup1();
stav_vystup2();
stav_vystup3();
stav_vystup4();
stav_vystup5();
stav_vystup6();
stav_vystup7();
stav_vystup8();
delay(5000); //opakuj slucku loop o 5 sekund
} 
For username: admin password: admin
#include <SPI.h>
#include <Ethernet.h>
const int vystup1 = 0;
const int vystup2 = 1;
const int vystup3 = 2;
const int vystup4 = 3;
//D4 vynechany - pre SD kartu
const int vystup5 = 5;
const int vystup6 = 6;
const int vystup7 = 7;
const int vystup8 = 8;

byte mac[] = { 0xAA, 0xBB, 0xCC, 0x81, 0x7B, 0x4C }; //fyzicka adresa MAC
char serverName[] = "www.arduino.php5.sk"; // webserver
IPAddress ip(192, 168, 1, 253);
EthernetClient client;
String readString;
int x=0; //pocitadlo riadkov
char lf=10; //line feed character
void setup(){
pinMode(vystup1, OUTPUT);
pinMode(vystup2, OUTPUT);
pinMode(vystup3, OUTPUT);
pinMode(vystup4, OUTPUT);
pinMode(vystup5, OUTPUT);
pinMode(vystup6, OUTPUT);
pinMode(vystup7, OUTPUT);
pinMode(vystup8, OUTPUT);
 if (Ethernet.begin(mac) == 0) {
    Serial.println("DHCP nepridelilo adresu, skusam so statickou...");
    Ethernet.begin(mac, ip); //nastav k mac adrese i IP adresu staticku
  }
  Serial.begin(9600); 
}
void stav_vystup1(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele10.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup1, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup1, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
  void stav_vystup2(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele11.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup2, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup2, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
    void stav_vystup3(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele12.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup3, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup3, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
 void stav_vystup4(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele13.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup4, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup4, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
    void stav_vystup5(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele14.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup5, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup5, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
void stav_vystup6(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele15.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup6, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup6, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
void stav_vystup7(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele16.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup7, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup7, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }
 void stav_vystup8(){
  if (client.connect(serverName, 80)) {  //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /rele/rele17.txt HTTP/1.1"); //download text
    client.println("Host: www.arduino.php5.sk");
    client.println("Connection: close");  // ukonc HTTP/1.1 spojenie
    client.println(); //koneic requestu
  } 
  else {
    Serial.println("Pripojenie neuspesne"); //chyba ak nie som pripojeny
    Serial.println();
  }

  while(client.connected() && !client.available()) delay(1); //cakaj na data
  while (client.connected() || client.available()) { //pramenna
    char c = client.read(); //dostan bity z buffera
    Serial.print(c); //cela http hlavicka
    if (c==lf) x=(x+1); //pocitaj 
    else if (x==12) readString += c; //nasa premenna

   } 
if(readString=="ZAP"){
  digitalWrite(vystup8, HIGH); 
  }else if(readString=="VYP"){
  digitalWrite(vystup8, LOW);  
    }
    else{
 Serial.println("Nepodporovany stav! - chyba");
 }  
  readString = ("");
  x=0;
  client.stop(); //ukonc spojenie
  }

void loop(){
stav_vystup1();
stav_vystup2();
stav_vystup3();
stav_vystup4();
stav_vystup5();
stav_vystup6();
stav_vystup7();
stav_vystup8();
delay(5000); //opakuj slucku loop o 5 sekund
} 
   
Both these sketches for Arduin are linked to https://arduino.php5.sk/rele/, where you can also sketch the sketches directly using the web interface on this page. Thanks to the bootstrap, the relay can also be controlled via a smartphone or other device.

When rewriting sketches for your project / site, remember the following things:

  • The W5100 Ethernet shield only supports HTTP pages
  • Set up an address on your site (for both the server and the host)
  • Change your IP address to the extent you use on your LAN
  • It is possible to connect max. 10A at 230V to one relay
  • The length of the received response that parses the variable that is stored in the text file may vary depending on the server engine (Apache / Nginx) and its configuration. If the data is not read correctly (the incorrect row is parsed), you need to change the x parameter


Web App Screenshots:


Web Part: https://ulozto.sk/!GSxqEHGQBqtw/smartreleapp-zip
More about the project: https://arduino.php5.sk/ovladanie-rele.php
Other interesting projects can be found on my website: https://arduino.php5.sk

Comments

Popular posts from this blog

Web scraper via Arduino & NodeMCU & ESP32

ESP32 control via UDP datagrams

Biking on Google Maps - Arduino Leonardo (32u4) - HID device