Foro de elhacker.net

Informática => Electrónica => Mensaje iniciado por: gabrielmellace en 21 Noviembre 2012, 06:36 am



Título: codigo para controlar luces desde servidor web [arduino]
Publicado por: gabrielmellace en 21 Noviembre 2012, 06:36 am
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

n6vXTq7w8QQ


Título: Re: codigo para controlar luces desde servidor web [arduino]
Publicado por: R0BERT0 en 19 Agosto 2013, 18:57 pm
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


Título: Re: codigo para controlar luces desde servidor web [arduino]
Publicado por: mariooo en 18 Mayo 2015, 00:57 am
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
 


Título: Re: codigo para controlar luces desde servidor web [arduino]
Publicado por: engel lex en 18 Mayo 2015, 07:50 am
este post es de hace 3 años, el usuario no publicó DHT.h y "void setup()" no se por qué te da error


Título: Re: codigo para controlar luces desde servidor web [arduino]
Publicado por: Hurdano en 18 Mayo 2015, 10:24 am
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.