Nella prima lezione è stata fatta una panoramica sul mondo della domotica mettendo in evidenza i principali problemi e ostacoli. Nella seconda lezione invece si è entrati nel dettaglio del codice analizzando solo la parte che interessa la GUI del sistema; quest'ultima è stata realizzata attraverso una pagina web costituita da codice HTML, da fogli di stile e da codice JavaScript.
IMPLEMENTAZIONE FIRMWARE
Prima di addentrarci nell'analisi del firmware è doveroso precisare che, per poter compilare ed eseguire codice per ESPertino, occorre seguire tutte le istruzioni per l'installazione delle librerie e dell'IDE ben spiegate nell'articolo "La nuova scheda ESPertino per l''IoT"; in questo articolo l'IDE suggerito è quello di Arduino.
Seppur alle volte criticato e non da tutti ben accettato, ho scelto comunque di utilizzare l'IDE di Arduino (Figura 1) per dare la possibilità sia agli esperti sia ai neofiti, di poter implementare il progetto in questione. Per chi ha una certa esperienza nel mondo della programmazione Embedded ma è la prima volta che approccia con l'IDE di Arduino, occorre fare alcune precisazioni che gli consentiranno di superare alcune problematiche tipiche: innanzitutto i file di Arduino (e in questo caso di ESPertino), vengono detti sketch ed hanno estensione ".ino", non esiste un file di progetto ma è lo stesso file ".ino" a dare il nome e le relative proprietà al progetto e tutti i file che si vogliono includere nel codice devono stare nella stessa directory del file ".ino".
Ora che si hanno un po' di informazioni per poter iniziare a sviluppare su IDE Arduino, possiamo procedere con la descrizione del codice. Innanzitutto i file che compongono l'intero progetto possono essere divisi in tre gruppi:
- file di dati
- file di librerie
- file sketch
Dei primi fanno parte i file "info.json", "info.h", "webpage.html" e "webpage.h"; in realtà gli unici due file utili alla compilazione del codice sono "info.h" e "webpage.h" che sono a tutti gli effetti i file "info.json" e "webpage.html", convertiti in un vettore di byte tramite il software bin2h. I file di librerie sono invece funzioni in C++ contenute nei file "libESPdom.h" e "libESPdom.c"; queste sono state realizzate allo scopo di facilitare alcune operazioni generiche che vengono eseguite nel codice e che vedremo nel dettaglio più avanti. Il file sketch è, come detto precedentemente, il file principale di progetto che realizza la parte di inizializzazione (contenuta nella funzione void setup()
) e la parte di esecuzione principale del codice (contenuta nella funzione void loop()
). Ovviamente oltre a queste due parti, tipiche di un progetto di Arduino, sono state implementare nello sketch una serie di altre routine utili per l'implementazione di alcune funzionalità; anche queste verranno approfondite in seguito.
FILE DI DATI
Per quanto riguarda i file di dati "info.json" e "webpage.html" (convertiti rispettivamente in "info.h" e "webpage.h" in modo da essere inclusi nel codice), non verrà fatta una trattazione approfondita in quanto sono già stati trattati nella prima e nella seconda parte dell'articolo; mi limiterò semplicemente a ripetere che il primo è un file utile a descrivere il dispositivo e che contiene, oltre che una descrizione [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2753 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.
Ciao,
Compilando lo sketch ottengo il seguente errore:
—————————————————————————-
C:\Users\johnn_000\Documents\Arduino\ESP_Switch\Switch\switch.ino: In function ‘void exOperations(WiFiClient*)’:
switch:55: error: ‘class libESPdom’ has no member named ‘sendHttp’
espdom.sendHttp(client,(char*)info);
^
switch:72: error: ‘class libESPdom’ has no member named ‘sendHttp’
espdom.sendHttp(client,(char*)webpage);
^
exit status 1
‘class libESPdom’ has no member named ‘sendHttp’
—————————————————————————-
Mi puoi aiutare?
Grazie
Ciao
Johnny
Ciao Johnny!
Si è un problema dell’IDE Arduino e delle librerie ESP.
Ne stiamo discutendo nella seconda parte dell’articolo al seguente link: https://it.emcelettronica.com/espertino-e-la-domotica-opensource-switch-a-doppia-uscita-sviluppo-pagina-web
Per non creare doppioni (e per facilitare il mio lavoro ?) ti chiederei di seguire l’argomento nella seconda parte dell’articolo, è un problema per te?
Ok nessun Problema! 🙂
Grazie mille Luca.
Ciao
ciao a tutti. sono nuovo e sto già postando un bit off-topic 😉 mi chiedevo se dopo aver sviluppato l’applicazione domotica a qualcuno interesserebbe visualizzare i dati di casa su pannello grafico, tablet o smartphone. Ho sviluppato un’applicazione cross platform open source disponibile su github a questo indirizzo e mi piacerebbe sapere cosa ne pensate. grazie https://github.com/EssentialGraphics/EGE2D-GUI
Potrebbe essere interessante se si pensa di usarla per avere uno schermo su cui visualizzare lo stato dell’intero sistema.
Cosa fa esattamente questa applicazione? Come è possibile usarla?
Sarebbe interessante vedere un esempio ma il link http://www.ege3d.it/scada/application.html non risulta funzionante.
grazie tanto per la pazienza della segnalazione. effettivamente è stato attivato un sito re-stilizzato e mancava il link all’applicazione. ora ho ripristinato il link all’ applicazione demo: http://www.ege3d.it/scada/application.html.
Sul sito è anche presente una descrizione dedicata alla domotica, posto il link http://www.ege3d.it/landing-domotica2d.html.
Per rispondere alla tua domanda rispondo di si, l’applicazione è una GUI (grahic user interface), è un programma scritto in C++ cross platform simile a Qt per dire ma molto più semplice e con un’attenzione particolare al controllo e comando dispositivi. Essendo cross platform può essere installato su windows, raspberry, webserver, linux etc… ovunque praticamente.
serve, come hai ben intuito, alla presentazione “stati” ( luci, temperature, assorbimenti istantanei etc…) del sistema domotico (es. raspberry) e “comandi” (pulsanti su interfaccia per accensione/spegnimento dispositivi) verso controllore domotico tipo raspberry, più in generale qualunque sistema che supporti la comunicazione via websockets. Il sistema è di tipo grafico e quindi presenta un’interfaccia “gradevole” da vedere.
Bene! Sicuramente uno stimolo in più per sviluppare altri progetti con ESPertino in ambito domotico 🙂
Interessante.
Ho realizzato un sistema simile utilizzando un Raspberry come server e delle schede ESP-12E con l’intento di creare un sistema domotico a basso costo, open source e da usare “in parallelo” all’impianto esistente, così da garantire il funzionamento delle luci anche con sistema smart spento o fuori servizio.
A meno del controllo delle tapparelle (che sono controllate inevitabilmente da una scheda e non possono essere comandate “in parallelo”, sono riuscito nel mio intento. L’interfaccia è realizzata in HTML, le notifiche ed eventuali allarmi (superamento soglia corrente assorbita, allarme allagamento, intrusione ecc) sono garantiti da un bot Telegram, grazie al quale sono anche possibili i comandi da remoto (oltre ad una connessione VPN).
A differenza di quello riportato nell’articolo utilizzo le webSocket per la connessione tra client (pc/tablet/smartphone) e server, mentre le schede comunicano via MQTT.
Ora l’intento è quello di sostituire le ESP-12E con le ESP32 per poter implementare dei certificati, troppo pesanti da usare con le prime.
Qui una demo: https://youtu.be/fHrO3xNaHoI
Bel progetto, complimenti! Si l’idea di dare la possibilità di interfacciare l’impianto tradizionale con un sistema più evoluto, credo sia vincente.
Per le tapparelle visto che sono comandate con una scheda, hai valutato l’ipotesi di comandarle con il codice radio?
Ah sì, di fatto è già così… Ma la scheda di cui mi riferisco l’ho dovuta realizzare io…
Mi spiego meglio: le tapparelle hanno un cassonetto esterno inaccessibile (abito al 3º piano e su due lati non ho balconi); dapprima venivano pilotate da un classico commutatore doppio tasto (Bticino L4027). Avendo esigenza di comandarle da remoto, le fasi non potevano più essere collegate ai comandi a parete in quanto (p.e.) se si comandasse la salita e da remoto si comandasse la discesa, si ecciterebbero contemporaneamente entrambi gli avvolgimenti del motore.
Pertanto, è stato necessario sostituire gli L4027 con i doppi pulsanti interbloccati L4037 che, invece di comandare le fasi della tapparella, comandano lo stato di due relè tramite la ESP-12E. La scheda funge quindi da ritenuta, e comunicando col Raspberry esegue i comandi remoti e fornisce gli stati delle tapparelle. Lo sketch è scritto in modo che se la tapparella fosse in movimento e venisse premuto uno dei due pulsanti, questa si fermerebbe. Per eseguire il comando inoltre ho realizzato la serie di due relè 1 scambio, così da evitare l’eccitazione contemporanea dei 2 avvolgimenti nemmeno qualora uno dei contatti dovesse impastarsi.
Detto questo, qualora la scheda si guastasse non sarebbe più possibile comandare le tapparelle nemmeno dai comandi a parete.
Buongiorno, interessantissima applicazione, ma è soprattutto l’istruzione ricevuta dai tre articoli, veramente tosti ma ricchi di conoscenza, che mi ha entusiasmato,
Finalmente il protocollo HTTP spiegato agli inesperti bricolatori come il sottoscritto. Duri da leggere e rileggere ma alla fine una ottima base di conoscenza.
Oltre tutto ho apprezzato quella “dimenticanza” nel codice dello Sketch sulla funzione espdom.sendResponseHttp () , che sembra fatta apposta per verificare se uno comprende quello che sta scrivendo o meno. .
Comunque, complimenti a parte, ho una richiesta: il tutto funziona all’interno della mia rete domestica, che è collegata ad un “Hub” di Fastweb, Come potrei raggiungere questa rete da remoto?
Grazie e cordiali saluti
Se non sei sotto rete NAT potresti utilizzare una VPN (p.e. OpenVPN): così facendo sarai collegato di fatto alla tua lan.
Se però sei sotto rete NAT o semplicemente Ti basta ricevere stati/inviare comandi potresti pensare di utilizzare un di bot Telegram.
Ti rimando a Google per approfondimenti perché gli argomenti sono vasti e un po’ complessi, ma troverai una miriade di tutorial a riguardo.
Risposta più che esaustiva di @Lore.PRO.
Grazie per i complimenti 😉