Webbino - Server web "dinamico" per Arduino

.... ah, altra cosa ... ora che si fa tutto da "Library Manager" (ottima idea :)) devo dire che è veramente scomodo (... specie pensando a principianti), dover andare a modificare il file "webbino_config.h" nella cartella delle librerie. Non solo, se ho un programma per una certa scheda di rete ed uno per un altra, ogni volta devo compilare l'uno, modificare la libreria, compilare l'altro, e così via :confused:

Mi sembra molto più corretto che questo file venga si dato all'utente, magari in una cartella separata dalla "src" così di sicuro, se non lo prende, NON lo trovi e vai in errore, che se lo copia nella cartella del suo programma in modo che sia "locale" per ciascun programma e che la configurazione di un'applicazione con una scheda di rete NON coinvolga quella di un'altra con un'altra scheda di rete ;)

Che ne pensi ?

Guglielmo

Io faccio sempre così se vado a modificare una qualsiasi libreria, la metto nella cartella dello sketch. Certo, con alcune librerie, tipo la ethernet, è un po' scocciante, ti trascini dietro parecchi files.

zoomx: Io faccio sempre così se vado a modificare una qualsiasi libreria, la metto nella cartella dello sketch. Certo, con alcune librerie, tipo la ethernet, è un po' scocciante, ti trascini dietro parecchi files.

Ma qui NON serve tutta la libreria ... ... basta il file di configurazione personalizzato per ogni singolo programma che faccio ;)

Guglielmo

zoomx: Quelli più economici sono proprio quelli a reed. Quelli più costosi invece hanno una circuiteria interna con tanto di MCU per gestire il tutto. Il tuo, di cui ti lamenti, sembra appartenere proprio a questa categoria.

Si ma quello con il reed paghi la marca e la struttura dell anemometro che è fatta meglio ;) Se il mio costa 40 euro e quello 160 (anche se è fatto così semplice) non ci si può fare niente. In ogni caso la lettura di un reed è sempre più semplice. Mi fermo qua perché non voglio andare OT ;)

gpb01: ... ma tu hai provato a compilare, anche se non ce l'hai, per Arduino MKR1000 ? Perché a me, con l'IDE 1.6.12, tira furi veramente parecchi, ovvi, errori !!!

Credo tu abbia trascurato il fatto che stiamo parlando di una scheda NON basata su MCU AVR, ma su ARM ... per cui tutto l'uso di PROGMEM ... va a farsi friggere ... ::)

Erm, veramente sì, ho provato, è l'unica cosa che potevo fare, non avendo la scheda. Credo di averlo anche scritto nel post in cui presentavo la novità. In effetti il supporto PROGMEM non dovrebbe essere attivo con la MKR, essendo così condizionato:

#if defined (ARDUINO_ARCH_AVR) || defined (ESP8266)
    #define ENABLE_FLASH_STRINGS
#endif

Potresti provare ad ABILITARLO, rimuovendo l'#ifdef? Se ci sono dei buoni header di compatibilità potrebbe sistemarsi da solo.

Comunque questo mi fa venire in mente che dopo il supporto MKR1000 ho aggiunto quello ESP, magari ho distrutto qualcosa con questo lavoro.

Per quanto riguarda l'altra idea, sì, in effetti può avere senso, ma sei sicuro che funzioni? Se la libreria viene compilata a parte non credo che si vada a prendere il config dallo sketch.

SukkoPera:
Potresti provare ad ABILITARLO, rimuovendo l’#ifdef? Se ci sono dei buoni header di compatibilità potrebbe sistemarsi da solo.

Provo e ti faccio sapere …

SukkoPera:
Per quanto riguarda l’altra idea, sì, in effetti può avere senso, ma sei sicuro che funzioni? Se la libreria viene compilata a parte non credo che si vada a prendere il config dallo sketch.

… occhio, è OVVIO che l’utente debba fare in testa al programma: #include “webbino_config.h” (nota i " " al posto del < >, quindi files locali) che deve trovarsi nella cartella del suo programma e dovrebbe creare le varie #define PRIMA dell’inclusione della libreria.
Così credo dovrebbe funzionare (da verificare) ::slight_smile:

Guglielmo

Nulla Sukko, come la metti la metti, io ottengo sempre :

n file included from /Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/HTTPRequestParser.h:24:0,
                 from /Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebClient.h:24,
                 from /Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/NetworkInterface.h:25,
                 from /Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h:24,
                 from /Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/Webbino.h:21,
                 from /var/folders/td/xjbgg2n97rl9wsy40_rsj90h0000gn/T/arduino_modified_sketch_554611/LedControl.ino:20:
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/webbino_debug.h:48:2: warning: #warning Flash strings disabled [-Wcpp]
 #warning Flash strings disabled
  ^
In file included from /Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/packages/arduino/hardware/samd/1.6.8/cores/arduino/Arduino.h:36:0,
                 from /var/folders/td/xjbgg2n97rl9wsy40_rsj90h0000gn/T/arduino_build_509135/sketch/LedControl.ino.cpp:1:
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h: In member function 'const char* Page::getName() const':
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/packages/arduino/hardware/samd/1.6.8/cores/arduino/avr/pgmspace.h:106:49: error: 'const void*' is not a pointer-to-object type
 #define pgm_read_ptr(addr) (*(const void *)(addr))
                                                 ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h:51:35: note: in expansion of macro 'pgm_read_ptr'
   return reinterpret_cast<PGM_P> (pgm_read_ptr (&(this -> name)));
                                   ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h: In member function 'void (* Page::getFunction() const)(HTTPRequestParser&)':
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/packages/arduino/hardware/samd/1.6.8/cores/arduino/avr/pgmspace.h:106:49: error: 'const void*' is not a pointer-to-object type
 #define pgm_read_ptr(addr) (*(const void *)(addr))
                                                 ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h:55:42: note: in expansion of macro 'pgm_read_ptr'
   return reinterpret_cast<PageFunction> (pgm_read_ptr (&(this -> function)));
                                          ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h: In member function 'const char* Page::getContent() const':
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/packages/arduino/hardware/samd/1.6.8/cores/arduino/avr/pgmspace.h:106:49: error: 'const void*' is not a pointer-to-object type
 #define pgm_read_ptr(addr) (*(const void *)(addr))
                                                 ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h:59:35: note: in expansion of macro 'pgm_read_ptr'
   return reinterpret_cast<PGM_P> (pgm_read_ptr (&(this -> content)));
                                   ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h: In member function 'const char* ReplacementTag::getName() const':
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/packages/arduino/hardware/samd/1.6.8/cores/arduino/avr/pgmspace.h:106:49: error: 'const void*' is not a pointer-to-object type
 #define pgm_read_ptr(addr) (*(const void *)(addr))
                                                 ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h:117:35: note: in expansion of macro 'pgm_read_ptr'
   return reinterpret_cast<PGM_P> (pgm_read_ptr (&(this -> name)));
                                   ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h: In member function 'PString& (* ReplacementTag::getFunction() const)(void*)':
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/packages/arduino/hardware/samd/1.6.8/cores/arduino/avr/pgmspace.h:106:49: error: 'const void*' is not a pointer-to-object type
 #define pgm_read_ptr(addr) (*(const void *)(addr))
                                                 ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h:121:43: note: in expansion of macro 'pgm_read_ptr'
   return reinterpret_cast<TagEvaluateFn> (pgm_read_ptr (&(this -> function)));
                                           ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h: In member function 'void* ReplacementTag::getData() const':
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/packages/arduino/hardware/samd/1.6.8/cores/arduino/avr/pgmspace.h:106:49: error: 'const void*' is not a pointer-to-object type
 #define pgm_read_ptr(addr) (*(const void *)(addr))
                                                 ^
/Applications/Arduino/Arduino 1.6.12 Portable.app/Contents/Java/portable/sketchbook/libraries/Webbino/src/WebbinoCore/WebServer.h:125:56: note: in expansion of macro 'pgm_read_ptr'
   return reinterpret_cast<void *> (const_cast<void *> (pgm_read_ptr (&(this -> data))));

Guglielmo

Buongiorno Sukkopera, nello specifico sono:

1 NTC 10k 1% (temperatura) 2 ACS712 20A (corrente) 1 H120 (voltaggio)

Cosa devo fare? Aspetto l introduzione del buffer da parte tua?

@gpb01: se però dice Flash strings disabled non le hai mica abilitate :). Se lasci il #define togliendo l'#if dovrebbe abilitarle. Appena riesco ci guardo comunque.

@tototer: ok, mi sa che devi aspettare ;).

SukkoPera:
@gpb01: se però dice Flash strings disabled non le hai mica abilitate :). Se lasci il #define togliendo l’#if dovrebbe abilitarle. Appena riesco ci guardo comunque.

Come detto … ho fatto ENTRAMBE le prove.
Quella è la prova disabilitate … se le abilito … mi sembra che la lista sia ancora più lunga :smiley: :smiley: :smiley:

Guglielmo

Ah ok, ora ho capito. Ci guardo ASAP.

Puoi provare il wifi shield vecchio?

SukkoPera: Puoi provare il wifi shield vecchio?

Lo cerco (... ne avevo uno e da qualche parte deve stare :D) e vedo di provarlo ;)

Guglielmo

Edit: Dubbio ::) ... ma parli di WiFi shield vecchio .. cioè quelo con AT32UC3 o quello nuovo WiFi Shield 101 ?

Il 101 usa lo stesso chip della MKR, quindi direi che al momento non funziona. Il vecchio invece dovrebbe andare.

Aspetta, il 101 è uno shield che monti dove ti pare, anche su una UNO e quindio potrebbe andare, ma non lo posseggo e non posso provare ... ... il vecchio invece usa la vecchia libreria WiFi.h e non so se lo hai implementato.

Mi sa che ... te stai a incarta' co' tutte 'ste schede :D :D :D

Guglielmo

Sìììì, è implementato! Guarda i #define:

/* Network device selection: please enable *only one* of the following,
 * corresponding to the network device you will be using
 */
#define WEBBINO_USE_WIZ5100
//~ #define WEBBINO_USE_WIZ5500
//~ #define WEBBINO_USE_ENC28J60
//~ #define WEBBINO_USE_ESP8266
//~ #define WEBBINO_USE_ESP8266_STANDALONE
//~ #define WEBBINO_USE_WIFI                             <-----
//~ #define WEBBINO_USE_WIFI101
//~ #define WEBBINO_USE_DIGIFI

Il 101 è uno shield, ok, ma usa lo stesso chip wifi della MKR, tanto che la libreria di interfaccia è la stessa (WiFi101.h). Il vecchio usa un’altra libreria (WiFi.h).

SukkoPera: Sìììì, è implementato! Guarda i #define:

Ohibò ... m'era totalmente sfuggito ... faccio sicuramente la prova :D :D :D

SukkoPera: Il 101 è uno shield, ok, ma usa lo stesso chip wifi della MKR, tanto che la libreria di interfaccia è la stessa (WiFi101.h). Il vecchio usa un'altra libreria (WiFi.h).

Si, ma il problema con la MKR1000 mica deriva dal WiFi, deriva dal fatto che usi progmem su una MCU ARM. Lo shield invece lo monti sulla MCU che vuoi ... sulla UNO hai un AVR e non ci sono problemi di progmem.

Guglielmo

Ah sì, in effetti mi sa checchairaggione :D.

Grazie mille sukkopera! Rimango in attesa, ma quanto tempo occorre? Così per farmi un idea. E poi immagino che dovrò cancellare la vecchia libreria e caricare tutto nuovo vero? E ricompilare con la nuova libreria

Come già detto prima, io ti consiglio intanto di aggiornare alla 0.9.0 che trovi sul Library Manager. Non risolve il tuo problema, ma intanto dovrai fare delle modifiche da cui non potrai sottrarti (niente di troppo complesso in ogni caso).

Quando avrò implementato il buffering (spero entro prossima settimana), non dovrai cambiare più niente se sarai già allineato alla 0.9.0.

Grazie Mille Sukkopera, allora faccio questo passaggio sicuramente prima di tutto. ma dimmi una cosa, nel caso quindi dovessi collegare l'arcuino con uno shield wifi il problema (lentezza incredibile caricamento pagina da remoto o da rete locale dopo il ponte wifi) non si presenterebbe?