Simple Ethernet Remote
This was a real quick project. I attached a relay shield and 315Mhz remote relay switch to the Seeeduino Ethernet to make a Ethernet remote control for lights and projector.
Future case, a dead ups
–Found two different programs, one very simple, one quite involved. Since this system only does lights (not security) I went with the simple one.
–Even so, there were problems with
•Persistence, the gui did not read the state of the remote.
•Did not support 8 relays (since the boards only have 4)
–Used analog in as digital output
•Crashed after a couple of commands.
–Just allocated more
•Remote transmitter was not stable
–Used extra relay to power remote transmitter on and off
/* Web Server A simple web server that shows the value of the analog input pins. using an Arduino Wiznet Ethernet shield. Circuit: * Seeedino Ethernet created 18 Dec 2009 by David A. Mellis modified 4 Sep 2010 by Tom Igoe modified 20 Jan 2013 */ #include <SPI.h> #include <Ethernet.h> // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,0,177); // Initialize the Ethernet server library // with the IP address and port you want to use // (port 80 is default for HTTP): EthernetServer server(80); #define numPins 8 int pins[numPins+1] = { 4, 5, 6, 7,16,17,18,19,9}; int pinState[numPins+2] = {0}; char pinName[numPins][8]={ "Reset", "Lite 1", "Lite 2", "Lite 3", "R1", "R2", "P1", "Power" }; char line1[300]; void setup() { for (int i = 0; i < numPins+1; i++) { pinMode(pins[i], OUTPUT); } digitalWrite(pins[numPins],0); Serial.begin(9600); Ethernet.begin(mac, ip); server.begin(); Serial.println("initialization done."); } void loop() { EthernetClient client = server.available(); if (client) { while (client.connected()) { readHeader(client); if (! pageNameIs("/")) { client.stop(); return; } client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); // send the body client.println("<html><body>"); client.println("<h1>Output Pins</h1>"); client.println("<form method='GET'>"); setValuesFromParams(); setPinStates(); for (int i = 0; i < numPins; i++) { writeHTMLforPin(client, i); } client.println("<input type='submit' value='Update'/>"); client.println("</form>"); client.println("</body></html>"); client.stop(); } } } void writeHTMLforPin(EthernetClient client, int i) { client.print("<p>"); client.print(pinName[i]); // client.print(pins[i]); client.print("<select name='"); client.print(i); client.println("'>"); client.print("<option value='0'"); if (pinState[i] == 0) { client.print(" selected"); } client.println(">Off</option>"); client.print("<option value='1'"); if (pinState[i] == 1) { client.print(" selected"); } client.println(">On</option>"); client.println("</select></p>"); } void setPinStates() { for (int i = 0; i < numPins; i++) digitalWrite(pins[i], pinState[i]); digitalWrite(pins[numPins],1); delay(300); digitalWrite(pins[numPins],0); if((pinState[numPins-1])||(pinState[numPins-2])||(pinState[0])) { pinState[0]=0; pinState[numPins-1]=0; pinState[numPins-2]=0; delay(300); for (int i = 0; i < numPins; i++) digitalWrite(pins[i], pinState[i]); digitalWrite(pins[numPins],1); delay(300); digitalWrite(pins[numPins],0); } } void setValuesFromParams() { for (int i = 0; i < numPins; i++) { pinState[i] = valueOfParam(i + '0'); } } void readHeader(EthernetClient client) { // read first line of header char ch; int i = 0; while (ch != '\n') { if (client.available()) { ch = client.read(); line1[i] = ch; i ++; } } line1[i] = '\0'; Serial.println(line1); } boolean pageNameIs(char* name) { // page name starts at char pos 4 // ends with space int i = 4; char ch = line1[i]; while (ch != ' ' && ch != '\n' && ch != '?') { if (name[i-4] != line1[i]) { return false; } i++; ch = line1[i]; } return true; } int valueOfParam(char param) { for (int i = 0; i < strlen(line1); i++) { if (line1[i] == param && line1[i+1] == '=') { return (line1[i+2] - '0'); } } return pinState[param-'0']; }