codigo para controlar luces desde servidor web [arduino]

Iniciado por gabrielmellace, 21 Noviembre 2012, 06:36 AM

0 Miembros y 1 Visitante están viendo este tema.

gabrielmellace

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 :D

[youtube=640,360]http://www.youtube.com/watch?v=n6vXTq7w8QQ&list=UUezyX5JqnJgP85JDucqkzBg&index=1&feature=plcp[/youtube]

R0BERT0

Buen codigo.
Como haces para conectarte al servidor web arduino remotamente?
Para hacer eso tal vez te sea interesante esta aplicacion.

Permite la conexión a tu servidor remotamente con ip dinámica con tan solo añadir unas lineas de código a tu proyecto

Puedes ver el proyecto en esta direccion.
http://excontrol.es/Domotica-Arduino/Arduino-WebServer/Default.aspx

Un saludo

mariooo

Hola me podrías ayudar, lo compilo y me tira  estos errores

sketch_may17b.ino:11:17: error: DHT.h: No such file or directory
sketch_may17b.ino: In function 'void setup()':
sketch_may17b:29: error: 'dht' was not declared in this scope
sketch_may17b.ino: In function 'float getTemperature()':
sketch_may17b:59: error: 'dht' was not declared in this scope
sketch_may17b.ino: In function 'float getHumidity()':
sketch_may17b:62: error: 'dht' was not declared in this scope

engel lex

este post es de hace 3 años, el usuario no publicó DHT.h y "void setup()" no se por qué te da error
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Hurdano

Para controlar el DHT11 o como se llame, que ahora no me aucerdo, necesitas agregar unas librerías especificas para él, por eso te tira ese error, porque no están instaladas, por lo que no lo reconoce y no sabe como trabajar con él.