SmartStrip - Controllo prese elettriche da web

Ciao,

volevo presentare a tutti il mio primo progetto. Si tratta essenzialmente della solita "ciabatta" di prese elettriche controllabili da interfaccia web, con l'aggiunta della possibilità di accenderle/spegnerle in dipendenza dalla temperatura. L'altra caratteristica che la rende diversa dalle altre è che dovrebbe supportare sia lo shield Ethernet ufficiale che quelli basati su ENC28J60.

Dovrebbe tornare utile agli appassionati di acquari e a chi fa birra in casa, come me :). In ogni caso, non mi ritengo responsabile di qualunque cosa succeda se la usate :zipper_mouth_face:.

Ho annunciato la prima release pubblica qua: http://arduino.cc/forum/index.php/topic,120299.0.html

Mi piacerebbe se qualcuno volesse collaborare, come beta tester o come programmatore, o in qualunque modo gli passi per la testa! :grin:. Dategli almeno un'occhiata, grazie!

ISTRUZIONI PER L'INSTALLAZIONE:

  1. Aprite la vostra cartella degli sketch, dove ci sono le cartelle con tutti i vostri programmi. Createci dento, se ancora non esiste, una nuova cartella, chiamandola "libraries".

  2. Installazione della libreria Sukkino:
    Andate qua: GitHub - SukkoPera/Webbino: A universal webserver for Arduino, capable of delivering dynamic contents
    Cliccate su ZIP e dovreste scaricare un file tipo Sukkino-master.zip.
    Aprite il file scaricato, dovreste trovarci una cartella con dentro 3 ulteriori cartelle: EEPROMAnything, Panic e Webbino. Copiate queste ultime dentro alla cartella "libraries" creata precedentemente.

  3. Installazione della libreria Ethercard - NECESSARIO SOLO SE USATE UNO SHIELD CON CHIPSET ENC28J60 (ovvero non quello ufficiale, che usa il chip WIZ5100, in tal caso saltate direttamente al punto successivo)
    Andate qua: GitHub - njh/EtherCard: EtherCard is an IPv4 driver for the ENC28J60 chip, compatible with Arduino IDE
    Cliccate su ZIP e dovreste scaricare un file tipo ethercard-master.zip.
    Aprite il file scaricato, dovreste trovarci una cartella: ethercard-master. Copiatela dentro alla cartella "libraries" creata precedentemente e rinominatela in "Ethercard".

  4. CHECKPOINT - Se avete fatto tutto correttamente, a questo punto dentro alla cartella libraries dovreste avere 4 sottocartelle: EEPROMAnything, Ethercard, Panic e Webbino (3 se usate WIZ5100, mancherà Ethercard).

  5. Abilitazione del supporto WIZ5100 - NECESSARIO SOLO SE USATE LO SHIELD ETHERNET UFFICIALE O COMUNQUE UNO BASATO SUL CHIPSET WIZ5100 (in caso contrario saltate direttamente al punto successivo)
    Aprite col vostro editor preferito il file \libraries\Webbino\webbino_common.h, all'inizio troverete:

#define USE_ENC28J60

Cambiatelo in:

// #define USE_ENC28J60

Salvate e uscite.

  1. Download dello sketch
    Andate qua: GitHub - SukkoPera/SmartStrip: A sketch for Arduino for advanced control of relays through a web interface, supporting always ON/always OFF and temperature-controlled relays
    Cliccate su ZIP e dovreste scaricare un file tipo SmartStrip-master.zip.
    Aprite il file scaricato, dovreste trovarci una cartella: SmartStrip-master. Copiatela dentro alla cartella dei vostri sketch (questa volta NON in libraries) e rinominatela in "SmartStrip2".
    A questo punto aprite l'IDE (io ho lavorato sulla versione 1.0.1) e procedete nomalmente al caricamento e compilazione dello sketch.

ancora disponibile l'offerta?

Certamente!

Ciao, ho provato a caricare lo sketch ma in fase di compilazione mi restituisce un sacco di errori, troppi.

secondo te è compatibile con un arduino uno con shield wiz5100?

bacconi:
Ciao, ho provato a caricare lo sketch ma in fase di compilazione mi restituisce un sacco di errori, troppi.

secondo te è compatibile con un arduino uno con shield wiz5100?

Benvenuto

immagino tu abbia installato tutte le librerie che sono nello zip nell'IDE ... no?

si, credo di si. ma la sezione :
EEPROMAnything.write (EEPROM_MAC_B1_ADDR, DEFAULT_MAC_ADDRESS_B1);
EEPROMAnything.write (EEPROM_MAC_B2_ADDR, DEFAULT_MAC_ADDRESS_B2);
EEPROMAnything.write (EEPROM_MAC_B3_ADDR, DEFAULT_MAC_ADDRESS_B3);
EEPROMAnything.write (EEPROM_MAC_B4_ADDR, DEFAULT_MAC_ADDRESS_B4);
EEPROMAnything.write (EEPROM_MAC_B5_ADDR, DEFAULT_MAC_ADDRESS_B5);
EEPROMAnything.write (EEPROM_MAC_B6_ADDR, DEFAULT_MAC_ADDRESS_B6);
EEPROMAnything.write (EEPROM_NETMODE_ADDR, DEFAULT_NET_MODE);
EEPROMAnything.write (EEPROM_IP_B1_ADDR, DEFAULT_IP_ADDRESS_B1);
EEPROMAnything.write (EEPROM_IP_B2_ADDR, DEFAULT_IP_ADDRESS_B2);
EEPROMAnything.write (EEPROM_IP_B3_ADDR, DEFAULT_IP_ADDRESS_B3);
EEPROMAnything.write (EEPROM_IP_B4_ADDR, DEFAULT_IP_ADDRESS_B4);
EEPROMAnything.write (EEPROM_NETMASK_B1_ADDR, DEFAULT_NETMASK_B1);
EEPROMAnything.write (EEPROM_NETMASK_B2_ADDR, DEFAULT_NETMASK_B2);
EEPROMAnything.write (EEPROM_NETMASK_B3_ADDR, DEFAULT_NETMASK_B3);
EEPROMAnything.write (EEPROM_NETMASK_B4_ADDR, DEFAULT_NETMASK_B4);
EEPROMAnything.write (EEPROM_GATEWAY_B1_ADDR, DEFAULT_GATEWAY_ADDRESS_B1);
EEPROMAnything.write (EEPROM_GATEWAY_B2_ADDR, DEFAULT_GATEWAY_ADDRESS_B2);
EEPROMAnything.write (EEPROM_GATEWAY_B3_ADDR, DEFAULT_GATEWAY_ADDRESS_B3);
EEPROMAnything.write (EEPROM_GATEWAY_B4_ADDR, DEFAULT_GATEWAY_ADDRESS_B4);
non capisco se è da programmare con i miei valori?
il compilatore si ferma a questa riga di codice:
param = request.get_get_parameter (F("mac"));
e la lista degli errori in cui quasi tutti sono uguali a questo:
SmartStrip2.ino: In function 'void netconfig_func(HTTPRequestParser&)':
SmartStrip2:186: error: invalid conversion from 'const __FlashStringHelper*' to '__FlashStringHelper*'
SmartStrip2:186: error: initializing argument 1 of 'char* HTTPRequestParser::get_get_parameter(__FlashStringHelper*)'

Dovrebbe funzionare anche sulla Uno con shield wiz5100, è una delle mie piattaforme di test, anche se ho dei cloni di entrambi.

In teoria i tuoi valori li puoi modificare dall'interfaccia web dopo una connessione iniziale, ma per fare prima li puoi cambiare in common.h (Quelli sotto, non quelli che terminano in _ADDR, che vanno lasciati come sono).

Quell'errore di compilazione con quale versione dell'IDE lo ottieni?

PS: Dovrei continuare a lavorare su questo progetto. Purtroppo sono venuti gli imbianchini e mi hanno stravolto la casa, ho dovuto chiudere tutta la mia roba elettronica in una scatola in fretta e furia e non ho mai il tempo di riprenderla in mano :(.

ciao, me lo fa con le ultime tre versioni 1, mica devo usare la 0023?
purtroppo la mia esperienza e' veramente poco e forse non ti so neanche descrivere bene forse il problema.
e' anomale che se provo a programmare un file oltre i 29k mi dia errore?

bacconi:
e' anomale che se provo a programmare un file oltre i 29k mi dia errore?

Quando compili leggi nella parte inferiore:

Dimensione del file binario dello sketch: 2.110 bytes (su un massimo di 30.720 bytes)

bacconi:
ciao, me lo fa con le ultime tre versioni 1, mica devo usare la 0023?

No, figurati, io uso la 1.0.1 di solito! Faccio qualche test e ti dico.

PS: Perdonami, dimenticavo che se usi la WIZ5100 lo sketch diventa troppo grosso per stare su una Uno, e ti ci vuole una Mega. Ho già qualche idea per ridurre la dimensione del binario, ma ci vorrà un po' per metterla in pratica. La verità è che non mi spiego il motivo per cui la libreria Ethernet occupi così tanto spazio (più di 5 Kb, ma vado a memoria)! Si dice ovunque che il Wiz è meglio dell'ENC28J60 perché implementa molte funzioni in hardware, ma di fatto la libreria Ethercard che uso per quest'ultimo chip alla fine occupa meno spazio e funziona altrettanto bene (sebbene va detto che consumi più RAM; in effetti la mia Webbino è parecchio inefficiente in questo senso quando si usa il Wiz, essendo nata per l'ENC e non avendo ancora avuto voglia/tempo di modificare certe cose).

OK, avevo dimenticato di pushare gli ultimi commit su Sukkino, aggiornalo e riprova.

Comunque il binario per la Uno con supporto Wiz e l'IDE 1.0.1 viene di 35320 byte, troppi. Col supporto all'ENC diventa di 28912. Come dicevo, c'è qualche ottimizzazione possibile nel mio codice, ma la differenza mi sembra eccessiva. Si direbbe che anche la libreria Ethernet ufficiale possa essere pesantemente ottimizzata in termini di spazio...

(Scusate il doppio post)

Ho provato anch'io per curiosità, ma da una montagna di errori anche sulla mega + w5100.

Se sono errori di compilazione sono indipendenti dal target. Puoi postarli? Hai aggiornato la libreria Sukkino con l'update di poco fa?

Si l'ho preso ora e installato, gli errori sono ancora più di prima almeno 3 pagine di "not declared".

Secondo me dovresti perdere 2 minuti a spiegarne l'installazione, scrivi che hai aggiornato il link, ma non ripeti il link, devo andare al primo post e cliccare il link sul forum, sul forum internazionale poi cliccare su quel link e tornare indietro, un po' scocciante :).... qualche spiegazione in inglese sull'instal c'è, ma sei sul forum ita quindi scrivilo in ita magari sul primo post facendo un aggiunta.

Scrivi come va installato nel dettaglio poichè un inesperto potrebbe creare seri danni al suo IDE sovrascrivendo file nei posti sbagliati incasinandogli tutto.

Questo chiaramente se sei interessato che gli utenti lo provino e ti diano dei pareri.

Ciao

Se non ero interessato, manco aprivo sto thread, no? Farò come dici, appena possibile.

Mi posteresti intanto gli errori che ottieni?

EDIT: Credo di aver capito, a tutti voi manca html.h, che andrebbe generato dinamicamente, ma che se siete su Windows non è proprio immediato. Vedo di aggiungerlo al repository!

Uhm... "sketch_nov27a" mi fa pensare che tu abbia scaricato un file solo invece dell'intero repository, è così?

Ho messo lo sketch nella cartella con le librerie, magari devo rivedere l'installazione di tutte quelle lib se sono al posto giusto. però a parte tutto quello che mi interessa del tuo progetto è solo questo

static var_substitution subDateVarSub PROGMEM = {subDateStr, evaluate_date, NULL};
static var_substitution subTimeVarSub PROGMEM =	{subTimeStr, evaluate_time, NULL};
...

static var_substitution *substitutions[] PROGMEM = {
	&subDateVarSub,
	&subTimeVarSub,
...
...

questo non l'ho mai visto, cosa fa sostituisce i caratteri nelle stringhe del PROGMEM?

No, è il supporto per una sorta di "contenuti dinamici" nelle pagine web. Prova il secondo esempio della libreria Webbino e dovresti capire.

L'uso di PROGMEM in questo frangente è solo per risparmiare più RAM possibile.

Ho aggiunto le istruzioni dettagliate per l'installazione al primo post. A questo punto sei moralmente obbligato a seguirle e dirmi se va tutto bene :). Ho anche aggiunto il file html.h al repository, riscaricalo.

Ciao, mi sembra di averle scaricate tutte e messe in una cartelle di nome "nome libreria" senza .h nella cartella libraries dell arduino.
è il percorso giusto?
ti ho postato una foto dell errore, se riesci a capire.

Francamente è un errore che non ho mai visto. Prova ad aggionare tutto, vedi le istruzioni che ho messo al primo post e vediamo se capita ancora!