cansysindia
Published

Smart Home Automation

This is an effort to automate almost everything in our home. Open Builds mechanical components are also used to automate curtains.

AdvancedProtipOver 20 days12,184
Smart Home Automation

Things used in this project

Hardware components

Echo Dot
Amazon Alexa Echo Dot
×1
Raspberry Pi 3 Model B
Raspberry Pi 3 Model B
×1
Arduino UNO
Arduino UNO
×1
NodeMCU ESP8266 Breakout Board
NodeMCU ESP8266 Breakout Board
×1
General Purpose Transistor NPN
General Purpose Transistor NPN
×1
Resistor 4.75k ohm
Resistor 4.75k ohm
×1
1N4007 – High Voltage, High Current Rated Diode
1N4007 – High Voltage, High Current Rated Diode
×1
Texas Instruments LM317 Regulator
×1
Trimpot 1K
×1
Relay 12V 7amps
×1
Capacitor 100 nF
Capacitor 100 nF
×1
Capacitor 100 µF
Capacitor 100 µF
×1
Connectors
×1
12V / 5W SMPS Module (Hi-Link)
×1
IR LED
×1
DC 12V 12mm 4 Pin Momentary Switch Led Light Metal Push Button
×1
SMPS 4 AMP
×1
DS18B20 Programmable Resolution 1-Wire Digital Thermometer
Maxim Integrated DS18B20 Programmable Resolution 1-Wire Digital Thermometer
×1
SSD1306 OLED DISPLAY
×1
APDS 9960 GESTURE SENSOR
×1

Software apps and online services

Arduino IDE
Arduino IDE
Java Version 1.8
Ecplise IDE
Raspbian
Raspberry Pi Raspbian

Story

Read more

Schematics

Switch Board PCB

This board is installed at the Switch Point and replaced with existing Switches.

Code

AlexaClient Code in Java

Java
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.Socket;
import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;

public class AlexaClient {
	final openingPage page;
	AlexaClient(final openingPage page) {
		this.page = page;
		Timer timer = new Timer();
		timer.schedule(new loop(), 500, 60000);
	}

	private class loop extends TimerTask {

		@Override
		public void run() {
			try {
				Socket client = new Socket("yourserveroncloud", 54321);
				System.out.println("Connected To yourserveroncloud");
				InputStream is = client.getInputStream();
				OutputStream os = client.getOutputStream();
				os.write(license.getBytes());
				os.flush();
				byte[] bytes = new byte[64];
				client.setKeepAlive(true);
				client.setSoTimeout(60000);
				int numberOfBytes = 0; 
				try {
					while (true) {
						try {
							numberOfBytes = is.read(bytes);
						} catch (Exception re) {
							numberOfBytes = 0;
						}
						if (numberOfBytes < 1) {
							try {
								os.write("OM".getBytes());
								continue;
							} catch (Exception oe) {
								oe.printStackTrace();
								break;
							}
						} else {
							String cmd = new String(bytes, 0, numberOfBytes);
							System.out.println(cmd);
							processCommand("cmd="+cmd);
						}
					}
					os.close();
					is.close();
					client.close();
				} catch (Exception ex) {
					ex.printStackTrace();
					try {
						os.close();
						is.close();
						client.close();
					} catch (Exception e) {

					}
				}
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}

	}
	
	private String processCommand(String query) {

		try {
			int i = query.indexOf("cmd=");
			if (i >= 0) { 
				if (query.indexOf("&") > i) {
					page.pageEvent(query.substring(i+4, query.indexOf("&")));
				} else {
					page.pageEvent(query.substring(i+4));
				}


			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

		}
		
		return page.currentApp;

	}
	
	

}

Interface JAVA Code

Java
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MouseInfo;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JLabel;




public class openingPage extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JDesktopPane desktopPane;
	private Image imgBackground;
	private Image imgInfo;
	public String currentApp = "";



	private Process process;
	private Robot robot;
	private int screenWidth;
	private int screenHeight;
	private String path;
	private String tvmodel;
	private String settopboxmodel;
	private JLabel lblGuest;

	private class channel {
		public String channelNo;
		public String channelName;
		channel() {
			channelNo = "";
			channelName = "";
		}
	}

	ArrayList<channel> channels;

	private class switchBoard {
		public String boardId;
		public String boardName;
		public String boardIP;
		public String switch1;
		public String switch1State;
		public String switch2;
		public String switch2State;
		public String switch3;
		public String switch3State;
		public String switch4;
		public String switch4State;
		public String switch5;
		public String switch5State;
		switchBoard() {

			boardId = "kc_0000000";
			boardIP = "0.0.0.0";
			boardName = "Switch Board";

			switch1 = "Switch 1";
			switch1State = "0";

			switch2 = "Switch 2";
			switch2State = "0";

			switch3 = "Switch 3";
			switch3State = "0";

			switch4 = "Switch 4";
			switch4State = "0";

			switch5 = "Switch 5";
			switch5State = "0";

		}

	}

	ArrayList<switchBoard> switchBoards;

	openingPage() {

		try {

			switchBoards = new ArrayList<switchBoard>();
			channels = new ArrayList<channel>();

			File jarFile = new File(
					openingPage.class.getProtectionDomain().getCodeSource().getLocation().toURI());
			path = jarFile.getParentFile().getAbsolutePath();
			System.out.println(path);

			File paramfile = new File(path + "/SmartTV.param");

			BufferedReader br = new BufferedReader(new FileReader(paramfile));
			String inputLine = "";
			while ((inputLine = br.readLine()) != null) {
				String[] params = inputLine.split("=");

				if (params[0].equals("tvmodel")) {
					tvmodel = params[1];
				}
				if (params[0].equals("settopboxmodel")) {
					settopboxmodel = params[1];
				}

				if (params[0].startsWith("kc_")) {
					switchBoards.add(new switchBoard());
					switchBoards.get(switchBoards.size()-1).boardId = params[0];
					switchBoards.get(switchBoards.size()-1).boardName = params[1].split(",")[0];
					switchBoards.get(switchBoards.size()-1).switch1 = params[1].split(",")[1];
					switchBoards.get(switchBoards.size()-1).switch2 = params[1].split(",")[2];
					switchBoards.get(switchBoards.size()-1).switch3 = params[1].split(",")[3];
					switchBoards.get(switchBoards.size()-1).switch4 = params[1].split(",")[4];
					switchBoards.get(switchBoards.size()-1).switch5 = params[1].split(",")[5];					
				}

				if (params[0].equals("channels")) {
					String[] listChannels = params[1].split("\\|");
					for (int i = 0; i < listChannels.length; ++i) {
						channels.add(new channel());
						channels.get(i).channelName = listChannels[i].split(":")[0];
						channels.get(i).channelNo = listChannels[i].split(":")[1];
						System.out.println(listChannels[i].split(":")[0] + " " + listChannels[i].split(":")[1]);
					}
				}

			}
			br.close();

			Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
			for (; n.hasMoreElements();) {
				NetworkInterface e = n.nextElement();

				Enumeration<InetAddress> a = e.getInetAddresses();
				for (; a.hasMoreElements();)
				{
					InetAddress addr = a.nextElement();
					System.out.println("  " + addr.getHostAddress());
					if (addr.getHostAddress().contains(":") || addr.getHostAddress().contains("127.0.0.1")) {
						continue;
					}
					//host = addr.getHostAddress();
				}
			}


		} catch(Exception ex) {

		}


		screenWidth = Toolkit.getDefaultToolkit().getScreenSize().width;
		screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
		setSize(screenWidth, screenHeight);
		setExtendedState(JFrame.MAXIMIZED_BOTH); 
		setUndecorated(true);
		setResizable(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		getContentPane().setLayout(null);


		try {
			robot = new Robot();
			robot.mouseMove((screenWidth/2), (screenHeight-300));

		} catch (AWTException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


		try {
			imgBackground = ImageIO.read(new File("desktop.jpg"));
			imgBackground = imgBackground.getScaledInstance(screenWidth, screenHeight, java.awt.Image.SCALE_SMOOTH);
			imgInfo = ImageIO.read(openingPage.class.getResource("/resources/info.png"));
			imgInfo = imgInfo.getScaledInstance(100, 100, java.awt.Image.SCALE_SMOOTH);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		desktopPane = new JDesktopPane() {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			@Override
			protected void paintComponent(Graphics g) {
				super.paintComponent(g);
				g.drawImage(imgBackground, 0, 0, null);
			}

			@Override
			public Dimension getPreferredSize() {
				return Toolkit.getDefaultToolkit().getScreenSize();
			}
		};

		try {
			setContentPane(desktopPane);
		} catch (Exception e) {
			e.printStackTrace();
		}





		setVisible(true);

		new JSONServer(this);
		new AlexaClient(this);




	}

	public String pageEvent(String event) {

		if (event.startsWith("kc_")) {
			//kc_0000001:11*out1:0*out2:0*out3:0*out4:0*out5:0
			if (event.indexOf("*") > 0) {
				String[] switchState = event.split("\\*");
				System.out.println(switchState[0].split(":")[0]);
				for (int i = 0; i < switchBoards.size(); ++i) {
					if (switchBoards.get(i).boardId.equals(switchState[0].split(":")[0])) {
						switchBoards.get(i).boardIP = switchState[0].split(":")[1];
						switchBoards.get(i).switch1State = switchState[1].split(":")[1];
						switchBoards.get(i).switch2State = switchState[2].split(":")[1];
						switchBoards.get(i).switch3State = switchState[3].split(":")[1];
						switchBoards.get(i).switch4State = switchState[4].split(":")[1];
						switchBoards.get(i).switch5State = switchState[5].split(":")[1];
					}

				}
			} else {
				for (int i = 0; i < switchBoards.size(); ++i) {

					if (switchBoards.get(i).boardId.equals(event.split(":")[0])) {
						if (!switchBoards.get(i).boardIP.equals("0.0.0.0")) {

							try {


								String switchState = "1";
								if (event.split(":")[1].equals("out1")) {
									if (switchBoards.get(i).switch1State.equals("0")) {
										switchBoards.get(i).switch1State = "1";
									} else {
										switchBoards.get(i).switch1State = "0";
									}
									switchState = switchBoards.get(i).switch1State;
								}
								if (event.split(":")[1].equals("out2")) {
									if (switchBoards.get(i).switch2State.equals("0")) {
										switchBoards.get(i).switch2State = "1";
									} else {
										switchBoards.get(i).switch2State = "0";
									}
									switchState = switchBoards.get(i).switch2State;
								}
								if (event.split(":")[1].equals("out3")) {
									if (switchBoards.get(i).switch3State.equals("0")) {
										switchBoards.get(i).switch3State = "1";
									} else {
										switchBoards.get(i).switch3State = "0";
									}
									switchState = switchBoards.get(i).switch3State;
								}
								if (event.split(":")[1].equals("out4")) {
									if (switchBoards.get(i).switch4State.equals("0")) {
										switchBoards.get(i).switch4State = "1";
									} else {
										switchBoards.get(i).switch4State = "0";
									}
									switchState = switchBoards.get(i).switch4State;
								}
								if (event.split(":")[1].equals("out5")) {
									if (switchBoards.get(i).switch5State.equals("0")) {
										switchBoards.get(i).switch5State = "1";
									} else {
										switchBoards.get(i).switch5State = "0";
									}
									switchState = switchBoards.get(i).switch5State;
								}

								String httpURL = String.format("http://%s/cmd?%s=%s", switchBoards.get(i).boardIP, event.split(":")[1], switchState);
								System.out.println(httpURL);
								URL myurl = new URL(httpURL);
								HttpURLConnection con = (HttpURLConnection) myurl.openConnection();
								con.setRequestMethod("GET");
								con.setConnectTimeout(99999);
								con.setReadTimeout(0);

								con.setDoOutput(true);

								InputStream ins = con.getInputStream();
								InputStreamReader isr = new InputStreamReader(ins);
								BufferedReader in = new BufferedReader(isr);
								String xml = "";
								String inputLine;
								while ((inputLine = in.readLine()) != null) {
									xml += inputLine;
								}
								in.close();
								isr.close();
								ins.close();
								con.disconnect();
								System.out.println(xml);
								break;

							} catch (Exception e) {

								e.printStackTrace();
							}
						}

					}
					//kc_0000001_4_ON
					if (event.substring(0, 10).equals(switchBoards.get(i).boardId) && event.split("_").length == 4) {

						if (!switchBoards.get(i).boardIP.equals("0.0.0.0")) {

							try {


								String switchState = "1";
								if (event.split("_")[2].equals("1")) {
									if (event.split("_")[3].equals("ON")) {
										switchBoards.get(i).switch1State = "1";
									} else {
										switchBoards.get(i).switch1State = "0";
									}
									switchState = switchBoards.get(i).switch1State;
								}
								if (event.split("_")[2].equals("2")) {
									if (event.split("_")[3].equals("ON")) {
										switchBoards.get(i).switch2State = "1";
									} else {
										switchBoards.get(i).switch2State = "0";
									}
									switchState = switchBoards.get(i).switch2State;
								}
								if (event.split("_")[2].equals("3")) {
									if (event.split("_")[3].equals("ON")) {
										switchBoards.get(i).switch3State = "1";
									} else {
										switchBoards.get(i).switch3State = "0";
									}
									switchState = switchBoards.get(i).switch3State;
								}
								if (event.split("_")[2].equals("4")) {
									if (event.split("_")[3].equals("ON")) {
										switchBoards.get(i).switch4State = "1";
									} else {
										switchBoards.get(i).switch4State = "0";
									}
									switchState = switchBoards.get(i).switch4State;
								}
								if (event.split("_")[2].equals("5")) {
									if (event.split("_")[3].equals("ON")) {
										switchBoards.get(i).switch5State = "1";
									} else {
										switchBoards.get(i).switch5State = "0";
									}
									switchState = switchBoards.get(i).switch5State;
								}
								if (event.split("_")[2].equals("ALL")) {
									if (event.split("_")[3].equals("ON")) {
										switchBoards.get(i).switch1State = "1";
										switchBoards.get(i).switch2State = "1";
										switchBoards.get(i).switch3State = "1";
										switchBoards.get(i).switch4State = "1";
										switchBoards.get(i).switch5State = "1";
									} else {
										switchBoards.get(i).switch1State = "0";
										switchBoards.get(i).switch2State = "0";
										switchBoards.get(i).switch3State = "0";
										switchBoards.get(i).switch4State = "0";
										switchBoards.get(i).switch5State = "0";
									}
									switchState = switchBoards.get(i).switch1State;
								}
								for (int d = 1; d <= 5; ++d) {
									if (event.split("_")[2].equals("ALL") || Integer.parseInt(event.split("_")[2]) == d) { 
										String httpURL = String.format("http://%s/cmd?out%d=%s", switchBoards.get(i).boardIP, d, switchState);
										System.out.println(httpURL);
										URL myurl = new URL(httpURL);
										HttpURLConnection con = (HttpURLConnection) myurl.openConnection();
										con.setRequestMethod("GET");
										con.setConnectTimeout(99999);
										con.setReadTimeout(0);

										con.setDoOutput(true);

										InputStream ins = con.getInputStream();
										InputStreamReader isr = new InputStreamReader(ins);
										BufferedReader in = new BufferedReader(isr);
										String xml = "";
										String inputLine;
										while ((inputLine = in.readLine()) != null) {
											xml += inputLine;
										}
										in.close();
										isr.close();
										ins.close();
										con.disconnect();
										System.out.println(xml);
									}
								}
								break;

							} catch (Exception e) {

								e.printStackTrace();
							}
						}


					}



				}
			}

		}

		if (event.equals("getSwitchBoards")) {
			String listOfSwitchBoards = "";
			for (int i = 0; i < switchBoards.size(); ++i) {
				if (i > 0) {
					listOfSwitchBoards += ("|" + switchBoards.get(i).boardId);
				} else {
					listOfSwitchBoards += switchBoards.get(i).boardId;
				}
				listOfSwitchBoards += ("," + switchBoards.get(i).boardName);
				listOfSwitchBoards += ("," + switchBoards.get(i).switch1 + ":" + switchBoards.get(i).switch1State);
				listOfSwitchBoards += ("," + switchBoards.get(i).switch2 + ":" + switchBoards.get(i).switch2State);
				listOfSwitchBoards += ("," + switchBoards.get(i).switch3 + ":" + switchBoards.get(i).switch3State);
				listOfSwitchBoards += ("," + switchBoards.get(i).switch4 + ":" + switchBoards.get(i).switch4State);
				listOfSwitchBoards += ("," + switchBoards.get(i).switch5 + ":" + switchBoards.get(i).switch5State);

			}

			return listOfSwitchBoards;

		}

		if (event.equals("close")) {
			try {
				doType(KeyEvent.VK_CONTROL, KeyEvent.VK_W);
				if (currentApp.equals("mp4")) {
					Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","pkill omxplayer"});
				}
				if (currentApp.equals("pdf")) {
					Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","pkill xpdf"});
				}
				robot.mouseMove((screenWidth/2), (screenHeight-300));

			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

		if (event.equals("tvpower")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_POWER"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
			return "OK";
		}

		if (event.equals("tvsource")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_TUNER"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}

			return "OK";
		}

		if (event.equals("tvleft") || event.equals("tvprevious")) {
			if (currentApp.equals("pdf")) {
				robot.keyPress(KeyEvent.VK_UP);
				robot.keyRelease(KeyEvent.VK_UP);
			} else {
				try {
					Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_TUNER"});
					Thread.sleep(1000);
					Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_LEFT"});
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}

			return "OK";
		}

		if (event.equals("tvright") || event.equals("tvnext")) {
			if (currentApp.equals("pdf")) {
				robot.keyPress(KeyEvent.VK_DOWN);
				robot.keyRelease(KeyEvent.VK_DOWN);
			} else {
				try {
					Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_TUNER"});
					Thread.sleep(1000);
					Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_RIGHT"});
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}

			return "OK";
		}

		if (event.equals("tvmute")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_MUTE"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}

			return "OK";
		}

		if (event.equals("tvvolumeup")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_VOLUMEUP"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}

			return "OK";
		}

		if (event.equals("tvvolumedown")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + tvmodel + " KEY_VOLUMEDOWN"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}

			return "OK";
		}

		if (event.startsWith("tvchannel_")) {
			String channelToChange = event.split("_")[1];
			String channelNo = channelToChange;
			for (int i = 0; i < channels.size(); ++i) {
				if (channels.get(i).channelName.toUpperCase().equals(channelToChange.toUpperCase())) {
					channelNo = channels.get(i).channelNo;
				}
			}
			System.out.println("Sending " + channelNo);
			for (int i = 0; i < channelNo.length(); ++i) {
				try {

					Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_" + channelNo.substring(i, i+1)});
					Thread.sleep(500);
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}

			return "OK";
		}


		if (event.equals("remotepower")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_POWER"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
			return "OK";
		}

		if (event.equals("remotemute")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_MUTE"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
			return "OK";
		}
		if (event.equals("remoteguide")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_MENU"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
			return "OK";
		}

		if (event.equals("remoteok")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_OK"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remoteup")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_UP"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
			return "OK";
		}

		if (event.equals("remotedown")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_DOWN"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}



		if (event.equals("remoteback")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_BACK"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote1")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_1"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote2")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_2"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote3")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_3"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote4")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_4"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote5")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_5"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote6")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_6"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote7")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_7"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote8")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_8"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote9")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_9"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remote0")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_0"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
		}

		if (event.equals("remotevolumeup")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_VOLUMEUP"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}

			return "OK";
		}

		if (event.equals("remotevolumedown")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_VOLUMEDOWN"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}

			return "OK";
		}





		if (event.equals("remotechannelup")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_CHANNELUP"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
			return "OK";
		}

		if (event.equals("remotechanneldown")) {
			try {
				Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","irsend send_once " + settopboxmodel + " KEY_CHANNELDOWN"});
			} catch (Exception ex) {
				ex.printStackTrace();
			}			
			return "OK";
		}

		if (event.equals("google")) {
			try {
				if (process != null && process.isAlive()) process.destroy();
				robot.mouseMove(screenWidth/2, screenHeight/2);
				process = Runtime.getRuntime()
						.exec(new String[] {"/bin/bash", "-c", "chromium-browser --app=https://www.google.com --incognito --start-maximized"});
				currentApp = "web";
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return "web";

		}

		if (event.equals("youtube")) {
			try {
				if (process != null && process.isAlive()) process.destroy();
				robot.mouseMove(screenWidth/2, screenHeight/2);
				process = Runtime.getRuntime()
						.exec(new String[] {"/bin/bash", "-c", "chromium-browser --app=https://www.youtube.com --incognito --start-maximized"});
				currentApp = "web";
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return "web";

		}

		if (event.equals("tunein")) {
			try {
				if (process != null && process.isAlive()) process.destroy();
				robot.mouseMove(screenWidth/2, screenHeight/2);
				process = Runtime.getRuntime()
						.exec(new String[] {"/bin/bash", "-c", "chromium-browser --app=https://www.tunein.com --incognito --start-maximized"});
				currentApp = "web";
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return "web";

		}

		if (event.equals("netflix")) {
			try {
				if (process != null && process.isAlive()) process.destroy();
				robot.mouseMove(screenWidth/2, screenHeight/2);
				process = Runtime.getRuntime()
						.exec(new String[] {"/bin/bash", "-c", "chromium-browser --app=https://www.netflix.com --start-maximized"});
				currentApp = "web";
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return "web";

		}

		if (event.equals("amazonprime")) {
			try {
				if (process != null && process.isAlive()) process.destroy();
				robot.mouseMove(screenWidth/2, screenHeight/2);
				process = Runtime.getRuntime()
						.exec(new String[] {"/bin/bash", "-c", "chromium-browser --app=https://www.primevideo.com --start-maximized"});
				currentApp = "web";
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return "web";

		}

		if (event.equals("whatsapp")) {
			try {
				if (process != null && process.isAlive()) process.destroy();
				robot.mouseMove(screenWidth/2, screenHeight/2);
				process = Runtime.getRuntime()
						.exec(new String[] {"/bin/bash", "-c", "chromium-browser --app=https://web.whatsapp.com --incognito --start-maximized"});
				currentApp = "web";
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return "web";

		}

		if (event.equals("irdmenu")) {
			try {
				if (process != null && process.isAlive()) process.destroy();
				robot.mouseMove(screenWidth/2, screenHeight/2);
				process = Runtime.getRuntime()
						.exec(new String[] {"/bin/bash", "-c", "xpdf -fullscreen irdmenu.pdf"});
				currentApp = "pdf";
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return "pdf";

		}

		if (event.equals("showplaces")) {
			try {
				if (process != null && process.isAlive()) process.destroy();
				robot.mouseMove(screenWidth/2, screenHeight/2);
				process = Runtime.getRuntime()
						.exec(new String[] {"/bin/bash", "-c", "omxplayer places.mp4"});
				currentApp = "mp4";
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			return "mp4";

		}

		if (event.startsWith("mouse_") ) {
			if (event.split("_").length == 3) {
				String xOffset = event.split("_")[1];
				String yOffset = event.split("_")[2];
				robot.mouseMove((int) MouseInfo.getPointerInfo().getLocation().getX() + (int) Double.parseDouble(xOffset), (int) MouseInfo.getPointerInfo().getLocation().getY() + (int) Double.parseDouble(yOffset));
			} else {
				robot.mousePress(InputEvent.BUTTON1_MASK);
				robot.mouseRelease(InputEvent.BUTTON1_MASK);
			}

			return "OK";
		}

		if (event.startsWith("go_") ) {
			if (event.split("_").length == 2) {
				String text = event.split("_")[1];

				if (text.equals("<<")) {
					robot.keyPress(KeyEvent.VK_BACK_SPACE);
					robot.keyRelease(KeyEvent.VK_BACK_SPACE);
					return "OK";
				}
				if (text.equals(">>")) {
					text = "\n";
				}
				if (text.equals("us")) {
					text = "_";
				}
				if (text.equals("amp")) {
					text = "&";
				}
				if (text.equals("at")) {
					text = "@";
				}
				if (text.equals("hash")) {
					text = "#";
				}
				if (text.equals("per")) {
					text = "%";
				}
				if (text.equals("carat")) {
					text = "^";
				}
				if (text.equals("curlleft")) {
					text = "{";
				}
				if (text.equals("curlright")) {
					text = "}";
				}
				if (text.equals("pipe")) {
					text = "|";
				}
				if (text.equals("backslash")) {
					text = "\\";
				}
				if (text.equals("lt")) {
					text = "<";
				}
				if (text.equals("gt")) {
					text = ">";
				}
				System.out.println(text.charAt(0));
				type(text.charAt(0));
			}



			return "OK";
		}

		if (event.equals("webup") ) {
			robot.mouseWheel(-2);
			return "OK";
		}

		if (event.equals("webdown") ) {
			robot.mouseWheel(2);
			return "OK";
		}

		if (event.equals("webback") ) {
			robot.keyPress(KeyEvent.VK_ALT);
			robot.keyPress(KeyEvent.VK_LEFT);
			robot.keyRelease(KeyEvent.VK_LEFT);
			robot.keyRelease(KeyEvent.VK_ALT);
...

This file has been truncated, please download it to see its full contents.

NodeMCU Code for Board

Arduino
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include <ESP8266HTTPClient.h>



const char *myssid = "kc_0000001";

char httprequest[250];

ESP8266WebServer server(80);

HTTPClient http;
int hostip = 100;

int tries = 0;

const int out1 = 16;
const int out2 = 5;
const int out3 = 4;
const int out4 = 0;
const int out5 = 2;

const int in1 = 14;
const int in2 = 12;
const int in3 = 13;
const int in4 = 3;
const int in5 = 10;

int state1 = 0;
int state2 = 0;
int state3 = 0;
int state4 = 0;
int state5 = 0;

unsigned long timeelapsed = 0;

void handleConfiguration() {
  String status = "Configuration : ";
  for (int i = 0; i < server.args(); ++i) {
    if (server.argName(i) == "ssid") {
      String ssid = server.arg(i);
      status = status + " ssid = " + ssid;
      int address = 11;
      for (int j = 0; j < ssid.length(); ++j) {
        EEPROM.write(address, ssid.charAt(j));
        ++address;
      }
      EEPROM.write(address, 0);     
    }


    if (server.argName(i) == "password") {
      String password = server.arg(i);
      status = status + " password = " + password;
      int address = 51;
      for (int j = 0; j < password.length(); ++j) {
        EEPROM.write(address, password.charAt(j));
        ++address;
      }
      EEPROM.write(address, 0);
            
    }

    if (server.argName(i) == "host") {
      String host = server.arg(i);
      status = status + " host = " + host;
      EEPROM.write(101, host.toInt());     
    }
    
  }

  EEPROM.write(0, 1);
  EEPROM.commit();
  status = status + " rebooting.....";
  server.send(200, "text/plain", status);
  ESP.restart();

}

void handleRoot() {
  String status = "";
  if (digitalRead(out1) == HIGH) {
    status = "1=ON";
  } else {
    status = "1=OFF";
  }

  if (digitalRead(out2) == HIGH) {
    status = status + " 2=ON";
  } else {
    status = status + " 2=OFF";
  }

  if (digitalRead(out3) == HIGH) {
    status = status + " 3=ON";
  } else {
    status = status + " 3=OFF";
  }

  if (digitalRead(out4) == HIGH) {
    status = status + " 4=ON";
  } else {
    status = status + " 4=OFF";
  }

  if (digitalRead(out5) == HIGH) {
    status = status + " 5=ON";
  } else {
    status = status + " 5=OFF";
  }

  
  server.send(200, "text/plain", status);
}

void handleCommand() {
  String status = "Command: ";

  for (int i = 0; i < server.args(); ++i) {
    if (server.argName(i) == "out1") {
      if (server.arg(i) == "0") {
        digitalWrite(out1, LOW);
        status = status + " 1=OFF";
        state1 = 0;
      } else {
        digitalWrite(out1, HIGH);
        status = status + " 1=ON";
        state1 = 1;
      }
      EEPROM.write(1, state1);
    }

    if (server.argName(i) == "out2") {
      if (server.arg(i) == "0") {         
        digitalWrite(out2, LOW);
        status = status + " 2=OFF";
        state2 = 0;
      } else {
        digitalWrite(out2, HIGH);
        status = status + " 2=ON";
        state2 = 1;
      }
      EEPROM.write(2, state2);
    }

    if (server.argName(i) == "out3") {
      if (server.arg(i) == "0") {
        digitalWrite(out3, LOW);
        status = status + " 3=OFF";
        state3 = 0;
      } else {
        digitalWrite(out3, HIGH);
        status = status + " 3=ON";
        state3 = 1;
      }
      EEPROM.write(3, state3);
    }

    if (server.argName(i) == "out4") {
      if (server.arg(i) == "0") {
        digitalWrite(out4, LOW);
        status = status + " 4=OFF";
        state4 = 0;
      } else {
        digitalWrite(out4, HIGH);
        status = status + " 4=ON";
        state4 = 1;
      }
      EEPROM.write(4, state4);
    }

    if (server.argName(i) == "out5") {
      if (server.arg(i) == "0") {
        digitalWrite(out5, LOW);
        status = status + " 5=OFF";
        state5 = 0;
      } else {
        digitalWrite(out5, HIGH);
        status = status + " 5=ON";
        state5 = 1;
      }
      EEPROM.write(5, state5);
    }
  
  
  } 
  EEPROM.commit();
  server.send(200, "text/plain", status);

}

void handleNotFound(){
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
}

void setup(void){
  pinMode(out1, OUTPUT);
  pinMode(out2, OUTPUT);
  pinMode(out3, OUTPUT);
  pinMode(out4, OUTPUT);
  pinMode(out5, OUTPUT);

  pinMode(in1, INPUT_PULLUP);
  pinMode(in2, INPUT_PULLUP);
  pinMode(in3, INPUT_PULLUP);
  pinMode(in4, INPUT_PULLUP);
  pinMode(in5, INPUT_PULLUP);

  
  digitalWrite(out1, LOW);
  digitalWrite(out2, LOW);
  digitalWrite(out3, LOW);
  digitalWrite(out4, LOW);
  digitalWrite(out5, LOW);

  delay(1000);

  //Serial.begin(9600);
  //Serial.println("Jai Omsai");

  EEPROM.begin(512);

  if (EEPROM.read(1) == 1) {
    digitalWrite(out1, HIGH);
    state1 = 1;
  }

  if (EEPROM.read(2) == 1) {
    digitalWrite(out2, HIGH);
    state2 = 1;
  }

  if (EEPROM.read(3) == 1) {
    digitalWrite(out3, HIGH);
    state3 = 1;
  }

  if (EEPROM.read(4) == 1) {
    digitalWrite(out4, HIGH);
    state4 = 1;
  }
  
  if (EEPROM.read(5) == 1) {
    digitalWrite(out5, HIGH);
    state5 = 1;
  }
  
  char ssid[50];
  int address = 11;
  int j = 0;
  while (EEPROM.read(address) != 0 && address < 50) {
    ssid[j] = EEPROM.read(address);
    ++j;
    ++address;
  }
  ssid[j] = 0;
  //Serial.print("SSID ");
  //Serial.println(ssid);

  char password[50];
  address = 51;
  j = 0;
  while (EEPROM.read(address) != 0 && address < 100) {
    password[j] = EEPROM.read(address);
    ++j;
    ++address;
  }
  password[j] = 0;
  //Serial.print("Password ");
  //Serial.println(password);

  hostip = EEPROM.read(101);

  //Serial.print("Host ");
  //Serial.println(hostip);
  


  if (EEPROM.read(0) == 99) {
    WiFi.mode(WIFI_AP);
    WiFi.softAP(myssid);
    EEPROM.write(0, 1);

    IPAddress myIP = WiFi.softAPIP();
    Serial.println(myIP);
  
     
  } else {
    WiFi.mode(WIFI_STA);
    WiFi.setAutoConnect(true);
    //Serial.println(myIP);

  }

  EEPROM.commit();

  server.on("/", handleRoot);
  server.on("/cmd", handleCommand);
  server.on("/conf", handleConfiguration);
  server.onNotFound(handleNotFound);
  server.begin();

  tries = 0;

}

void updateHost() {
  if (WiFi.getMode() == WIFI_STA) {
    IPAddress myIP = WiFi.localIP();
    //Serial.println(myIP);
    //Serial.println(WiFi.status());
    //Serial.println(WL_CONNECTED);
    if (WiFi.status() == WL_CONNECTED) {
      
      
      
      sprintf(httprequest, "http://%d.%d.%d.%d:8081/?%s=%d&out1=%d&out2=%d&out3=%d&out4=%d&out5=%d", 
            myIP[0], myIP[1], myIP[2], hostip, myssid, myIP[3], state1, state2, state3, state4, state5);

            
            
      http.begin(httprequest); //HTTP
      int httpCode = http.GET();
      //Serial.println(httpCode);
      http.end();
  
    } else {
      ++tries;
      if (tries > 10) {
          ESP.restart();
      }
    }
  }
}

void loop(void) {

  if (millis() < timeelapsed) {
    timeelapsed = millis();
  }
  if (millis() - timeelapsed > 10000) {
    timeelapsed = millis();
    updateHost();
  }


  server.handleClient();
  
  int state = digitalRead(in1);
  delay(5);
  int checkstate = digitalRead(in1);
  if (state == checkstate && state == LOW) {
     if (state1 == 0) state1 = 2;
     if (state1 == 1) state1 = 3;
  }
  state = digitalRead(in1);
  delay(5);
  checkstate = digitalRead(in1);
  if (state == checkstate && state == HIGH && state1 > 1) {
     if (state1 == 2) {
         state1 = 1;
     } else {
         state1 = 0;
     }
     digitalWrite(out1, state1);
     EEPROM.write(1, state1);
     EEPROM.commit();
     updateHost();
  }


  
  /* 2 */
  state = digitalRead(in2);
  delay(5);
  checkstate = digitalRead(in2);
  if (state == checkstate && state == LOW) {
     if (state2 == 0) state2 = 2;
     if (state2 == 1) state2 = 3;
  }
  state = digitalRead(in2);
  delay(5);
  checkstate = digitalRead(in2);
  if (state == checkstate && state == HIGH && state2 > 1) {
     if (state2 == 2) {
         state2 = 1;
     } else {
         state2 = 0;
     }
     digitalWrite(out2, state2);
     EEPROM.write(2, state2);
     EEPROM.commit();
     updateHost();
  }


 /* 3 */
  state = digitalRead(in3);
  delay(5);
  checkstate = digitalRead(in3);
  if (state == checkstate && state == LOW) {
     if (state3 == 0) state3 = 2;
     if (state3 == 1) state3 = 3;
  }
  state = digitalRead(in3);
  delay(5);
  checkstate = digitalRead(in3);
  if (state == checkstate && state == HIGH && state3 > 1) {
     if (state3 == 2) {
         state3 = 1;
     } else {
         state3 = 0;
     }
     digitalWrite(out3, state3);
     EEPROM.write(3, state3);
     EEPROM.commit();
     updateHost();
  }

 /* 4 */
  state = digitalRead(in4);
  delay(5);
  checkstate = digitalRead(in4);
  if (state == checkstate && state == LOW) {
     if (state4 == 0) state4 = 2;
     if (state4 == 1) state4 = 3;
  }
  state = digitalRead(in4);
  delay(5);
  checkstate = digitalRead(in4);
  if (state == checkstate && state == HIGH && state4 > 1) {
     if (state4 == 2) {
         state4 = 1;
     } else {
         state4 = 0;
     }
     digitalWrite(out4, state4);
     EEPROM.write(4, state4);
     EEPROM.commit();
     updateHost();
  }

 /* 5 */
  state = digitalRead(in5);
  delay(5);
  checkstate = digitalRead(in5);
  if (state == checkstate && state == LOW) {
     if (state5 == 0) state5 = 2;
     if (state5 == 1) state5 = 3;
  }
  state = digitalRead(in5);
  delay(5);
  checkstate = digitalRead(in5);
  if (state == checkstate && state == HIGH && state5 > 1) {
     if (state5 == 2) {
         state5 = 1;
     } else {
         state5 = 0;
     }
     digitalWrite(out5, state5);
     EEPROM.write(5, state5);
     EEPROM.commit();
     updateHost();
  }

  if (state1 == 2 && state5 == 2) {
    EEPROM.write(0, 99);
    EEPROM.commit();
    digitalWrite(out1, 0);
    digitalWrite(out2, 0);
    digitalWrite(out3, 0);
    digitalWrite(out4, 0);
    digitalWrite(out5, 0);
    delay(10000);
    ESP.restart();
  }



}

NodeMCU Code For Thermostat

Arduino
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SparkFun_APDS9960.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include <ESP8266HTTPClient.h>


// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 1


// If using software SPI (the default case):
#define OLED_MOSI  2
#define OLED_CLK   14
#define OLED_DC    16
#define OLED_CS    12
#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
SparkFun_APDS9960 apds = SparkFun_APDS9960();

#define ONE_WIRE_BUS D10

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);

const char *myssid = "kc_0000003";
//const char *myssid = "kc_0000002";

char httprequest[250];

ESP8266WebServer server(80);

HTTPClient http;
int hostip = 100;

int tries = 0;


unsigned long timeelapsed = 0;
unsigned int setTemp = 24;
unsigned int curTemp = 24;
unsigned int ac = 0;


void handleRoot() {
  String status = "OK";
  
  server.send(200, "text/plain", status);
}

void handleCommand() {
  String status = "Command: ";

  for (int i = 0; i < server.args(); ++i) {
      if (server.argName(i) == "display") {
         displayOnScreen(server.arg(i));
         status += server.argName(i);
      }
      if (server.argName(i) == "setpoint") {
         setTemp = server.arg(i).toInt();
         displaySetPoint();
      }
      if (server.argName(i) == "ac") {
         if (server.arg(i) == "0" || server.arg(i) == "OFF") {
            ac = 0;
         } else {
            ac = 1;
         }
         displayTemperature();
      }
      status = status + " " + server.argName(i) + " " + server.arg(i);
  } 

  server.send(200, "text/plain", status);
  
}

void handleNotFound(){
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
}

void setup(void){


  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC);

  display.display();
  delay(2000);

  
  if ( !apds.init() ) {
    displayOnScreen("I-ERR");
  }

  // Adjust the Proximity sensor gain
  if ( !apds.setGestureGain(GGAIN_1X) ) {
    displayOnScreen("G-ERR");;
  }
  
  // Start running the APDS-9960 gesture sensor engine
  if ( apds.enableGestureSensor(true) ) {
    displayOnScreen("READY");
  } else {
    displayOnScreen("E-ERR");
  }
  
  EEPROM.begin(512);

  
  WiFi.mode(WIFI_STA);
  WiFi.begin("XXXXXX");
  WiFi.setAutoConnect(true);

  EEPROM.commit();

  server.on("/", handleRoot);
  server.on("/cmd", handleCommand);
  server.onNotFound(handleNotFound);
  server.begin();

  tries = 0;
  sensors.begin();

}

void updateHost() {
  if (WiFi.getMode() == WIFI_STA) {
    IPAddress myIP = WiFi.localIP();
    //Serial.println(myIP);
    //Serial.println(WiFi.status());
    //Serial.println(WL_CONNECTED);
    if (WiFi.status() == WL_CONNECTED) {
      
      
      sprintf(httprequest, "http://%d.%d.%d.%d:8081/?%s=%d.%d.%d.%d&set=%d&temp=%d&ac=%d", 
         190, 180, 161, 67, myssid, myIP[0], myIP[1], myIP[2], myIP[3], setTemp, curTemp, ac);

            
            
      http.begin(httprequest); //HTTP
      int httpCode = http.GET();
      //Serial.println(httpCode);
      http.end();
  
    } else {
      ++tries;
      if (tries > 10) {
          ESP.restart();
      }
    }
  }
}

void loop(void) {

  if (millis() < timeelapsed) {
    timeelapsed = millis();
  }
  if (millis() - timeelapsed > 10000) {
    timeelapsed = millis();
    displayTemperature();
    updateHost();
  }

  handleGesture();
  server.handleClient();

}

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP:
        setTemp++;
        displaySetPoint();
        break;
      case DIR_DOWN:
        setTemp--;
        displaySetPoint();
        break;
      case DIR_LEFT:
        ac = 0;
        displayTemperature();
        break;
      case DIR_RIGHT:
        ac = 1;
        displayTemperature();
        break;
      case DIR_NEAR:
        
        break;
      case DIR_FAR:
        
        break;
      default:
        break;
    }
    timeelapsed = millis();
    updateHost();
    }


}

void displayTemperature() {
  char charVal[10];
  float temp = 0.0;
  sensors.requestTemperatures(); 
  temp = sensors.getTempCByIndex(0);
  delay(100);
  curTemp = int(temp);
  sprintf(charVal, "%d", curTemp);
  String tempStr = String(charVal);
  tempStr.trim();

  displayOnScreen(tempStr + " Deg");
  
}

void displaySetPoint() {
  char charVal[10];
  
  sprintf(charVal, "%d", setTemp);
  String tempStr = String(charVal);
  tempStr.trim();

  displayOnScreen("Set " + tempStr + " Deg");
  
}

void displayOnScreen(String what) {
  String manualDisplay = "AC Auto";
  if (ac == 0) {
    manualDisplay = "AC Off";
  }
  display.clearDisplay();

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Hackster.io Project\n\r" + manualDisplay);
  
  display.setTextSize(2);

  display.println(what);
  display.display();
  
}

Lambda Node.js Code

JavaScript
As the drwopdown does not have Node.JS I have mentioned Language and Javascript
var https = require('https');

exports.handler = function (request, context) {
    log("DEGUG:", "Request ",  JSON.stringify(request));
    log("DEGUG:", "Context ",  JSON.stringify(context));
    if (request.directive.header.namespace === 'Alexa.Discovery' && request.directive.header.name === 'Discover') {
        handleDiscovery(request, context, "");
    }
    else if (request.directive.header.namespace === 'Alexa.PowerController') {
        if (request.directive.header.name === 'TurnOn' || request.directive.header.name === 'TurnOff') {
            handlePowerControl(request, context);
        }
    }
    else if (request.directive.header.namespace === 'Alexa.LockController') {
        if (request.directive.header.name === 'Lock' || request.directive.header.name === 'Unlock') {
            handleLockControl(request, context);
        }
    }
    else if (request.directive.header.namespace === 'Alexa.Speaker') {
        if (request.directive.header.name === 'SetMute') {
            handleVolumeControl(request, context);
        }
    }
    else if (request.directive.header.namespace === 'Alexa.InputController') {
        if (request.directive.header.name === 'SelectInput') {
            handleInputControl(request, context);
        }
    }
    else if (request.directive.header.namespace === 'Alexa.ChannelController') {
        if (request.directive.header.name === 'ChangeChannel') {
            handleChannelControl(request, context);
        }
    }
    else if (request.directive.header.namespace === 'Alexa.ThermostatController') {
        if (request.directive.header.name === 'SetTargetTemperature') {
            handleThermostatControl(request, context);
        }
    }

    function handleDiscovery(request, context) {
        var requestToken = request.directive.payload.scope.token;
        getJsonRequest("getdevices=" + requestToken, function(data) {
            var payload = data;
            var header = request.directive.header;
            header.name = "Discover.Response";
            log("DEBUG", "Discovery Response: ", JSON.stringify({ header: header, payload: payload }));
            context.succeed({ event: { header: header, payload: payload } });
        });

        
    }

    function log(message, message1, message2) {
        console.log(message + message1 + message2);
    }

    function handlePowerControl(request, context) {
       
        var requestMethod = request.directive.header.name;
        // get user token pass in request
        var requestToken = request.directive.endpoint.scope.token;
        
        var endpointId = request.directive.endpoint.endpointId;
        var powerResult = "NONE";

        if (requestMethod === "TurnOn") {

            // Make the call to your device cloud for control 
            // powerResult = stubControlFunctionToYourCloud(endpointId, token, request);
            powerResult = "ON";
        }
       else if (requestMethod === "TurnOff") {
            // Make the call to your device cloud for control and check for success 
            // powerResult = stubControlFunctionToYourCloud(endpointId, token, request);
            powerResult = "OFF";
        }
        var contextResult = {
            "properties": [{
                "namespace": "Alexa.PowerController",
                "name": "powerState",
                "value": powerResult,
                "timeOfSample": getUTCTimeStamp(), //retrieve from result.
                "uncertaintyInMilliseconds": 500
            }]
        };
        var responseHeader = request.directive.header;
        responseHeader.namespace = "Alexa";
        responseHeader.name = "Response";
        //responseHeader.messageId = responseHeader.messageId + "-R";
        var responseEndpoint = request.directive.endpoint;
        var response = {
            context: contextResult,
            event: {
                header: responseHeader
            },
            endpoint : responseEndpoint,
            payload: {}

        };
        getJsonRequest("access_token=" + requestToken + "&endpointId=" + endpointId + "&state=" + powerResult, function(data) {
            context.succeed(response);
        });
        
        log("DEBUG", "Alexa.PowerController ", JSON.stringify(response));
       
    }
    
    function handleLockControl(request, context) {
       
        var requestMethod = request.directive.header.name;
        // get user token pass in request
        var requestToken = request.directive.endpoint.scope.token;
        
        var endpointId = request.directive.endpoint.endpointId;
        var lockResult = "JAMMED";

        if (requestMethod === "Lock") {

            // Make the call to your device cloud for control 
            // powerResult = stubControlFunctionToYourCloud(endpointId, token, request);
            lockResult = "LOCKED";
        }
       else if (requestMethod === "Unlock") {
            // Make the call to your device cloud for control and check for success 
            // powerResult = stubControlFunctionToYourCloud(endpointId, token, request);
            lockResult = "UNLOCKED";
        }
        var contextResult = {
            "properties": [{
                "namespace": "Alexa.LockController",
                "name": "lockState",
                "value": lockResult,
                "timeOfSample": getUTCTimeStamp(), //retrieve from result.
                "uncertaintyInMilliseconds": 500
            }]
        };
        var responseHeader = request.directive.header;
        responseHeader.namespace = "Alexa";
        responseHeader.name = "Response";
        //responseHeader.messageId = responseHeader.messageId + "-R";
        var responseEndpoint = request.directive.endpoint;
        var response = {
            context: contextResult,
            event: {
                header: responseHeader
            },
            endpoint : responseEndpoint,
            payload: {}

        };
        var stateResult = "ON";
        if (lockResult == "UNLOCKED") {
            stateResult = "OFF";
        }
        
        getJsonRequest("access_token=" + requestToken + "&endpointId=" + endpointId + "&state=" + stateResult, function(data) {
            context.succeed(response);
        });
        
        log("DEBUG", "Alexa.LockController ", JSON.stringify(response));
       
    }

    
    function handleVolumeControl(request, context) {
       
        var requestMethod = request.directive.header.name;
        // get user token pass in request
        var requestToken = request.directive.endpoint.scope.token;
        
        var endpointId = request.directive.endpoint.endpointId;
        var muteResult = request.directive.payload.mute;

        var contextResult = {
            "properties": [{
                "namespace": "Alexa.Speaker",
                "name": "muted",
                "value": muteResult,
                "timeOfSample": getUTCTimeStamp(), //retrieve from result.
                "uncertaintyInMilliseconds": 500
            }]
        };
        var responseHeader = request.directive.header;
        responseHeader.namespace = "Alexa";
        responseHeader.name = "Response";
        //responseHeader.messageId = responseHeader.messageId + "-R";
        var responseEndpoint = request.directive.endpoint;
        var response = {
            context: contextResult,
            event: {
                header: responseHeader
            },
            endpoint : responseEndpoint,
            payload: {}

        };
        
        
        
        getJsonRequest("access_token=" + requestToken + "&endpointId=" + endpointId + "&state=tvmute", function(data) {
            context.succeed(response);
        });
        
        log("DEBUG", "Alexa.Speaker ", JSON.stringify(response));
       
    }
    
    
    function handleInputControl(request, context) {
       
        var requestMethod = request.directive.header.name;
        // get user token pass in request
        var requestToken = request.directive.endpoint.scope.token;
        
        var endpointId = request.directive.endpoint.endpointId;
        var inputResult = request.directive.payload.input;

        var contextResult = {
            "properties": [{
                "namespace": "Alexa.InputController",
                "name": "input",
                "value": inputResult,
                "timeOfSample": getUTCTimeStamp(), //retrieve from result.
                "uncertaintyInMilliseconds": 500
            }]
        };
        var responseHeader = request.directive.header;
        responseHeader.namespace = "Alexa";
        responseHeader.name = "Response";
        //responseHeader.messageId = responseHeader.messageId + "-R";
        var responseEndpoint = request.directive.endpoint;
        var response = {
            context: contextResult,
            event: {
                header: responseHeader
            },
            endpoint : responseEndpoint,
            payload: {}

        };
        var stateResult = "tvprevious";
        
        if (inputResult == "AV" || inputResult == "SET TOP BOX" || inputResult == "AV" || inputResult == "CABLE") {
            stateResult = "tvnext";
        }
        
        getJsonRequest("access_token=" + requestToken + "&endpointId=" + endpointId + "&state=" + stateResult, function(data) {
            context.succeed(response);
        });
        
        log("DEBUG", "Alexa.InputController ", JSON.stringify(response));
       
    }

    function handleChannelControl(request, context) {
       
        var requestMethod = request.directive.header.name;
        // get user token pass in request
        var requestToken = request.directive.endpoint.scope.token;
        
        var endpointId = request.directive.endpoint.endpointId;
        var channelResult = request.directive.payload.channel;

        var contextResult = {
            "properties": [{
                "namespace": "Alexa.ChannelController",
                "name": "channel",
                "value": channelResult,
                "timeOfSample": getUTCTimeStamp(), //retrieve from result.
                "uncertaintyInMilliseconds": 500
            }]
        };
        var responseHeader = request.directive.header;
        responseHeader.namespace = "Alexa";
        responseHeader.name = "Response";
        //responseHeader.messageId = responseHeader.messageId + "-R";
        var responseEndpoint = request.directive.endpoint;
        var response = {
            context: contextResult,
            event: {
                header: responseHeader
            },
            endpoint : responseEndpoint,
            payload: {}

        };

        var channel = "";
        if (request.directive.payload.channelMetadata.name == undefined) {
            channel = request.directive.payload.channel.number;
        } else {
            channel = request.directive.payload.channelMetadata.name;
        }
        
        getJsonRequest("access_token=" + requestToken + "&endpointId=" + endpointId + "&state=tvchannel_" + channel, function(data) {
            context.succeed(response);
        });
        
        log("DEBUG", "Alexa.ChannelController ", JSON.stringify(response));
       
    }

    function handleThermostatControl(request, context) {
       
        var requestMethod = request.directive.header.name;
        // get user token pass in request
        var requestToken = request.directive.endpoint.scope.token;
        
        var endpointId = request.directive.endpoint.endpointId;
        var thermostatResult = request.directive.payload.targetSetpoint;

        var contextResult = {
            "properties": [{
                "namespace": "Alexa.ThermostatController",
                "name": "targetSetpoint",
                "value": thermostatResult,
                "timeOfSample": getUTCTimeStamp(), //retrieve from result.
                "uncertaintyInMilliseconds": 500
            }]
        };
        var responseHeader = request.directive.header;
        responseHeader.namespace = "Alexa";
        responseHeader.name = "Response";
        //responseHeader.messageId = responseHeader.messageId + "-R";
        var responseEndpoint = request.directive.endpoint;
        var response = {
            context: contextResult,
            event: {
                header: responseHeader
            },
            endpoint : responseEndpoint,
            payload: {}

        };

        
        
        getJsonRequest("access_token=" + requestToken + "&endpointId=" + endpointId + "&state=setpoint_" + thermostatResult.value, function(data) {
            context.succeed(response);
        });
        
        log("DEBUG", "Alexa.ThermostatController ", JSON.stringify(response));
       
    }
    
    function getUTCTimeStamp(){
        var datetime = new Date().toISOString();
        log("DEBUG", "UTC Date Time ", datetime);
        return datetime;
    }
    
};

var getJsonRequest = function(query, callback){
    
    https.get("yourservercgiscript?" + query, function(res) {
             var body = '';
             
             res.on('data', function(data){
                    body += data;
                    });
             
             res.on('end', function(){
                    console.log("DEBUG", "Body  ", body);
                    var result = JSON.parse(body);
                    callback(result);
                    });
             
             }).on('error', function(e){
                   console.log('Error: ' + e);
                   });
};

HTTP JSON Server Code

Java
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.Arrays;
import java.util.concurrent.Executors;

import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class JSONServer {
	final openingPage page;
	JSONServer(final openingPage page) {
		this.page = page;
		try {
			InetSocketAddress addr = new InetSocketAddress(8081);
			HttpServer server = HttpServer.create(addr, 0);


			server.createContext("/", new JSONHandler());

			server.setExecutor(Executors.newCachedThreadPool());
			server.start();
			System.out.println("Server is listening on port 8081");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private class JSONHandler implements HttpHandler {

		@Override
		public void handle(HttpExchange exchange) throws IOException {
			call(exchange);
		}

		private synchronized void call(HttpExchange exchange) {
			new Thread(new JSONRunnable(exchange)).start();
		}

	}

	private class  JSONRunnable implements Runnable {

		protected HttpExchange exchange = null;

		public JSONRunnable(HttpExchange exchange) {
			this.exchange = exchange;
		}

		@Override
		public  void run() {

			try {
				Headers responseHeaders = exchange.getResponseHeaders();

				OutputStream responseBody = exchange.getResponseBody();

				String uri = exchange.getRequestURI().toString();


				if (exchange.getRequestMethod().equals("POST")) {

					Headers requestHeaders = exchange.getRequestHeaders();
					System.out.println(requestHeaders.getFirst("Content-Type"));
					String boundary = requestHeaders.getFirst("Content-Type").replaceAll("multipart/form-data; boundary=", "");
					System.out.println(boundary);
					InputStream is = exchange.getRequestBody();
					byte[] data = getInputAsBinary(is);
					is.close();
					String stringData = new String(data);
					int start = stringData.indexOf(boundary);
					start = stringData.indexOf('\r', start+1);
					start = stringData.indexOf('\r', start+1);
					start = stringData.indexOf('\r', start+1);
					start = stringData.indexOf('\r', start+1)+2;
					int end = stringData.indexOf(boundary, start);

					for (int i = end; i < data.length; ++i) {
						byte[] compare = Arrays.copyOfRange(data, end, end + boundary.length());
						System.out.println(new String(compare));
						if (Arrays.equals(compare, boundary.getBytes())) {
							break;
						}
						++end;
					}

					end -= 4;

					System.out.println(end-start);

					ByteArrayOutputStream bos = new ByteArrayOutputStream();


					bos.write(data, start, end-start);

					FileOutputStream fos = new FileOutputStream("hycan.png");
					fos.write(bos.toByteArray());
					fos.close();


					//System.out.print(stringData.substring(start, end));

					exchange.sendResponseHeaders(200, 0);
					responseHeaders.set("Content-Type", "text/html");
					responseBody.write("OK".getBytes());
					responseBody.close();
					return;
				}

				if (uri.indexOf("?") < 0) {
					String resource = uri.replaceAll("/", "");
					if (resource.equals("")) resource = "index.html";
					if (resource.equals("conf")) resource = "conf.html";
					exchange.sendResponseHeaders(200, 0);
					try {


						InputStream in = JSONServer.class.getResourceAsStream("/resources/" + resource);

						if (in == null) {
							responseHeaders.set("Content-Type", "text/html");
							responseBody.write(resource.getBytes());
							responseBody.close();
							return;
						}


						ByteArrayOutputStream fileBytes=new ByteArrayOutputStream();
						byte[] buffer = new byte[4096];
						int nread = 0;
						while ((nread = in.read(buffer)) != -1) {
							fileBytes.write(buffer, 0, nread);
						}
						if (resource.endsWith(".htm") || resource.endsWith(".html")) {
							responseHeaders.set("Content-Type", "text/html");
						} else if (resource.endsWith(".js") ) {
							responseHeaders.set("Content-Type", "text/javascript");
						} else if (resource.endsWith(".css") ) {
							responseHeaders.set("Content-Type", "text/css");
						} else if (resource.endsWith(".ico") ) {
							responseHeaders.set("Content-Type", "image/ico");
						} else if (resource.endsWith(".png") ) {
							responseHeaders.set("Content-Type", "image/png");
						} else if (resource.endsWith(".jpg") ) {
							responseHeaders.set("Content-Type", "image/jpg");
						} else if (resource.endsWith(".jpeg") ) {
							responseHeaders.set("Content-Type", "image/jpg");
						} else {
							responseHeaders.set("Content-Type", "text/plain");
						}
						responseBody.write(fileBytes.toByteArray());
						fileBytes.close();
						in.close();
						responseBody.close();

					} catch (Exception e) {
						responseHeaders.set("Content-Type", "text/html");
						responseBody.write(resource.getBytes());
						responseBody.close();
						e.printStackTrace();
					}



					return;
				}


				String query = exchange.getRequestURI().getQuery();
				if (query == null) {
					exchange.sendResponseHeaders(200, 0);
					responseHeaders.set("Content-Type", "text/html");
					responseBody.write("OK".getBytes());
					responseBody.close();
					return;
				}
				System.out.println(query);
				String app = processCommand(query);
				int i = query.indexOf("callback=");

				if (i >= 0) {


					i +=9;
					int j = query.indexOf("&", i);
					String callback = "";
					if (j > i) callback = query.substring(i, j);



					exchange.sendResponseHeaders(200, 0);
					responseHeaders.set("Content-Type", "text/json");
					responseBody.write((callback + "({\"result\" : \"" + app + "\"});").getBytes());
					responseBody.close();

				} else {
					exchange.sendResponseHeaders(200, 0);
					responseHeaders.set("Content-Type", "text/html");
					responseBody.write("OK".getBytes());
					responseBody.close();
				}


			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}

		private String processCommand(String query) {
			String result = "OK";
			try {
				int i = query.indexOf("cmd=");
				if (i >= 0) { 
					if (query.indexOf("&") > i) {
						result = page.pageEvent(query.substring(i+4, query.indexOf("&")));
					} else {
						result = page.pageEvent(query.substring(i+4));
					}
				}
				if (query.startsWith("kc_")) {

					query = query.replaceAll("&", "*");
					query = query.replaceAll("=", ":");
					System.out.println(query);
					result = page.pageEvent(query);

				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();

			}

			return result;

		}


	}

	public static byte[] getInputAsBinary(InputStream requestStream) {
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		try {
			byte[] buf = new byte[100000];
			int bytesRead=0;
			while ((bytesRead = requestStream.read(buf)) != -1){
				bos.write(buf, 0, bytesRead);
			}
			requestStream.close();
			bos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return bos.toByteArray();
	}

}

Web Page For Mobile Interface

HTML
<html>

<head>
	<meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 	<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
 	<link rel="apple-touch-icon" href="ok.png"/>
 	<script src="jquery-min.js"></script>
    <script src="jquery-ui.js"></script>
    <link rel="stylesheet" href="index.css">
    <script src="index.js"></script>
    <script src="uitouch.js"></script>
</head>

<body center>

<div class="block">
    <div class="heading">TV</div>
    
	<div>
		<label id="tvpower" class="clickable button">Power</label>
		<label id="tvsource" class="clickable button">Source</label>
	</div>
	<div class="center" style="margin-top:25px">
		<label id="tvvolumedown" class="clickable button" style="margin-left:15px">Vol-</label>
		<label id="tvmute" class="clickable button">Mute</label>	
		<label id="tvvolumeup" class="clickable button" style="margin-right:15px">Vol+</label>
	</div>
</div>

<div class="block">
    <div class="heading">Set-Top Box</div>
    
	<div>
		<label id="remotepower" class="clickable button">Power</label>
		<label id="remotemute" class="clickable button">Mute</label>
	</div>
	<div class="center" style="margin-top:20px">
		<div>
			<label id="remoteguide" class="clickable button">Guide</label>
		</div>
		<div>
			<label id="remotevolumeup" class="clickable button">Vol+</label>			
			<label id="remoteup" class="clickable button">Up</label>
			<label id="remotechannelup" class="clickable button">CH+</label>			
						
		</div>
		<div>
			<label id="remoteup" class="clickable button" >Left</label>
			<label id="remoteok" class="clickable button">Select</label>	
			<label id="remotedown" class="clickable button">Right</label>
		</div>
		<div>
			<label id="remotevolumedown" class="clickable button">Vol-</label>			
			<label id="remotedown" class="clickable button">Down</label>			
			<label id="remotechanneldown" class="clickable button">CH-</label>			
		</div>
		<div>
			<label id="remoteback" class="clickable button">Back</label>
		</div>
		<div>
			<label id="remote1" class="clickable button">1</label>			
			<label id="remote2" class="clickable button">2</label>			
			<label id="remote3" class="clickable button">3</label>
			<label id="remote4" class="clickable button">4</label>			
			<label id="remote5" class="clickable button">5</label>
	
		</div>
		<div>
			<label id="remote6" class="clickable button">6</label>			
			<label id="remote7" class="clickable button">7</label>			
			<label id="remote8" class="clickable button">8</label>
			<label id="remote9" class="clickable button">9</label>			
			<label id="remote0" class="clickable button">0</label>
	
		</div>
	</div>
</div>

<div class="block">
    <div class="heading">Web</div>
    
	<div class="center" style="margin-top:20px">
		<div>
			<img class="images button clickable" id="google"/>					
			<img class="images button clickable" id="youtube"/>					
			<img class="images button clickable" id="tunein"/>					
		</div>
		<div>
			<img class="images button clickable" id="netflix"/>					
			<img class="images button clickable" id="amazonprime"/>					
			<img class="images button clickable" id="whatsapp"/>					
		</div>
		<div>
			<label id="webup" class="clickable button">Up</label>
		</div>		
		<div>
			<label id="webback" class="clickable button">Back</label>
			<label id="close" class="clickable button">Close</label>
			<label id="webforward" class="clickable button">Forward</label>
		</div>
		<div>
			<label id="webdown" class="clickable button">Down</label>
		</div>		
	</div>
</div>


<div class="block">
    <div class="heading">Mouse</div>
	<div class="center" style="margin-top:20px">

		<div id="draggable" class="ui-widget-content center">
			<img class="images button clickable" id="mouse"/>
		</div>
		
		<div class="center">
			<label id="webleftclick" class="clickable button">Select</label>
			<img class="images button clickable" id="invisible"/>
			<label id="webrightclick" class="clickable button">R Click</label>
		</div>
	</div>
</div>

<div class="block">
    <div class="heading">Keyboard</div>
	<div class="center" style="margin-top:20px">


		<div class="keypad">
		  <label class="clickable key alpha">q</label>
		  <label class="clickable key alpha">w</label>
		  <label class="clickable key alpha">e</label>
		  <label class="clickable key alpha">r</label>
		  <label class="clickable key alpha">t</label>
		  <label class="clickable key alpha">y</label>
		  <label class="clickable key alpha">u</label>
		  <label class="clickable key alpha">i</label>
		  <label class="clickable key alpha">o</label>
		  <label class="clickable key alpha">p</label>
		 
		</div>
		
		<div class="keypad">
		  <label class="clickable key alpha">a</label>
		  <label class="clickable key alpha">s</label>
		  <label class="clickable key alpha">d</label>
		  <label class="clickable key alpha">f</label>
		  <label class="clickable key alpha">g</label>
		  <label class="clickable key alpha">h</label>
		  <label class="clickable key alpha">j</label>
		  <label class="clickable key alpha">k</label>
		  <label class="clickable key alpha">l</label>
		</div>
		
		<div class="keypad">
		  <label id="keycap" class="clickable key">cap</label>
		  <label class="clickable key alpha">z</label>
		  <label class="clickable key alpha">x</label>
		  <label class="clickable key alpha">c</label>
		  <label class="clickable key alpha">v</label>
		  <label class="clickable key alpha">b</label>
		  <label class="clickable key alpha">n</label>
		  <label class="clickable key alpha">m</label>
		  <label id="keydel" class="clickable key">del</label>
		</div>
		
		<div class="keypad">
		  <label class="clickable key">@</label>
		  <label id="keyspace" class="clickable key">space</label>
		  <label id="keyenter" class="clickable key">enter</label>
		   <label class="clickable key">.</label>
		</div>
		
		<div class="keypad">
		  <label class="clickable key">1</label>
		  <label class="clickable key">2</label>
		  <label class="clickable key">3</label>
		  <label class="clickable key">4</label>
		  <label class="clickable key">5</label>
		  <label class="clickable key">6</label>
		  <label class="clickable key">7</label>
		  <label class="clickable key">8</label>
		  <label class="clickable key">9</label>
		  <label class="clickable key">0</label>
		</div>
		<div class="keypad">
		  <label class="clickable key">~</label>
		  <label class="clickable key">/</label>
		  <label class="clickable key">!</label>
		  <label class="clickable key">#</label>
		  <label class="clickable key">$</label>
		  <label class="clickable key">%</label>
		  <label class="clickable key">^</label>
		  <label class="clickable key">&</label>
		  <label class="clickable key">*</label>
		</div>
		<div class="keypad">
		  <label class="clickable key">(</label>
		  <label class="clickable key">)</label>
		  <label class="clickable key">_</label>
		  <label class="clickable key">+</label>
		  <label class="clickable key">-</label>
		  <label class="clickable key">=</label>
		  <label class="clickable key">{</label>
		  <label class="clickable key">}</label>
		  <label class="clickable key">[</label>
		  <label class="clickable key">]</label>
		</div>
		<div class="keypad">
		  <label class="clickable key">|</label>
		  <label class="clickable key">\</label>
		  <label class="clickable key">:</label>
		  <label class="clickable key">"</label>
		  <label class="clickable key">;</label>
		  <label class="clickable key">'</label>
		  <label class="clickable key">&lt;</label>
		  <label class="clickable key">&gt;</label>
		  <label class="clickable key">?</label>
		
		</div>
	</div>
</div>

</body>






</html>

CSS File for Web Page

CSS
/* A bit custom styling */

body {
    background-color: black;
    color: white;
    margin-top: 50px;
}

.block {
	border-radius: 25px;
    border: 2px solid #73AD21;
    padding: 10px;
    margin-bottom: 25px;
}

#tvvolumeup, #tvvolumedown
 {
	background:    #fff2cc;
	background:    -webkit-linear-gradient(#fff2cc, #ffd966);
	background:    linear-gradient(#fff2cc, #ffd966);
	border:        1px solid #7f6000;
	border-radius: 1000px;
	width:         72px;
	height:        72px;
	color:         #000000;
	display:       inline-block;
	font:          normal 400 15px/72px "Calibri", sans-serif;
	text-align:    center;
	text-shadow:   none;
}

#remoteup, #remotedown, #remotechannelup, #remotechanneldown,
#remotevolumeup, #remotevolumedown, #webup, #webdown, #webback, #webforward
 {
	background:    #fff2cc;
	background:    -webkit-linear-gradient(#fff2cc, #ffd966);
	background:    linear-gradient(#fff2cc, #ffd966);
	border:        1px solid #7f6000;
	border-radius: 1000px;
	width:         72px;
	height:        72px;
	color:         #000000;
	display:       inline-block;
	font:          normal 400 15px/72px "Calibri", sans-serif;
	text-align:    center;
	text-shadow:   none;
}

#remote1, #remote2, #remote3, #remote4,
#remote5, #remote6, #remote7, #remote8, #remote9, #remote0
 {
	background:    #fff2cc;
	background:    -webkit-linear-gradient(#fff2cc, #ffd966);
	background:    linear-gradient(#fff2cc, #ffd966);
	border:        1px solid #7f6000;
	border-radius: 500px;
	width:         54px;
	height:        54px;
	color:         #000000;
	display:       inline-block;
	font:          normal 400 15px/54px "Calibri", sans-serif;
	text-align:    center;
	text-shadow:   none;
}




#remotevolumeup, #remotevolumedown {
	float: left;
	background:    #11ff11;
	background:    -webkit-linear-gradient(#11cc11, #11ff11 50%, #11cc11);
	background:    linear-gradient(#11cc11, #11ff11 50%, #11cc11);
}

#remotechannelup, #remotechanneldown {
	float: right;
	background:    #11ff11;
	background:    -webkit-linear-gradient(#11cc11, #11ff11 50%, #11cc11);
	background:    linear-gradient(#11cc11, #11ff11 50%, #11cc11);
}




#remoteback,  #tvmute, #select, #remoteok, #remoteguide,
#close, #webrightclick, #webleftclick {
	background:    #ffffff;
	background:    -webkit-linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	background:    linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	border:        1px solid #7f6000;
	border-radius: 1000px;
	width:         110px;
	height:        49px;
	color:         #000000;
	display:       inline-block;
	font:          normal 400 15px/49px "Calibri", sans-serif;
	text-align:    center;
	text-shadow:   none;
	margin: 1px;	
}




#remoteback, #remoteguide {
	margin-top: 10px;
	margin-bottom: 10px;
}

#tvpower, #remotepower, #tvsource, #remotemute  {
	background:    #f4cccc;
	background:    -webkit-linear-gradient(#e06666, #f4cccc 50%, #e06666);
	background:    linear-gradient(#e06666, #f4cccc 50%, #e06666);
	border:        1px solid #7f6000;
	border-radius: 1000px;
	width:         125px;
	height:        49px;
	color:         #000000;
	display:       inline-block;
	font:          normal 400 15px/49px "Calibri", sans-serif;
	text-align:    center;
	word-break: break-all
	text-shadow:   none;
	margin: 5px;	
}

#tvsource, #remotemute {
	background:    #ffffff;
	background:    -webkit-linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	background:    linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	float: right;
}
img {

	padding: 5px;
	width: 64px;
	height: 64px;


}

input {
    border: 2px solid #dadada;
    border-radius: 7px;
    width: 220px;
    height: 40px;
    font-size: 18px;
}

.input:focus { 
    outline: none;
    border-color: #9ecaed;
    box-shadow: 0 0 10px #9ecaed;
}

.header {
	margin: auto;
    text-align: center;
	position: fixed;
    top: 0;
    color: white;
    width:100%;
    font-family: Geneva, Tahoma, Verdana, sans-serif;
	font-size: 12px;
	font-style: normal;
	font-variant: normal;
	font-weight: 400;
    
    
}
.heading {
	margin: 15px;
    text-align: left;
    color: white;
    font-family: Geneva, Tahoma, Verdana, sans-serif;
	font-size: 24px;
	font-style: normal;
	font-variant: normal;
	font-weight: 400;
    
    
}
#head {
font-size: 14px;

}

.center {
    margin: margin: 0 auto;
    text-align: center;
}

.clickable {
         cursor: pointer;
 }
 
 .withpadding {
 
 	padding: 10px;
 
 }
 
 
.keypad {
  margin: margin: 0 auto;
  text-align: justify;
  font-size: 0.1px; /* IE 9 & 10 don't like font-size: 0; */
  /*border: 2px solid white;*/
  display:       inline-block;
}

.keypad label {
	background:    #999999;
	background:    -webkit-linear-gradient(#666666, #999999 50%, #666666);
	background:    linear-gradient(#666666, #999999 50%, #666666);
	border-radius: 3px;
	width: 		   15px;
	heigth:		   50px;
	padding:       10px 5px;
	color:         #ffffff;
	display:       inline-block;
	font:          normal 400 24px/1 "Calibri", sans-serif;
	text-align:    center;
	text-shadow:   none;
	margin : 4px;
}

.keypad:after {
  content: '';
  width: 100%; /* Ensures there are at least 2 lines of text, so justification works */
  display: inline-block;
}

#keydel, #keycap {
	font:          normal 400 20px/1 "Calibri", sans-serif;
	width: 		   32px;
	heigth:		   50px;
	background:    #ffffff;
	background:    -webkit-linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	background:    linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	color:         #000000;
}

#keyspace {

	width: 		   96px;
	heigth:		   50px;
	background:    #ffffff;
	background:    -webkit-linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	background:    linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	color:         #000000;
}

#keyenter {

	width: 		   76px;
	heigth:		   50px;
	background:    #ffffff;
	background:    -webkit-linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	background:    linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	color:         #000000;
}

#keyat {

	width: 		   36px;
	heigth:		   50px;

}


.switch {
	background:    #ffffff;
	background:    -webkit-linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	background:    linear-gradient(#cccccc, #ffffff 50%, #cccccc);
	border:        1px solid #7f6000;
	border-radius: 1000px;
	width:         100px;
	height:        49px;
	color:         #000000;
	display:       inline-block;
	font:          normal 400 15px/49px "Calibri", sans-serif;
	text-align:    center;
	text-shadow:   none;
	margin: 1px;	
}

JQuery Ajax File

JavaScript
var urlHome = "";
var imagesLoaded = 0;
var images = ["google", "youtube", "tunein", , "netflix", "amazonprime", "whatsapp", 
"invisible", "mouse"];

$(document).ready(function() {
	urlHome = window.location.href;
	if (urlHome.lastIndexOf("/") > 6) {
		urlHome = urlHome.substring(0, urlHome.lastIndexOf("/"));
	}

	loadImages();
	handleSizes()
	$( "#draggable" ).draggable();
	mousePosition()
	getSwitchBoards();
	
});

function loadImages() {
	$("#" + images[imagesLoaded]).attr("src", images[imagesLoaded] + ".png");
	imagesLoaded++;
	if (imagesLoaded < images.length) {
		setTimeout(loadImages, 300); 
	}

}

$( window ).resize(function() {
   handleSizes();
});

function handleSizes() {
	var css = "";
		
	css = "" + ($(window).innerWidth() * 0.009) + "px";
	$(".keypad label").css("margin", css)

}

function getSwitchBoards() {
	
	url = urlHome + "/?cmd=getSwitchBoards";

	$.ajax({
  		url: url,
  		dataType: "jsonp",
  		crossDomain : true,
  		success: function (data) {
  			app = JSON.stringify(data);
    		console.log(app);
    		
    		if (data.result.length > 0) {
    			var switchBoards = data.result.split("|");
    			for (var i = 0; i < switchBoards.length; ++i) {
    				var switchBoard = switchBoards[i];
    				var html = "<div class='block'>\n";
    				html += "<div class='center' style='margin-top:20px'>";
    				html += "<div class='heading'>" + switchBoard.split(",")[1] + "</div>";
    
					html += "<div>";
					html += "<label id='" + switchBoard.split(",")[0] + ":out1' class='switch clickable button'>" + switchBoard.split(",")[2].split(":")[0] + "</label>";
					html += "</div>";
					html += "<div>";
					html += "<label id='" + switchBoard.split(",")[0] + ":out2' class='switch clickable button'>" + switchBoard.split(",")[3].split(":")[0] + "</label>";
					html += "<label id='" + switchBoard.split(",")[0] + ":out3' class='switch clickable button'>" + switchBoard.split(",")[4].split(":")[0] + "</label>";
					html += "<label id='" + switchBoard.split(",")[0] + ":out4' class='switch clickable button'>" + switchBoard.split(",")[5].split(":")[0] + "</label>";
					html += "</div>";
					
					html += "<div>";
					html += "<label id='" + switchBoard.split(",")[0] + ":out5' class='switch clickable button'>" + switchBoard.split(",")[6].split(":")[0] + "</label>";

					
					html += "</div>";

					html += "</div>";
					html += "</div>";
					$("body").append(html);
    			
    			}
    		}
 
  		},
  		error: function( jqXHR, textStatus, errorThrown ) {
    		console.log(textStatus);
  		},
  		timeout: 5000
	});

}




$(document).on("click", ".button", function(event){
	
	url = urlHome + "/?cmd=" + event.target.id;

	$.ajax({
  		url: url,
  		dataType: "jsonp",
  		crossDomain : true,
  		success: function (data) {
  			app = JSON.stringify(data);
    		console.log(JSON.stringify(app));
    		/*
    		if (event.target.id === "showtatasky") {
    			window.location = urlHome + "/tatasky.html";
    		}
    		if (event.target.id === "showtv") {
    			window.location = urlHome;
    		}
    		if (app === '{"result":"web"}') {
    			window.location = urlHome + "/web.html";
    		}
    		*/
  		},
  		error: function( jqXHR, textStatus, errorThrown ) {
    		console.log(textStatus);
  		},
  		timeout: 5000
	});

});

$(document).on("click", ".key", function(event){
	
	var target = event.target || event.srcElement;

	var key = target.innerHTML;
	
	console.log(key);
	
	if (target.id == "keycap") {
		var alphas = document.getElementsByClassName("alpha");
		lowerCase = 1;
		if (alphas.item(0).innerHTML == "q") {
			lowerCase = 0;
		}
		for (var i = 0; i < alphas.length; i++) {
			var str = alphas.item(i).innerHTML;
			if (lowerCase == 0) {
   				alphas.item(i).innerHTML = str.toUpperCase();
   			} else {
   				alphas.item(i).innerHTML = str.toLowerCase();
   			}
		}
		return;
	} 
	
	if (target.id == "keyspace") {
		key = " ";
	} 
	
	if (target.id == "keydel") {
		key = "<<";
	}
	
	if (target.id == "keyenter") {
		key = ">>";
	}
	
	if (key == "_") {
		key = "us";
	}
	
	if (key == "&amp;") {
		key = "amp";
	}
	
	if (key == "%") {
		key = "per";
	}
	if (key == "^") {
		key = "carat";
	}
	if (key == "@") {
		key = "at";
	}
	
	if (key == "#") {
		key = "hash";
	}
	
	if (key == "{") {
		key = "curlleft";
	}
	if (key == "}") {
		key = "curlright";
	}
	if (key == "|") {
		key = "pipe";
	}
	if (key == "\\") {
		key = "backslash";
	}
	if (key == "&lt;") {
		key = "lt";
	}
	if (key == "&gt;") {
		key = "gt";
	}
	
	url = urlHome + "/?cmd=go";		
	url = url + "_" + key;

	$.ajax({
  		url: url,
  		dataType: "jsonp",
  		crossDomain : true,
  		success: function (data) {
  			app = JSON.stringify(data);
    		console.log(JSON.stringify(app));

  		},
  		error: function( jqXHR, textStatus, errorThrown ) {
    		console.log(textStatus);
  		},
  		timeout: 5000
	});

});



function mousePosition() {

	var position1 = $("#draggable").position();
	var position2 = $("#mouse").position();
	mouseHomeX = position1.left + position2.left;
	mouseHomeY = position1.top + position2.top;
	mouseX = mouseHomeX;
	mouseY = mouseHomeY;
	$("#draggable").css({position: "absolute", top: mouseHomeY, left: mouseHomeX});

}

/*$(document).on("touchmove", function (event) {
  if (event.scale !== 1) { event.preventDefault(); }
}, false);
*/
$(document).on("drag", "#draggable", function(){
	var offset = $(this).offset();

	
 
 	mouseX = offset.left - mouseX;
	mouseY = offset.top - mouseY;
	
	url = urlHome + "/?cmd=mouse_" + mouseX + "_" + mouseY;
	$.ajax({
  		url: url,
  		dataType: "jsonp",
  		crossDomain : true,
  		success: function (data) {
    		console.log(JSON.stringify(data));
  		},
  		error: function( jqXHR, textStatus, errorThrown ) {
    		console.log(textStatus);
  		},
  		timeout: 5000
	});
	
	mouseX = offset.left;
    mouseY = offset.top;
    
});
	
$(document).on("dragstop", "#draggable", function(){

	$("#draggable").css({top: mouseHomeY, left: mouseHomeX});
	mouseX = mouseHomeX;
	mouseY = mouseHomeY;

});

Server Socket Code

Java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;

import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class AlexaConnections {
	ServerSocket server;
	result users;

	private class sockets {
		private Socket client;
		OutputStream os;
		InputStream is;
		sockets(Socket client, String license, String deviceId) {
			this.client = client;
			try {
				os = client.getOutputStream();
				is = client.getInputStream();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}



		public boolean sendData(byte[] bytes) {
			boolean result = false;
			try {
				os.write(bytes);
				os.flush();
				result = true;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return result;
		}

		public void close() {
			try {
				System.out.println("Closing " + license);
				license = "";
				os.close();
				is.close();
				client.close();
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}

	}

	private class JSONHandler implements HttpHandler {

		@Override
		public void handle(HttpExchange exchange) throws IOException {
			call(exchange);
		}

		private synchronized void call(HttpExchange exchange) {
			System.out.println("Server received");
			new Thread(new JSONRunnable(exchange)).start();
		}

	}

	private class  JSONRunnable implements Runnable {

		protected HttpExchange exchange = null;

		public JSONRunnable(HttpExchange exchange) {
			this.exchange = exchange;
		}

		@Override
		public  void run() {

			try {
				String requestMethod = exchange.getRequestMethod();
				System.out.println(requestMethod);
				Headers responseHeaders = exchange.getResponseHeaders();

				OutputStream responseBody = exchange.getResponseBody();

				String uri = exchange.getRequestURI().toString();

				System.out.println(uri);

				String query = exchange.getRequestURI().getQuery();
				if (query == null) {
					exchange.sendResponseHeaders(200, 0);
					responseHeaders.set("Content-Type", "text/html");
					responseBody.write("OK".getBytes());
					responseBody.close();
					return;
				}
				System.out.println(query);
				processCommand(query);
				int i = query.indexOf("callback=");

				if (i >= 0) {


					i +=9;
					int j = query.indexOf("&", i);
					String callback = "";
					if (j > i) callback = query.substring(i, j);
					System.out.println(callback);



					exchange.sendResponseHeaders(200, 0);
					responseHeaders.set("Content-Type", "text/json");
					responseBody.write((callback + "({\"result\" : \"OK\"});").getBytes());
					responseBody.close();

				} else {
					exchange.sendResponseHeaders(200, 0);
					responseHeaders.set("Content-Type", "text/html");
					responseBody.write("OK".getBytes());
					responseBody.close();
				}


			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}

	private void processCommand(String query) {



		try {
			int i = query.indexOf("addrs=");
			int j = query.indexOf("&");
			if (j < i || i < 0) {
				return;
			}
			String addrs = query.substring(i+6, j);
			System.out.println(addrs + " " + addrs.length());
			i = query.indexOf("cmd=");
			if (i < j) return;
			String cmd = query.substring(i+4);
			System.out.println(cmd);
			for (j = 0; j < socketList.size(); ++j) {
				if (socketList.get(j).client.isClosed()) {
					continue;
				}


				System.out.println("Sending " + cmd
				if (!socketList.get(j).sendData(cmd.getBytes())) {
						socketList.get(j).close();
				}
				
				
			}

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

		}

	}

	ArrayList<sockets> socketList;
	AlexaConnections() {

		socketList = new ArrayList<sockets>();
		try {
			InetSocketAddress addr = new InetSocketAddress(12345);
			HttpServer httpserver = HttpServer.create(addr, 0);


			httpserver.createContext("/", new JSONHandler());

			httpserver.setExecutor(Executors.newCachedThreadPool());
			httpserver.start();
			System.out.println("HTTP Server is listening on port 12345");

			server = new ServerSocket(54321);
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		Timer timer = new Timer();
		timer.schedule(new TimerTask() {

			@Override
			public void run() {
				try {

					System.out.println("Waiting for connection");
					Socket client = server.accept();
					System.out.println("Connected From " + client.getRemoteSocketAddress().toString());
					client.setSoTimeout(5000);
					InputStream is = client.getInputStream();
					try {
						byte[] bytes = new byte[256];
						int numberOfBytes = is.read(bytes, 0, 256);
						System.out.println(numberOfBytes);
						if (numberOfBytes > 0) {
							String addrs = new String(bytes, 0, numberOfBytes);
							addrs = addrs.replaceAll("\r", "");
							addrs = addrs.replaceAll("\n", "");
							System.out.println(addrs);
							String deviceId = "";

							socketList.add(new sockets(client, addrs, deviceId));
							
						} else {
							client.close();
						}
					} catch (Exception e) {
						e.printStackTrace();
						try {
							System.out.println("Closing Connection");
							is.close();
							client.close();
						} catch (Exception ex) {
							ex.printStackTrace();
						}
					}

				} catch (Exception e) {
					e.printStackTrace();
				}

			}
		}, 500, 500);

		Timer statusTimer = new Timer();

		statusTimer.schedule(new TimerTask() {

			@Override
			public void run() {
				for (int j = 0; j < socketList.size(); ++j) {
					if (socketList.get(j).client.isClosed()) {
						continue;
					}

					try {
						byte[] bytes = new byte[64];
						socketList.get(j).os.write("OM".getBytes());
						int numberOfBytes = socketList.get(j).is.read(bytes);
						if (numberOfBytes > 0) {
							System.out.println("Received " + new String(bytes, 0, numberOfBytes);
						}
					} catch (SocketTimeoutException se) {
					} catch (Exception ex) {
						ex.printStackTrace();
						socketList.get(j).close();
					}
				}


			}
		}, 500, 60000);

	}




}

Arduino Code for Controlling The Motors

Arduino
#define OPEN 1
#define CLOSE 0

#define ENABLE_PIN1 2
#define DIR_PIN1 3
#define STEP_PIN1 4

#define ENABLE_PIN2 5
#define DIR_PIN2 6
#define STEP_PIN2 7


#define SIGNAL_PIN 8
#define LIMIT_PIN 9





String inputString = "";
boolean stringComplete = false;
unsigned long steps = 0;

int previousState = LOW;
int currentState = LOW;


void setup() {
  pinMode(STEP_PIN1, OUTPUT);
  pinMode(ENABLE_PIN1, OUTPUT);
  pinMode(DIR_PIN1, OUTPUT);

  pinMode(STEP_PIN2, OUTPUT);
  pinMode(ENABLE_PIN2, OUTPUT);
  pinMode(DIR_PIN2, OUTPUT);

  pinMode(SIGNAL_PIN, INPUT_PULLUP);
  pinMode(LIMIT_PIN, INPUT_PULLUP);

  digitalWrite(ENABLE_PIN1, HIGH);
  delay(100);
  digitalWrite(DIR_PIN1, HIGH);
  delay(100);
  digitalWrite(ENABLE_PIN1, HIGH);

  digitalWrite(ENABLE_PIN2, HIGH);
  delay(100);
  digitalWrite(DIR_PIN2, HIGH);
  delay(100);
  digitalWrite(ENABLE_PIN2, HIGH);



  previousState = digitalRead(SIGNAL_PIN);
  currentState = previousState;
  inputString.reserve(500);
  Serial.begin(9600);

  steps = 999999;

  
}

void loop() {
  
 if (stringComplete) {
    stringComplete = false;
    processString();
  }

  currentState = digitalRead(SIGNAL_PIN);

   if (currentState != previousState && currentState == HIGH){
        previousState = currentState;
        digitalWrite(ENABLE_PIN1, HIGH);
        delay(100);
        digitalWrite(DIR_PIN1, HIGH);
        delay(100);
        digitalWrite(ENABLE_PIN1, LOW);

        digitalWrite(ENABLE_PIN2, HIGH);
        delay(100);
        digitalWrite(DIR_PIN2, HIGH);
        delay(100);
        digitalWrite(ENABLE_PIN2, LOW);

        steps = 0;
   }

  if (currentState != previousState && currentState == LOW) {
        previousState = currentState;
        digitalWrite(ENABLE_PIN1, HIGH);
        delay(100);
        digitalWrite(DIR_PIN1, LOW);
        delay(100);
        digitalWrite(ENABLE_PIN1, LOW);

        digitalWrite(ENABLE_PIN2, HIGH);
        delay(100);
        digitalWrite(DIR_PIN2, LOW);
        delay(100);
        digitalWrite(ENABLE_PIN2, LOW);

        steps = 0;
  }
   
    if (steps < 55000) {
       ++steps;
      rotate();
    } else {
        digitalWrite(ENABLE_PIN1, HIGH);
        digitalWrite(ENABLE_PIN2, HIGH);

    }

    
}


void processString() {

     

     if (inputString.indexOf("UP") > 0) {
          digitalWrite(ENABLE_PIN1, HIGH);
          delay(100);
          digitalWrite(DIR_PIN1, HIGH);
          delay(100);
          digitalWrite(ENABLE_PIN1, LOW);

          digitalWrite(ENABLE_PIN2, HIGH);
          delay(100);
          digitalWrite(DIR_PIN2, HIGH);
          delay(100);
          digitalWrite(ENABLE_PIN2, LOW);

          
          steps = 0;
     }

     if (inputString.indexOf("DOWN") > 0) {
          digitalWrite(ENABLE_PIN1, HIGH);
          delay(100);
          digitalWrite(DIR_PIN1, LOW);
          delay(100);
          digitalWrite(ENABLE_PIN1, LOW);

          digitalWrite(ENABLE_PIN2, HIGH);
          delay(100);
          digitalWrite(DIR_PIN2, LOW);
          delay(100);
          digitalWrite(ENABLE_PIN2, LOW);

          steps = 0;
    }

     if (inputString.indexOf("STOP") > 0) {
          digitalWrite(ENABLE_PIN1, HIGH);
          digitalWrite(ENABLE_PIN2, HIGH);
          steps = 999999;

    }


     Serial.write(inputString.c_str());
     inputString = "";
}
  
  

void rotate() {

    if (digitalRead(LIMIT_PIN) == LOW && digitalRead(DIR_PIN1) == HIGH) {
        steps = 999999;
        return;
    }

    digitalWrite(STEP_PIN1, HIGH);
    digitalWrite(STEP_PIN2, HIGH);
    delayMicroseconds(150);

    digitalWrite(STEP_PIN1,LOW);
    digitalWrite(STEP_PIN2,LOW);
    delayMicroseconds(150);  
}

void serialEvent() {
  while (Serial.available()) {
    char inChar = (char) Serial.read();
    if (inChar == '$') {
      inputString = "$";
    } else {
      if (inputString.length() < 498) {
        inputString += inChar;
      }
    }
    if (inChar == '\n'  && inputString.startsWith("$")) {
      stringComplete = true;
    }

  }
}

Credits

cansysindia

cansysindia

1 project • 7 followers
Contact me on www.kamakshiclouds.in/iot and I will provide simple step by step instruction to create your own IOT solutions.

Comments