Hola muchachos !!
Estuve preguntando varias cosas por el foro sobre wireless hacking y la verdad me sentia un poco mal de no aportar nada, por lo que les aporto este codigo que arme, sirve para controlar 2 (o mas, es muy facil tocarlo) luces desde un servidor web ubicado dentro de la plaqueta arduino con el shield ethernet, ademas, en el mismo sitio figura una lectura de humedad y temperatura.
Como feature adicional, le agregue que haga un handshake con los estados de los rele para que si hay mas de un cliente conectado y toca una luz, se actualize en tu vista.
Espero que a alguien le sirva !! saludos !
/*
Controlador de 2 luces bajo relees de negativo
Controla 2 luces estableciendo un servidor en la plaqueta y actualizando su estado por jquery.
Creado 28 Octubre. 2012
por Gabriel Mellace
*/
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#define DHTPIN 30
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192 ,168 ,1 ,102 };
byte gateway[] = { 192 ,168 ,1 ,1 };
byte subnet[] = { 255 ,255 ,255 ,0 };
EthernetServer server(80);
EthernetClient client;
String readString = String(30);
void setup(){
dht.begin();
Ethernet.begin(mac, ip, gateway, subnet);
delay(1000);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
digitalWrite(7, LOW);
Serial.begin(9600);
}
String checkState(int cual) {
if(digitalRead(cual)==HIGH) {
return "Apagado";
}
else {
return "Prendido";
}
}
String toogleState(int cual) {
if(digitalRead(cual)==HIGH) {
digitalWrite(cual, LOW);
return "Prendido";
}
else {
digitalWrite(cual,HIGH);
return "Apagado";
}
}
float getTemperature() {
return dht.readTemperature();
}
float getHumidity() {
return dht.readHumidity();
}
void loop(){
client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (readString.length() < 30)
{
readString = readString + c;
}
if (c == '\n') {
if(readString.indexOf("/main") >= 0) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("access-control-allow-origin: *");
client.println("Cache-Control: no-cache, must-revalidate");
client.println("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
client.println();
client.print("<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js\"></script>");
client.print("<style>");
client.print("body {");
client.print("background-color: #000000;");
client.print("}");
client.print("#contenedor {");
client.print("width:620px;");
client.print("margin:0 auto;");
client.print("background-color:#EDEDED;");
client.print("border-radius:10px;");
client.print("box-shadow: 0px 0px 15px white;");
client.print("border:1px solid #DBDBDB;");
client.print("}");
client.print("#header {");
client.print("width:600px;");
client.print("height:20px;");
client.print("border-bottom:2px solid white;");
client.print("border-radius:10px 10px 0px 0px;");
client.print("padding:20px 10px;");
client.print("}");
client.print("#titulo {");
client.print("width:160px;");
client.print("float:left;");
client.print("}");
client.print("#temperatura {");
client.print("width:115px;");
client.print("float:right;");
client.print("}");
client.print("#cuerpo {");
client.print("border-top:2px solid #CCCCCC;");
client.print("background-color:#F2F2F2;");
client.print("min-height:600px;");
client.print("border-radius:0px 0px 10px 10px;");
client.print("}");
client.print(".boton {");
client.print("width:120px;");
client.print("height:80px;");
client.print("border:1px solid #737373;");
client.print("text-align:center;");
client.print("padding-top:20px;");
client.print("border-radius:10px;");
client.print("margin:20px;");
client.print("float:left;");
client.print("}");
client.print(".boton:hover {");
client.print("background-color: #999999;");
client.print("color:white;");
client.print("cursor:pointer;");
client.print("}");
client.print("</style>");
client.print("<script type=\"text/javascript\">");
client.print("$(document).ready(function() {");
client.print("$('#viga').click(function() {");
client.print("$.get('http://192.168.1.102/?cambiar=1' , function(data) { ");
client.print("document.getElementById('vigaStatus').innerHTML = data");
client.print("});");
client.print("});");
client.print("$('#escritorio').click(function() {");
client.print("$.get('http://192.168.1.102/?cambiar=2' , function(data) { ");
client.print("document.getElementById('escritorioStatus').innerHTML = data");
client.print("});");
client.print("});");
client.print("});");
client.print("function actualizarViga() {");
client.print("$.get('http://192.168.1.102/?estado=1' , function(data) { ");
client.print("document.getElementById('vigaStatus').innerHTML = data");
client.print("});");
client.print("};");
client.print("setInterval(\"actualizarViga()\",9000);");
client.print("function actualizarEscritorio() {");
client.print("$.get('http://192.168.1.102/?estado=2' , function(data) { ");
client.print("document.getElementById('escritorioStatus').innerHTML = data");
client.print("});");
client.print("};");
client.print("setInterval(\"actualizarEscritorio()\",9000);");
client.print("function actualizarTemperaturaHumedad() {");
client.print("$.get('http://192.168.1.102/?temperatura' , function(data) { ");
client.print("document.getElementById('temperatura').innerHTML = data");
client.print("});");
client.print("};");
client.print("setInterval(\"actualizarTemperaturaHumedad()\",9000);");
client.print("</script>");
client.print("<div id=\"contenedor\">");
client.print("<div id=\"header\">");
client.print("<div id=\"titulo\">Control del cuarto</div>");
client.print("<div id=\"temperatura\">Leyendo informacion</div>");
client.print("</div>");
client.print("<div id=\"cuerpo\">");
client.print("<div id=\"viga\" class=\"boton\">");
client.print("<span id=\"vigaTitle\" >Viga</span>");
client.print("<br />");
client.print("<span id=\"vigaStatus\">Encendido</span>");
client.print("</div>");
client.print("<div id=\"escritorio\" class=\"boton\">");
client.print("<span id=\"escritorioTitle\">Escritorio</span>");
client.print("<br />");
client.print("<span id=\"escritorioStatus\">Encendido</span>");
client.print("</div>");
client.print("</div>");
client.print("</div>");
}
if(readString.indexOf("GET /?cambiar=1") >=0)
{
client.print(toogleState(7));
}
if(readString.indexOf("GET /?cambiar=2") >=0)
{
client.print(toogleState(8));
}
if(readString.indexOf("GET /?estado=1") >=0)
{
client.print(checkState(7));
}
if(readString.indexOf("GET /?estado=2") >=0)
{
client.print(checkState(8));
}
if(readString.indexOf("GET /?temperatura") >=0) {
client.print(getTemperature());
client.print(" ºC ");
client.print(getHumidity());
client.print(" % ");
}
readString="";
client.stop();
}
}
}
}
else {
client.stop();
}
}
/*
Controlador de 2 luces bajo relees de negativo
Controla 2 luces estableciendo un servidor en la plaqueta y actualizando su estado por jquery.
Creado 28 Octubre. 2012
por Gabriel Mellace
*/
dejo un videito para que lo vean