Apr 142016
 

i have already made this project previuosly using arduino uno, wiznet w5100 ethernet shield and 4 channel relay shield. But using Arduino nano + ENC29J60 lot cheaper. not mention it has smaller size. Once you get this badboy online on your network, you can control every device in your house using your smartphone or any gadget you have(that rely on your coding skill, ofcourse).

let’s the fun begin 🙂

wait, as usual i don’t do lots of talk so here’s the schematic and arduino code.

#include <UIPEthernet.h>

EthernetServer server = EthernetServer(23);
boolean alreadyConnected = false; // whether or not the client was connected previously
String commandString;
String commandStringTmp;

int ledPinOne = 3;
int ledPinTwo = 4;
int ledPinThree = 5;
int ledPinFour = 6;
int val;

void setup()
{
  pinMode(ledPinOne, OUTPUT);      // sets the digital pin 1 as output
  pinMode(ledPinTwo, OUTPUT);      // sets the digital pin 1 as output
  pinMode(ledPinThree, OUTPUT);      // sets the digital pin 1 as output
  pinMode(ledPinFour, OUTPUT);      // sets the digital pin 1 as output
  digitalWrite(ledPinOne, HIGH);
  digitalWrite(ledPinTwo, HIGH);
  digitalWrite(ledPinThree, HIGH);
  digitalWrite(ledPinFour, HIGH);
  
  //Serial.begin(9600);

  uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05};
  IPAddress myIP(192,168,200,36);
  IPAddress gateway(192,168,200,18);

  Ethernet.begin(mac,myIP,gateway);

  server.begin();
}

void loop() {
  // wait for a new client:
  EthernetClient client = server.available();

  // when the client sends the first byte, say hello:
  if (client) {
    if (!alreadyConnected) {
      // clear out the input buffer:
      client.flush();    
      commandString = ""; //clear the commandString variable

      //server.println("--> Please type your command and hit Return...");
      alreadyConnected = true;
    } 

    while (client.available()) {      
      // read the bytes incoming from the client:
      char newChar = client.read();

     if (newChar == 0x0D)  //If a 0x0D is received, a Carriage Return, then evaluate the command
     {
         //server.print("Received this command: ");
         //server.println(commandString);
         //if (commandString.indexOf("quit") > -1){
         commandStringTmp = commandString;
         commandStringTmp.replace("\n","");
         commandStringTmp.replace("\r","");
         if (commandStringTmp.equals("quit")) {
           server.println();
           server.print("disconnecting\r\n");
           client.stop();
         } else {   
           processCommand(commandString);
         }
     } else
     {
         //Serial.println(newChar);
         commandString += newChar;
     }

    }
  }
}

void processCommand(String command)
{
  command.replace("\n","");
  command.replace("\r","");
  //server.println("Processing command ");
  //server.println(command);
 
// ONE
  if (command.equals("ledoneon")) {
    //server.println("LED 1 On command received"); 
    digitalWrite(ledPinOne, LOW);   // sets the LED one on
    //server.println("LED 1 was turned on");
    commandString = "";
    return;  
  }
   
  
  if (command.equals("ledoneoff")) {
    //server.println("LED 1 Off command received"); 
    digitalWrite(ledPinOne, HIGH);   // sets the LED one off
    //server.println("LED 1 was turned off");
    commandString = "";
    return;
  } 

// TWO
  if (command.equals("ledtwoon")) {
    //server.println("LED 2 On command received"); 
    digitalWrite(ledPinTwo, LOW);   // sets the LED one on
    //server.println("LED 2 was turned on");
    commandString = "";
    return;  
  }
 
  if (command.equals("ledtwooff")) {
    //server.println("LED 2 Off command received"); 
    digitalWrite(ledPinTwo, HIGH);   // sets the LED one off
    //server.println("LED 2 was turned off");
    commandString = "";
    return;
  } 

// THREE
  if (command.equals("ledthreeon")) {
    //server.println("LED 3 On command received"); 
    digitalWrite(ledPinThree, LOW);   // sets the LED one on
    //server.println("LED 3 was turned on");
    commandString = "";
    return;  
  }
 
  if (command.equals("ledthreeoff")) {
    //server.println("LED 3 Off command received"); 
    digitalWrite(ledPinThree, HIGH);   // sets the LED one off
    //server.println("LED 3 was turned off");
    commandString = "";
    return;
  } 

// FOUR
  if (command.equals("ledfouron")) {
    //server.println("LED 4 On command received"); 
    digitalWrite(ledPinFour, LOW);   // sets the LED one on
    //server.println("LED 4 was turned on");
    commandString = "";
    return;  
  }
 
  if (command.equals("ledfouroff")) {
    //server.println("LED 4 Off command received"); 
    digitalWrite(ledPinFour, HIGH);   // sets the LED one off
    //server.println("LED 4 was turned off");
    commandString = "";
    return;
  } 

// STATUS
// ONE
  if (command.equals("ledonestatus")) {
    //server.println("LED One status command received"); 
    val = digitalRead(ledPinOne);   // sets the LED two on
    server.print("LED 1 was turned ");
    if (val == 0) {
      server.println("on");
    } else {
      server.println("off");
    }
    commandString = "";
    return;
  } 
  
// TWO
  if (command.equals("ledtwostatus")) {
    //server.println("LED Two status command received"); 
    val = digitalRead(ledPinTwo);   // sets the LED two on
    server.print("LED 2 was turned ");
    if (val == 0) {
      server.println("on");
    } else {
      server.println("off");
    }
    commandString = "";
    return;
  }

// THREE
  if (command.equals("ledthreestatus")) {
    //server.println("LED Three status command received"); 
    val = digitalRead(ledPinThree);   // sets the LED two on
    server.print("LED 3 was turned ");
    if (val == 0) {
      server.println("on");
    } else {
      server.println("off");
    }
    commandString = "";
    return;
  } 

// FOUR
  if (command.equals("ledfourstatus")) {
    //server.println("LED Four status command received"); 
    val = digitalRead(ledPinFour);   // sets the LED two on
    server.print("LED 4 was turned ");
    if (val == 0) {
      server.println("on");
    } else {
      server.println("off");
    }
    commandString = "";
    return;
  } 
  
  commandString = "";
}

you can test it, using telnet command to ip address assigned to ethernet shield.

example

telnet 192.168.200.36 23
ledoneon <- enter
ledoneoff <- enter
ledonestatus <- enter

commands are:

To turn relays on and off
- ledoneon
turn relay no 1 on
- ledoneoff
turn relay no 1 off
- ledtwoon
turn relay no 2 on
- ledtwooff
turn relay no 2 off
- ledthreeon
turn relay no 3 on
- ledthreeoff
turn relay no 3 off
- ledfouron
turn relay no 4 on
- ledfouroff
turn relay no 4 off

To view the state of relays

- leonestatus
- ledtwostatus
- ledthreestatus
- ledfourstatus

have fun 🙂

  One Response to “Arduino nano, ENC28J60 Ethernet shield and 4 channel relay”

Comments (1)
  1. how to download the lazy home program?

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.