Go Down

Topic: Webbino - Server web "dinamico" per Arduino (Read 5476 times) previous topic - next topic

SukkoPera

#240
Jun 01, 2017, 03:17 pm Last Edit: Jun 01, 2017, 03:19 pm by SukkoPera
Hai ragione, quel #define non serve più a niente, lo elimino subito.

Quello che devi modificare è nel tuo sketch:

Code: [Select]
#define REP_BUFFER_LEN 32
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Salvatore765

#241
Jun 01, 2017, 03:44 pm Last Edit: Jun 01, 2017, 03:59 pm by Salvatore765
Ho due pezzi di codice uguali, uno lo avvia l'altro no..


Code: [Select]

#define LUCE_CUCINA_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"state\" value=\"SPEGNI\" #ST_OFF_CHK#/></form></td>"
#define LUCE_CUCINA_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"state\" value=\"ACCENDI\" #ST_ON_CHK#/></form></td>"



Quando premo Accendi non passa a HIGH, mentre quando premo Spegni passa tranquillamente a LOW


Risolto u.u

Salvatore765

#242
Jun 03, 2017, 02:04 pm Last Edit: Jun 05, 2017, 03:16 pm by Salvatore765
Come procedo se voglio aggiungere un pulsante fisico nell'impianto oltre il pulsante web?
Ho provato con uno switch case aggiungendo una nuova funzione in loop, però non sto avendo risultati

Lo sketch attuale: Pastebin

In Webbino_config.h:
Code: [Select]

#define LUCE_CUCINA_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s1\" value=\"SPEGNI\" /></form></td>"
#define LUCE_CUCINA_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s1\" value=\"ACCENDI\" /></form></td>"


Html: Pastebin

Un'idea?

Salvatore765

Per favore sono a -16gg dall'esame v.v

SukkoPera

Abbi pazienza, ma sono stato via qualche giorno. Qual è il problema preciso?
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Salvatore765

Abbi pazienza, ma sono stato via qualche giorno. Qual è il problema preciso?
Nessun problema, spero solo che il tempo mi basti per portare a termine la mia opera, magari poi pubblicarla qui nel forum per condividere la mia esperienza.

Devo poter gestire L'HIGH E il LOW anche da pulsante fisico e non solo virtuale come una normale accezione di un led, solo che in questo caso devo integrare il pulsante allo sketch che c'è già, cioè il controllo del led tramite web, sopra ho allegato l'attuale sketch con la prova che ho fatto di testa mia per l'HIGH e il LOW del led con sito e pulsante fisico nell'impianto

SukkoPera

#246
Jun 05, 2017, 11:17 pm Last Edit: Jun 05, 2017, 11:18 pm by SukkoPera
Non c'è nessun problema a fare una cosa del genere, è solo lo sketch che mi sembra un po' contorto. Prova a rifare la parte di lettura del pulsante seguendo gli esempi di Arduino Button, StateChangeDetection e Debounce.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Salvatore765

Non c'è nessun problema a fare una cosa del genere, è solo lo sketch che mi sembra un po' contorto. Prova a rifare la parte di lettura del pulsante seguendo gli esempi di Arduino Button, StateChangeDetection e Debounce.
Di una banalità assoluta, eppure ero perennemente bloccato
Piccola domanda per altre parti dello sketch, quando gestisco il cancello automatico dell'abitazione, una volta premuto un qualsiasi pulsante della pagina web (per accendere per esempio un led) il motore si blocca circa mezzo secondo/un secondo, credo che sia per il tempo d'attesa di trasmissione dati (?) c'è modo per rimuovere questa piccola pecca?

SukkoPera

Dipende da come gestisci il cancello, ma senza sketch è difficile dire di più. Se vuoi postarlo apri però un altro thread, non è una cosa strettamente attinente a Webbino, secondo me.
Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Salvatore765

#249
Jun 14, 2017, 12:10 pm Last Edit: Jun 14, 2017, 12:56 pm by Salvatore765
Dipende da come gestisci il cancello, ma senza sketch è difficile dire di più. Se vuoi postarlo apri però un altro thread, non è una cosa strettamente attinente a Webbino, secondo me.
Buon giorno, ho fatto varie prove, il problema sta in questa parte del codice.. i tag..

Code: [Select]

/******************************************************************************
 * DEFINITION OF TAGS                                                         *
 ******************************************************************************/

#define REP_BUFFER_LEN 184
char replaceBuffer[REP_BUFFER_LEN];
PString pBuffer (replaceBuffer, REP_BUFFER_LEN);

PString& eveluate_stato_luce_cucina (void *data __attribute__ ((unused))) {
  if (SLuceCucina) {
    pBuffer.print (LUCE_CUCINA_ON);
  }
  else {
    pBuffer.print (LUCE_CUCINA_OFF);
  }
  
  return pBuffer;
}

PString& eveluate_stato_luce_stanza (void *data __attribute__ ((unused))) {
  if (SLuceStanza) {
    pBuffer.print (LUCE_STANZA_ON);
  }
  else {
    pBuffer.print (LUCE_STANZA_OFF);
  }
  
  return pBuffer;
}

PString& eveluate_stato_luce_stanzetta (void *data __attribute__ ((unused))) {
  if (SLuceStanzetta) {
    pBuffer.print (LUCE_STANZETTA_ON);
  }
  else {
    pBuffer.print (LUCE_STANZETTA_OFF);
  }
  
  return pBuffer;
}

PString& eveluate_stato_luce_bagno (void *data __attribute__ ((unused))) {
  if (SLuceBagno) {
    pBuffer.print (LUCE_BAGNO_ON);
  }
  else {
    pBuffer.print (LUCE_BAGNO_OFF);
  }
  
  return pBuffer;
}

PString& eveluate_stato_luce_salotto (void *data __attribute__ ((unused))) {
  if (SLuceSalotto) {
    pBuffer.print (LUCE_SALOTTO_ON);
  }
  else {
    pBuffer.print (LUCE_SALOTTO_OFF);
  }
  
  return pBuffer;
}

PString& eveluate_stato_luce_corridoio (void *data __attribute__ ((unused))) {
  if (SLuceCorridoio) {
    pBuffer.print (LUCE_CORRIDOIO_ON);
  }
  else {
    pBuffer.print (LUCE_CORRIDOIO_OFF);
  }
  
  return pBuffer;
}

PString& eveluate_stato_luce_ingresso (void *data __attribute__ ((unused))) {
  if (SLuceIngresso) {
    pBuffer.print (LUCE_INGRESSO_ON);
  }
  else {
    pBuffer.print (LUCE_INGRESSO_OFF);
  }
  
  return pBuffer;
}

PString& eveluate_stato_luce_garage (void *data __attribute__ ((unused))) {
  if (SLuceGarage) {
    pBuffer.print (LUCE_GARAGE_ON);
  }
  else {
    pBuffer.print (LUCE_GARAGE_OFF);
  }
  
  return pBuffer;
}

PString& eveluate_stato_luce_generale (void *data __attribute__ ((unused))) {
    pBuffer.print (LUCE_GENERALE);

  return pBuffer;
}

PString& evaluate_checked_Canc (void *data __attribute__ ((unused))) {
    pBuffer.print (PULSANTE_CANCELLO);

  return pBuffer;
}

PString& evaluate_webbino_version (void *data __attribute__ ((unused))) {
  pBuffer.print (WEBBINO_VERSION);

  return pBuffer;
}

EasyReplacementTag (tagStateLuceCucina, STATO_LUCE_CUCINA, eveluate_stato_luce_cucina);
EasyReplacementTag (tagStateLuceStanza, STATO_LUCE_STANZA, eveluate_stato_luce_stanza);
EasyReplacementTag (tagStateLuceStanzetta, STATO_LUCE_STANZETTA, eveluate_stato_luce_stanzetta);
EasyReplacementTag (tagStateLuceBagno, STATO_LUCE_BAGNO, eveluate_stato_luce_bagno);
EasyReplacementTag (tagStateLuceSalotto, STATO_LUCE_SALOTTO, eveluate_stato_luce_salotto);
EasyReplacementTag (tagStateLuceCorridoio, STATO_LUCE_CORRIDOIO, eveluate_stato_luce_corridoio);
EasyReplacementTag (tagStateLuceIngresso, STATO_LUCE_INGRESSO, eveluate_stato_luce_ingresso);
EasyReplacementTag (tagStateLuceGarage, STATO_LUCE_GARAGE, eveluate_stato_luce_garage);
EasyReplacementTag (tagStateLuceGenerale, STATO_LUCE_GENERALE, eveluate_stato_luce_generale);
EasyReplacementTag (tagCancello, STATO_PULSANTE_CANCELLO, evaluate_checked_Canc);
EasyReplacementTag (tagWebbinoVer, WEBBINO_VER, evaluate_webbino_version);

EasyReplacementTagArray tags[] PROGMEM = {
  &tagStateLuceCucina,
  &tagStateLuceStanza,
  &tagStateLuceStanzetta,
  &tagStateLuceBagno,
  &tagStateLuceSalotto,
  &tagStateLuceCorridoio,
  &tagStateLuceIngresso,
  &tagStateLuceGarage,
  &tagStateLuceGenerale,
  &tagCancello,
  &tagWebbinoVer,
  NULL
};


Webbino_config.h

Code: [Select]


#define LUCE_CUCINA_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s1\" value=\"SPEGNI\" /></form></td>"
#define LUCE_CUCINA_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s1\" value=\"ACCENDI\" /></form></td>"
#define LUCE_STANZA_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s2\" value=\"SPEGNI\" /></form></td>"
#define LUCE_STANZA_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s2\" value=\"ACCENDI\" /></form></td>"
#define LUCE_STANZETTA_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s3\" value=\"SPEGNI\" /></form></td>"
#define LUCE_STANZETTA_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s3\" value=\"ACCENDI\" /></form></td>"
#define LUCE_BAGNO_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s4\" value=\"SPEGNI\" /></form></td>"
#define LUCE_BAGNO_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s4\" value=\"ACCENDI\" /></form></td>"
#define LUCE_SALOTTO_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s5\" value=\"SPEGNI\" /></form></td>"
#define LUCE_SALOTTO_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s5\" value=\"ACCENDI\" /></form></td>"
#define LUCE_CORRIDOIO_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s6\" value=\"SPEGNI\" /></form></td>"
#define LUCE_CORRIDOIO_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s6\" value=\"ACCENDI\" /></form></td>"
#define LUCE_INGRESSO_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s7\" value=\"SPEGNI\" /></form></td>"
#define LUCE_INGRESSO_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s7\" value=\"ACCENDI\" /></form></td>"
#define LUCE_GARAGE_ON "<td bgcolor=\"#00FF00\"><font color=\"#000000\">accesa</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s8\" value=\"SPEGNI\" /></form></td>"
#define LUCE_GARAGE_OFF "<td bgcolor=\"#FF0000\"><font color=\"#FFFFFF\">spenta</font></td><td><form method=\"get\"><input type=\"submit\" name=\"s8\" value=\"ACCENDI\" /></form></td>"
#define LUCE_GENERALE "<td><form method=\"get\"><input type=\"submit\" name=\"gen\" value=\"ACCENDI\" /></form></td><td><form method=\"get\"><input type=\"submit\" name=\"gen\" value=\"SPEGNI\" /></form></td>"
#define PULSANTE_CANCELLO "<form method=\"get\"><input type=\"submit\" name=\"cancello\" value=\"APRI CANCELLO\" /></form>"



Forse è stato scritto tutto male, ma quando elimino tutti i tag e lascio solo il tag della cucina riduco la memoria dinamica dal 60% al 32%!

Consigli?

il risultato è questo..
Youtube
Youtube

Ho aggiunto un secondo video dove a fianco della pagina di controllo c'è pure il monitor seriale con i relativi log, questo bug si presenta anche solo con un solo tag (il tag della luce cucina)

SukkoPera

#250
Jun 14, 2017, 03:24 pm Last Edit: Jun 14, 2017, 03:24 pm by SukkoPera
Sicuramente si potrebbe riscrivere "meglio", ad esempio usando un tag per il colore, visto che tutto il resto è identico, in molte delle stringhe sopra, però in realtà, se il tuo sketch è completo, usare il 60% di RAM non causa alcun problema. Sulla Mega questo vuol dire che ci sono ancora più di 1.6 kB liberi, che normalmente bastano e avanzano.

Comunque, una cosa che puoi fare velocemente e che dovrebbe farti risparmiare parecchia RAM è usare la macro F() in tutte quelle #define, tipo:
Code: [Select]
#define PULSANTE_CANCELLO F("<form method=\"get\"><input type=\"submit\" name=\"cancello\" value=\"APRI CANCELLO\" /></form>")


Make your Sega MegaDrive/Genesis region-free with Arduino! https://goo.gl/X7zBcq

Guida rapida a ESP8266: https://goo.gl/kzh62E

Salvatore765

#251
Jun 14, 2017, 03:30 pm Last Edit: Jun 14, 2017, 05:23 pm by Salvatore765
Sicuramente si potrebbe riscrivere "meglio", ad esempio usando un tag per il colore, visto che tutto il resto è identico, in molte delle stringhe sopra, però in realtà, se il tuo sketch è completo, usare il 60% di RAM non causa alcun problema. Sulla Mega questo vuol dire che ci sono ancora più di 1.6 kB liberi, che normalmente bastano e avanzano.

Comunque, una cosa che puoi fare velocemente e che dovrebbe farti risparmiare parecchia RAM è usare la macro F() in tutte quelle #define, tipo:
Code: [Select]
#define PULSANTE_CANCELLO F("<form method=\"get\"><input type=\"submit\" name=\"cancello\" value=\"APRI CANCELLO\" /></form>")



Se non è problema di ram, cosa causa quel problema di "finto" pulsante per accendere/spegnere le luci?


PS. ho risparmiato circa il 31% di memoria! wow.. 29% raggiunti

Ho rimosso la parte dell'illuminazione generale e del pulsante cancello, dato che non sono variabili posso metterli direttamente nell'html, mentre per i colori dello stato e i pulsanti delle illuminazioni non posso metterle in html, ma mandarle direttamente in html in base alla situazione, quindi riduco il REP_BUFFER_LEN  da 184 a 132, elimino tutto il codice in eccesso, continua a fare i brutti scherzi D:

Go Up