aiuto su web server

Buongiorno a tutti ho un arduino 2560 e uso ide 1.6.5 con queste liberie:
#include “Plafo.h”
#include <RTClib.h>
#include <Time.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <PCF8574_HD44780_I2C.h>
#include <DS3232RTC.h>
#include <RTClib.h>
#include <SPI.h>
#include <Ethernet.h>
#include <String.h>

vorrei comandare dei dispositivi dal web. ho provato a caricare questo sketch :

ma il dispositivo si spegne per 10 secondi poi riparte da solo, io vorrei che si spegnesse 10 minuti e poi riparta da solo e quindi ho dovuto metterlo come commento, vorrei una mano a capire come fare grazie a tutti

sketch_prova_classe_con_web.ino (8.55 KB)

Buongiorno sono riuscito a trovare qualcosa per far accendere e spegnere la pompa a mio piacimento ma non trovo nulla per farla spegnere e farli fare un condown qualcuno mi aiuta gentilmente?

prova_classe.ino (8.58 KB)

Per spegnerla devi tirar via la spina o usare il comando contrario a quello che l'accende.

pablos:
Per spegnerla devi tirar via la spina o usare il comando contrario a quello che l'accende.

Buona sera Pablos ho usato un tuo sketch per farlo e riesco a spegnerla ed accenderla, ma stranamente se li clicco on si spegne invece off spegne, ho pure provato ad invertire ma niente non va cmq, a me servirebbe che si spenga per 10 minuti e poi riparta d'asola come dovrei fare?

Buonasera Marco.
Ma, io sinceramente con tutte quelle librerie ho avuto paura ad aprire lo sketch, che comunque non potrei testare,

metti da parte questo sketch con tutti gli accessori vari e fai solo la parte web, specifica sempre che arduino hai, scheda ethernet, versione ide e l'interfaccia relè che usi, perfezionala e poi aggiungi le altre parti, ogni volta che trovi un problema ritorna allo sketch precedente
Usa la funzione (F) nei print

pablos:
Metti da parte questo sketch con tutti gli accessori vari e fai solo la parte web, specifica sempre che arduino hai, scheda ethernet, versione ide e l'interfaccia relè che usi, perfezionala e poi aggiungi le altre parti, ogni volta che trovi un problema ritorna allo sketch precedente

Ecco, questa andrebbe incorniciata e messa in un punto sempre visibile ... e dico sul serio !

Quasi tutti arrivano con dei programmi incasinatissimi, in cui non si capisce nulla ed in cui trovare il problema diventa praticamnete impossibile ... se seguissero queste semplici regole si semplificherebbero la vita e permetterebbero una più semplice diagnostica dei problemi !

Guglielmo

P.S.: Intanto me la copio così poi me la rivendo :wink:

Buona sera ho arduino 2560 r3 ide 1.6.5, ho una wiznet 5100 l'originale uso dei rele a 8 con fotooppositori ecco link dei relè http://www.ebay.it/itm/like/331644135222?lpid=96&chn=ps.

il mio primo problema è la visione via web nel senso quando il dispositivo e acceso segna off nel web server e viceversa e per spegnerlo devo andare su on, quindi se fossi fuori non saprei se è acceso o spento il dispositivo

Veramente l'aveva detto nella prima riga una parte di cose :slight_smile: , scusa l'ho visto ora.
Marco, fammi vedere dove l'hai preso quello, ho idea che sia roba un po' vecchiotta e tra l'altro usa un GET che resta nella barra degli indirizzi, se non vedo male non ha un auto refresh

eccolo pablos questo è il tuo sketch che ho trovato su google

#include <SPI.h>
#include <Ethernet.h> 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168,1, 3 };
EthernetServer server(80);
String readString;
byte out_1 = 40;
byte out_2 = 41;
byte out_3 = 42;
byte out_4 = 43;
byte out_5 = 44;

void setup()
{ 
 Ethernet.begin(mac, ip);
 pinMode(out_1, OUTPUT);
 pinMode(out_2, OUTPUT);
 pinMode(out_3, OUTPUT); 
 pinMode(out_4, OUTPUT);
 pinMode(out_5, OUTPUT);    
// Serial.begin(9600);           
}

void loop(){

EthernetClient  client = server.available();

 if (client) {
   boolean currentLineIsBlank = true;
  
   while (client.connected()) {
     if (client.available()) { 
       char c = client.read();
       readString.concat(c);   
       if (c == '\n' && currentLineIsBlank) {
         //Serial.print(readString);
              
       if(readString.indexOf("on_1") > 0) digitalWrite(out_1, HIGH);        
       if(readString.indexOf("off_1") > 0) digitalWrite(out_1, LOW);          
       if(readString.indexOf("on_2") > 0) digitalWrite(out_2, HIGH);        
       if(readString.indexOf("off_2") > 0) digitalWrite(out_2, LOW);          
       if(readString.indexOf("on_3") > 0) digitalWrite(out_3, HIGH);        
       if(readString.indexOf("off_3") > 0) digitalWrite(out_3, LOW); 
       if(readString.indexOf("on_4") > 0) digitalWrite(out_4, HIGH);        
       if(readString.indexOf("off_4") > 0) digitalWrite(out_4, LOW);
       if(readString.indexOf("on_5") > 0) digitalWrite(out_5, HIGH);        
       if(readString.indexOf("off_5") > 0) digitalWrite(out_5, LOW);
        
       //  PAGINA HTML      
       client.println("HTTP/1.1 200 OK");
       client.println("Content-Type: text/html");
       client.println();
       client.print("<html><head><title>ARDUINO Controllo WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>");
       client.print("

");
      
       client.print("<span>STATO LUCE 1 </span>");
       if (digitalRead(out_1)== true) client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>");  
       else client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>");
       client.print("<p><p/>");   
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_1'\">");
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_1'\">");                   
       client.print("<p><p/>");
       
       client.print("<span>STATO LUCE 2 </span>");       
       if (digitalRead(out_2)== true) client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>");  
       else client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>");       
       client.print("<p><p/>"); 
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_2'\">");
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_2'\">");
       client.print("<p><p/>");
       
       client.print("<span>STATO LUCE 3 </span>");
       if (digitalRead(out_3)== true) client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>");  
       else client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>");
       client.print("<p><p/>");
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_3'\">");
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_3'\">");        
       client.print("<p><p/>");
       
       client.print("<span>STATO LUCE 4 </span>");
       if (digitalRead(out_4)== true) client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>");  
       else client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>");
       client.print("<p><p/>");
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_4'\">");
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_4'\">");        
       client.print("<p><p/>");
       
       client.print("<span>STATO LUCE 5 </span>");
       if (digitalRead(out_5)== true) client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>");  
       else client.print("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>");
       client.print("<p><p/>");
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_5'\">");
       client.print("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_5'\">");
       client.println("</body></html>");
        
       readString="";
       
       delay(1);
       client.flush();
       client.stop(); 
       }
     }
   }
 }
}

Si me lo ricordo, era uno dei primi esperimenti 2011, l’ho modificato per corretteza, in modo che:

  • faccia l’autorefresh ogni 4 sec, ma che non mantenga nella barra degli indirizzi il GET del tasto che hai premuto, altrimenti a ogni refresh manderebbe sempre l’utimo comando GET, il risultato sarebbe, da pag web accendi relè, arduino spegne a una certa ora e poi il refresh web lo riaccende.

fai attenzione a questa linea

client.println(F("<META HTTP-EQUIV=REFRESH CONTENT=4;url=http://192.168.2.177/>"));

l’ip deve essere lo stesso della ethernet.

  • ho aggiunto
pinMode(10, OUTPUT);
 pinMode(4, OUTPUT);
  digitalWrite(10, 1);
   digitalWrite(4, 1);

visto che hai la mega

  • ho aggiunto la funzione (F)

  • ho tolto le inutili verifiche dell’ if client connected ecc ecc

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168,2, 177 };
EthernetServer server(80);

byte out_1 = 40;
byte out_2 = 41;
byte out_3 = 42;
byte out_4 = 43;
byte out_5 = 44;

void setup()
{
 pinMode(10, OUTPUT);
 pinMode(4, OUTPUT);
  digitalWrite(10, 1);
   digitalWrite(4, 1);
 pinMode(out_1, OUTPUT);
 pinMode(out_2, OUTPUT);
 pinMode(out_3, OUTPUT);
 pinMode(out_4, OUTPUT);
 pinMode(out_5, OUTPUT);   
// Serial.begin(9600); 
Ethernet.begin(mac, ip);          
}

void loop(){

EthernetClient  client = server.available();
String readstring;
 int16_t c;
 if (client) {
  // boolean currentLineIsBlank = true;
 
   while (client.available()) { 
        while ((c = client.read())>0){
          //Serial.print((char)c); //debug
           readstring += (char)c;          
          // if((char)c=='\n') readstring="";             
       }    
             
       if(readstring.indexOf("on_1") > 0) digitalWrite(out_1, HIGH);       
       if(readstring.indexOf("off_1") > 0) digitalWrite(out_1, LOW);         
       if(readstring.indexOf("on_2") > 0) digitalWrite(out_2, HIGH);       
       if(readstring.indexOf("off_2") > 0) digitalWrite(out_2, LOW);         
       if(readstring.indexOf("on_3") > 0) digitalWrite(out_3, HIGH);       
       if(readstring.indexOf("off_3") > 0) digitalWrite(out_3, LOW);
       if(readstring.indexOf("on_4") > 0) digitalWrite(out_4, HIGH);       
       if(readstring.indexOf("off_4") > 0) digitalWrite(out_4, LOW);
       if(readstring.indexOf("on_5") > 0) digitalWrite(out_5, HIGH);       
       if(readstring.indexOf("off_5") > 0) digitalWrite(out_5, LOW);
       
       //  PAGINA HTML     
       client.println(F("HTTP/1.1 200 OK"));
       client.println(F("Content-Type: text/html"));
       client.println();
       client.print(F("<html><head><title>ARDUINO Controllo WEB</title><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' ></head><body>"));
       client.println(F("<META HTTP-EQUIV=REFRESH CONTENT=4;url=http://192.168.2.177/>"));
       client.print(F("

"));
     
       client.print(F("<span>STATO LUCE 1 </span>"));
       if (digitalRead(out_1)== true) client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>")); 
       else client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>"));
       client.print(F("<p><p/>"));   
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_1'\">"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_1'\">"));                   
       client.print(F("<p><p/>"));
       
       client.print(F("<span>STATO LUCE 2 </span>"));       
       if (digitalRead(out_2)== true) client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>")); 
       else client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>"));       
       client.print(F("<p><p/>"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_2'\">"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_2'\">"));
       client.print(F("<p><p/>"));
       
       client.print(F("<span>STATO LUCE 3 </span>"));
       if (digitalRead(out_3)== true) client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>")); 
       else client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>"));
       client.print(F("<p><p/>"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_3'\">"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_3'\">"));       
       client.print(F("<p><p/>"));
       
       client.print(F("<span>STATO LUCE 4 </span>"));
       if (digitalRead(out_4)== true) client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>")); 
       else client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>"));
       client.print(F("<p><p/>"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_4'\">"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_4'\">"));       
       client.print(F("<p><p/>"));
       
       client.print(F("<span>STATO LUCE 5 </span>"));
       if (digitalRead(out_5)== true) client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"ON\" STYLE=\"background-color:#00FF00\"/>")); 
       else client.print(F("<input disabled=\"disabled\" maxLength=\"50\" size=\"12\" value=\"OFF\" STYLE=\"background-color:#C0C0C0\"/>"));
       client.print(F("<p><p/>"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"On\" onclick =\" location.href='/?on_5'\">"));
       client.print(F("<input type=\"button\" style=\"width:120px; height:80px\" value=\"Off\" onclick =\" location.href='/?off_5'\">"));
       client.println(F("</body></html>"));
       
       readstring="";
       
       delay(1);
       client.flush();
       client.stop();
       }
     }
 }

togli i pezzi che non ti servono, provalo e una volta che confermi il corretto funzionamento vai ad aggiungere i vari blocchi di codice… sensori … ecc

Questo sketch era stato modificato e semplificato ulteriormente, inserendo un solo blocco in un for facendolo ripetere 5 volte per 5 tasti (visto che sono blocchi di codice ripetitivi con spreco di ram), ma se a te serve un button solo praticamente togli quasi tutto

gpb01:
Ecco, questa andrebbe incorniciata e messa in un punto sempre visibile ... e dico sul serio !

P.S.: Intanto me la copio così poi me la rivendo :wink:

Magari senza 'interfaccia relè che usi', se no pare che tutti la hanno :smiley: Non ho resistito :grin:

As_Needed:
Magari senza 'interfaccia relè che usi', se no pare che tutti la hanno :smiley: Non ho resistito :grin:

Se non tutti ... ce l'ha il 90% di quelli che sul forum scrivono :smiling_imp:

Guglielmo

Buongiorno pablos ho provato il tuo sketch ma da lo stesso problema se la pompa e spenta dice che è on e viceversa, in più quando clicco su off o on poi la pagina scade e se refresho non va cmq

Guarda, quello sketch con i led funziona, non è che l'accensione della pompa resetta arduino incasinandolo?

questo non telo so dire come lo posso capire?
cmq ho impostato gli orari delle varie pompe e la pompaR non si accende quando si deve ma si riesce e spegnere dal web allego la libreria plafo che uso per accensione pompe e led

//Channel,startHour,startMinute,endHour,endMinute,fadeLen,maxPWM,pin
 plafo.setChannel(red,9,40,21,40,0,70,2);//Dalle  alba/tramonto 60 minuti, pwm massimo 100, pin 6  
 plafo.setChannel(gren,9,40,21,40,0,70,3);//Dalle , alba/tramonto 60 minuti
 plafo.setChannel(blue,9,50,21,30,0,70,4);//Dalle 6.40 alle 21.00 
 plafo.setChannel(white,10,00,21,30,0,70,5);//Dalle 6.30 alle 21.10
 plafo.setChannel(uv,10,00,21,30,0,70,6); //Dalle 21.40 alle 23.59 luce lunare
 plafo.setChannel(pompa,9,20,15,30,0,HIGH,43);//Dalle 9.20 alle 15.30
 plafo.setChannel(pompa1,21,30,03,30,0,HIGH,43);//Dalle 21.30 alle 03.30
 plafo.setChannel(pompan,15,20,21,30,0,HIGH,49); // accensione pompa notturna Dalle 15,30 alle 21.30
 plafo.setChannel(pompano,03,30,9,20,0,HIGH,49); // accensione pompa notturna Dalle 03,30 alle 9.30
 plafo.setChannel(pompaR,21,30,9,30,0,HIGH,41);//Dalle 21.30 alle 03.30


]

Plafo.h (925 Bytes)

Aggiungi un

Serial.begin(9600);
Serial.println("Webserver ready");

nel setup, fai girare lo sketch col monitor seriale aperto, fai scattare la pompa e tieni sempre aperto il monitor, anche in background, la scritta deve apparire una volta sola all'accensione, se appare più volte non va bene.

esce solo una volta vedo quindi? in più dopo che clicco scade la pagina

prova_classeweb_pompa_prova.ino (10.5 KB)

 digitalWrite(13, HIGH);       
 delay(800);
 digitalWrite(13, LOW);

i pin 10 - 11 - 12 - 13 sono riservati alla bus SPI sia sulla UNO che sulla MEGA, sulla MEGA sono una copia dei 50 - 51 - 52 - 53 non vanno occupati

quello è per il ph cosi melo dava lo sketch di df robot

cosi melo dava lo sketch di df robot

eh? chi è df robot? un tuo amico?