Go Down

Topic: Come inviare i dati da ARDUINO ad una pagina HTML  (Read 26190 times) previous topic - next topic

pablos71

Purtroppo le lib create e parte modificate non le ho più....  Il mio WIN 7 è stato aggiornato nella notte in automatico a WIN 10 che ho rifiutato per 6 mesi...  La mia cartella Windows. Old è stata sovrascitta dal vecchio WIN 7 perdendo praticamente tutto...  La pigrizia di non fare i backup  :smiley-confuse: quindi potrei ricostruire tutto...  Ma due anni di nottate di nuovo mi girano i Ball
L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

SukkoPera

#46
Oct 18, 2016, 03:29 pm Last Edit: Oct 18, 2016, 03:31 pm by SukkoPera
Grazie di tutto il lavoro @gpb01, ma a questo punto se mi facevi una pull request direttamente su GitHub era più comodo :D. L'integrazione dovrà aspettare un po' però, visto che l'SSD del mio MacBook ha pensato bene di abbandonarmi, ovviamente poco dopo la scadenza della garanzia >:(. E pensare che compravo solo hardware Apple, nonostante sia un Linuxista, perché mi sembrava di maggiore qualità... :-X

In ogni caso integrerò "ciecamente", non avendo un Ethernet Shield 2 con cui testare, al momento.

@pablos: almeno alcune delle cose che proponi sarebbero sicuramente utili, tuttavia mi sembrano troppo specializzate e particolari per quello che in fondo non potrà mai essere un webserver "heavy duty" per le già citate limitazioni hardware. Se hai davvero tutte quelle necessità, a mio avviso non ha senso usare un Arduino: un Raspi con Apache/lighttpd ed ssh/sftp avrebbe più senso. Alcune delle cose che citi sarebbe poi più appropriato farle ad altri livelli (ad esempio il filtraggio MAC/IP dal router/firewall) e altre non mi sembrano di pertinenza di un server (Download?). Della fattibilità di alcune poi dubito perché richiedono un accesso "profondo" alla scheda Ethernet, che non so se l'attuale libreria permette. Comunque rinnovo l'invito: i sorgenti sono lì, sentiti libero di modificarli e aggiungere qualcuna di queste cose ;).

Non ho però capito il tuo ultimo post? Di quali librerie parli?
"Code is read much more often than it is written, so plan accordingly. Design for readability."

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

gpb01

... a questo punto se mi facevi una pull request direttamente su GitHub era più comodo ...
Ammetto la mia somma ignoranza nell'uso di GitHub ...  :smiley-lol:

Guglielmo
Search is Your friend ... or I am Your enemy !

SukkoPera

"Code is read much more often than it is written, so plan accordingly. Design for readability."

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

As_Needed

MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

gpb01

Search is Your friend ... or I am Your enemy !

As_Needed

#51
Oct 18, 2016, 04:34 pm Last Edit: Oct 18, 2016, 04:37 pm by As_Needed
NO, ma non uso GitHub ... ;D

Guglielmo   
:D :D :D

Ah, per Tototer, che se no si ingarbuglia con tutti questi messaggi: il messaggio riferito a te è nella  pagina precedente, la 3 post #43
MY PWS!
http://forum.arduino.cc/index.php?topic=413560.0
http://meteoflaminia.zapto.org:4600

pablos71

Quote
Non ho però capito il tuo ultimo post? Di quali librerie parli?
il mio lavoro, comprendevano una 30ina di lib dell'ide modificate e allegerite + una webserver

Quote
Alcune delle cose che citi sarebbe poi più appropriato farle ad altri livelli (ad esempio il filtraggio MAC/IP dal router/firewall)
su questo ti posso aiutare se vuoi e le puoi implementare nella tua, si tratta di usare la w5100.h o 5500.h che gestisce 8 soket invece di 4, facendosi restituire dei parametri scritti sulla sua ram, praticamente sono uguali.

Quote
Se hai davvero tutte quelle necessità, a mio avviso non ha senso usare un Arduino: un Raspi con Apache/lighttpd ed ssh/sftp avrebbe più senso.
Si vero, ma montato su una piattaforma semplice e alla portata di tutti che non compromettesse comunque quel piccolo micro spremuto.

Tu prendi ad esempio: arduino con un webserver in linea che fa il polling di 10 pin, ora premi un pulsante in 10 ms per 10 volte di seguito e dimmi su web quante volte leggi la pressione del tasto. Te lo dico subito 4, 6 premute le perdi con le lib fornite dall'IDE. Io ne leggevo 64 in 10ms con soli 8 byte e senza negoziazioni tra client e server.

Il progetto nasce dalle ripetute richieste del forum e da esperienze in campo, con oggetti comprati e installati molto costosi e più lenti di arduino con IN e OUT fissi non programmabili a piacere, con software forzato dato dalla casa non modificabile, programmazione dei parametri limitati a poche righe, ecco perchè l'esigenza di una cosa semplice intuitiva fatta col semplice mouse e tastiera senza intervenire sullo sketch.
Inserire una password nel web server anche se non possiamo avere un https è molto richiesto, in ogni caso tutto sta nel far fare al browser la maggior parte del lavoro pesante.

NO, ma non uso GitHub ... ;D
Nemmeno io uso  GitHub non saprei nemmeno da dove cominciare :), probabilmente perchè non mi interessa, c'era Lesto di questo forum che era molto bravo, abbiamo lavorato insieme diverse nottate su alcuni sketch online tramite doc condivisi con google drive e il suo GitHub.

Anche se non ho condiviso il pacchetto intero, nei miei 5000 post c'è tutto, non fornisco il pacchetto intero e mai lo farò perchè non mi piacciono i copia e incolla.


L'esperienza è il tipo di insegnante più difficile ....
Prima ti fa l'esame e poi ti spiega la lezione.

SukkoPera

#53
Oct 18, 2016, 05:35 pm Last Edit: Oct 18, 2016, 05:37 pm by SukkoPera
Tu prendi ad esempio: arduino con un webserver in linea che fa il polling di 10 pin, ora premi un pulsante in 10 ms per 10 volte di seguito e dimmi su web quante volte leggi la pressione del tasto. Te lo dico subito 4, 6 premute le perdi con le lib fornite dall'IDE. Io ne leggevo 64 in 10ms con soli 8 byte e senza negoziazioni tra client e server.
Beh, a parte che dubito che i miei occhi siano così rapidi da vedere 10 update di una pagina web in 10 ms, ci credo, ma questa non è una feature che reputo di interesse generale, sembra più una necessità tua specifica. Webbino è pensato per facilitare la creazione di pagine semi-statiche con qualche dato che varia lentamente. Non prevede alcun meccanismo di refresh di una parte di una pagina, se vuoi aggiornare i dati devi refreshare la pagina intera.

Inserire una password nel web server anche se non possiamo avere un https è molto richiesto, in ogni caso tutto sta nel far fare al browser la maggior parte del lavoro pesante.
Questa invece è una cosa che si potrebbe implementare, anche se ho paura che possa generare un senso di falsa sicurezza. Mi spiego: il mio caso d'uso ideale è che un eventuale webserver che gira su Arduino rimane chiuso all'interno di una rete privata a mio utilizzo esclusivo; quando serve ci entro in VPN e mi ci collego. Mi piacerebbe che tutti lo usassero così, ma come già fa @As_Needed, alcuni potrebbero volerlo tenere esposto su Internet, e avere la possibilità di settare una password potrebbe spingere molti a farlo davvero, cosa che non sono sicuro di volere, perché è sbagliata in partenza, visto che ovviamente un webserver che può gestire un massimo di 4 connessioni si DoSsa in un attimo. Non so, sono combattuto, ci penserò.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

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

5a2v0

Se posso aggiungere un'idea per la Ethernet2 (visto che ormai in questa discussione si parla di questo) :)

Per i miei interessi ho modificato la lib Etherneth per aggiungere la possibilità di dichiarare la porta tcp da utilizzare anziché a inizio sketch (che poi non si può più cambiare) in fase del void setup (così da poter usare variabili come porta tcp e permettere all'utente di cambiare via software la porta scelta senza cambiare lo sketch)

Premetto che quando ho tentato la modifica, il tutto è riuscito grazie a Sukkopera, ho fatto diverso tempo fa la pull request sul github di arduino che poi è stata spostata nel ramo della libreria ethernet.

Ancora non è stata convalidata ma vorrei precisare che è retrocompatibile e che offre solo una alternativa in più senza nulla togliere a quanto esistente.

Suggerisco integrazione della modifica anche nella Ethernet2... che ne pensate?



LINK su github

gpb01

La Ethernet2 è una libreria ufficiale sviluppata da Arduino.org ed inclusa nel loro IDE visto che loro commercializzano la nuova Ethernet Shield basata su W5500.

Se vuoi far fare una modifica, è a loro che lo devi chiedere, NON a me, che mi sono limitato dal prenderla dal loro IDE 1.7.11 

Guglielmo
Search is Your friend ... or I am Your enemy !

tototer

#56
Oct 19, 2016, 10:27 am Last Edit: Oct 19, 2016, 10:35 am by tototer
dopo avere fatto tutti i passaggi come da voi indicati

quando provo a compilare il seguente sketch

Code: [Select]
#include <Webbino.h>
#include <avr/pgmspace.h>

#define SD_SS 4
WebServer webserver;

#include <WebServer_WIZ5100.h>
NetworkInterfaceWIZ5100 netint;
EthernetServer server(80);

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

#define REP_BUFFER_LEN 32
static char replaceBuffer[REP_BUFFER_LEN];
PString subBuffer (replaceBuffer, REP_BUFFER_LEN);

static PString& evaluate_ip (void *data __attribute__ ((unused))) {
  subBuffer.print (netint.getIP ());

  return subBuffer;
}

static PString& evaluate_netmask (void *data __attribute__ ((unused))) {
  subBuffer.print (netint.getNetmask ());

  return subBuffer;
}

static PString& evaluate_gw (void *data __attribute__ ((unused))) {
  subBuffer.print (netint.getGateway ());

  return subBuffer;
}

static PString& evaluate_mac_addr (void *data __attribute__ ((unused))) {
  const byte *buf = netint.getMAC ();

  for (byte i = 0; i < 6; i++) {
    if (buf[i] < 16)
      subBuffer.print ('0');
    subBuffer.print (buf[i], HEX);

    if (i < 5)
      subBuffer.print (':');
  }

  return subBuffer;
}

static PString& evaluate_ip_src (void *data __attribute__ ((unused))) {
  if (netint.usingDHCP ())
    subBuffer.print (F("DHCP"));
  else
    subBuffer.print (F("MANUAL"));

  return subBuffer;
}

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

  return subBuffer;
}

static PString& evaluate_uptime (void *data __attribute__ ((unused))) {
  unsigned long uptime = millis () / 1000;
  byte d, h, m, s;

  d = uptime / 86400;
  uptime %= 86400;
  h = uptime / 3600;
  uptime %= 3600;
  m = uptime / 60;
  uptime %= 60;
  s = uptime;

  if (d > 0) {
    subBuffer.print (d);
    subBuffer.print (d == 1 ? F(" day, ") : F(" days, "));
  }

  if (h < 10)
    subBuffer.print ('0');
  subBuffer.print (h);
  subBuffer.print (':');
  if (m < 10)
    subBuffer.print ('0');
  subBuffer.print (m);
  subBuffer.print (':');
  if (s < 10)
    subBuffer.print ('0');
  subBuffer.print (s);

  return subBuffer;
}

static PString& evaluate_free_ram (void *data __attribute__ ((unused))) {
  extern int __heap_start, *__brkval;
  int v;

  subBuffer.print ((int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval));

  return subBuffer;
}



// Max length of these is MAX_TAG_LEN (24)
static const char subMacAddrStr[] PROGMEM = "NET_MAC";
static const char subIPAddressStr[] PROGMEM = "NET_IP";
static const char subNetmaskStr[] PROGMEM = "NET_MASK";
static const char subGatewayStr[] PROGMEM = "NET_GW";
static const char subNetConfSrcStr[] PROGMEM = "NET_CONF_SRC";
static const char subWebbinoVerStr[] PROGMEM = "WEBBINO_VER";
static const char subUptimeStr[] PROGMEM = "UPTIME";
static const char subFreeRAMStr[] PROGMEM = "FREERAM";

static const var_substitution subMacAddrVarSub PROGMEM = {subMacAddrStr, evaluate_mac_addr, NULL};
static const var_substitution subIPAddressVarSub PROGMEM = {subIPAddressStr, evaluate_ip, NULL};
static const var_substitution subNetmaskVarSub PROGMEM = {subNetmaskStr, evaluate_netmask, NULL};
static const var_substitution subGatewayVarSub PROGMEM = {subGatewayStr, evaluate_gw, NULL};
static const var_substitution subNetConfSrcVarSub PROGMEM = {subNetConfSrcStr, evaluate_ip_src, NULL};
static const var_substitution subWebbinoVerVarSub PROGMEM = {subWebbinoVerStr, evaluate_webbino_version, NULL};
static const var_substitution subUptimeVarSub PROGMEM = {subUptimeStr, evaluate_uptime, NULL};
static const var_substitution subFreeRAMVarSub PROGMEM = {subFreeRAMStr, evaluate_free_ram, NULL};

static const var_substitution * const substitutions[] PROGMEM = {
  &subMacAddrVarSub,
  &subIPAddressVarSub,
  &subNetmaskVarSub,
  &subGatewayVarSub,
  &subNetConfSrcVarSub,
  &subWebbinoVerVarSub,
  &subUptimeVarSub,
  &subFreeRAMVarSub,
  NULL
};


/******************************************************************************
   MAIN STUFF
 ******************************************************************************/

// Avoid some bug reports :)
#if !defined (WEBBINO_ENABLE_SD) && !defined (WEBBINO_ENABLE_SDFAT)
#error Please enable WEBBINO_ENABLE_SD or WEBBINO_ENABLE_SDFAT in webbino_config.h
#endif


void setup() {
  Serial.begin (9600);
  Serial.println (F("Using Webbino " WEBBINO_VERSION));

  byte mac[] = {
    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
  };
  byte ip[] = {
    192, 168, 1, 51//l'ip usato dalla scheda ethernet              //////////////////////////////////////////////////////////////////////
  };                                                               //////////////////////////////////////////////////////////////////////
  byte gw[] = {                                                    //////////////////////////////////////////////////////////////////////
    192, 168, 1, 1//il vostro ip del modem o router                //GW E MASK SONO VISIBILI NELLE IMPOSTAZIONI DI RETE DEL VOSTRO PC////
  };                                                               //////////////////////////////////////////////////////////////////////
  byte mask[] = {                                                  //////////////////////////////////////////////////////////////////////
    255, 255, 255, 0//la net mask                                  //////////////////////////////////////////////////////////////////////
  };                                                               //////////////////////////////////////////////////////////////////////
  //netint.begin (mac);
  netint.begin (mac, ip, gw, mask);

  Serial.print (F("Initializing SD card..."));
  if (!webserver.enableSD (SD_SS)) {
    Serial.println (F(" failed"));
    while (42)
      ;
  }
  Serial.println (F(" done"));

  Serial.println (F("Trying to get an IP address through DHCP"));
  if (!webserver.begin (netint, NULL, substitutions)) {
    Serial.println (F("Failed to get configuration from DHCP"));
    while (42)
      ;
  }
  else {
    Serial.println (F("DHCP configuration done:"));
    Serial.print (F("- IP: "));
    Serial.println (netint.getIP ());
    Serial.print (F("- Netmask: "));
    Serial.println (netint.getNetmask ());
    Serial.print (F("- Default Gateway: "));
    Serial.println (netint.getGateway ());
  }
}

void loop() {
  webserver.loop ();

}


mi da l'errore che allego in questo post. come mai? dove è l'errore?

SukkoPera

#57
Oct 19, 2016, 10:39 am Last Edit: Oct 19, 2016, 10:44 am by SukkoPera
Che versione di Arduino stai usando? Consiglio almeno 1.6.9, meglio l'ultima. Inoltre mi sa che hai mescolato il branch e il master, perché il file /Users/tototer/Documents/Arduino/libraries/Webbino_branch/src/WebServer_WIZ5100.h non deve esistere nel branch.

@5a2v0: Sai che sono un sostenitore della modifica che proponi, ma finché non viene integrata nella versione principale, non si può fare: non mi piace l'idea di far dipendere Webbino da una libreria modificata. Inoltre, al momento la possibilità di cambiare porta non è del tutto funzionante, per ragioni di portabilità verso le varie schede supportate :/.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

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


SukkoPera

OK, va bene. Vedi però il commento che ho aggiuto nel post precedente riguardo ai sorgenti mescolati.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

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

Go Up