Ciabatta Elettronica

CIABATTA ELETTRONICA

Ovvero pilotare 5 prese a 220V tramite WIFI 

Eccomi con un nuovo progetto e questa volta non si tratta dell’ennesimo orologio più o meno digitale. Qualche tempo fa ravanando su YouTube alla ricerca di qualche novità da riproporre, ho trovato il progetto fatto e finito di una ciabatta comandata tramite Bluetooth. Mi sono chiesto allora se potevo riprodurlo in qualche modo adattandolo alle mie esigenze. Mi sono messo a studiare ciò che avevo visto a condizione di usare solo componenti già in possesso e quindi a costi non dico irrisori ma quasi.

Partendo dalla base ho cannibalizzato una ciabatta a 6 posti con interruttori singoli che aveva qualche problema proprio negli interruttori. Non sono proprio il massimo e dopo qualche tempo si guastano rompendosi. La ciabatta in questione è quella nella foto sottostante:

 

Ogni interruttore ha una spia consistente in una piccola lampadina pisello (ricordate quelle che si usavano una volta per illuminare l’albero di Natale ?) con una resistenza di caduta. Però sono fragili e a furia di manovrarli prima o poi su rompono.

Allora procediamo con il progetto: la base c’è. Allora mano al cacciavite e apriamo la ciabatta. Scolleghiamo tutti gli interruttori e togliamoli dall’alloggiamento. Ogni interruttore è facilmente smontabile lasciando solo un alloggiamento rettangolare vuoto usabile e sufficientemente capiente.

Passiamo alle prese: Ognuna di esse è connessa in parallelo al un ramo della tensione di ingresso mentre l’altro ramo fa capo ad un interruttore connesso all’altro ramo della tensione. Isoliamo quindi 5 dei sei capi in modo da avere 5 fili singoli (uno per ogni presa). Perché cinque e non sei ?.
Perché ho lasciato la prima presa connessa al 220 in modo da utilizzarla fuori dal contesto.

Però più che le parole valgono i fatti e nella foto sottostante si può vedere cosa è diventata:

Possiamo vedere: ogni alloggiamento degli interruttori è stato riempito con un led rosso ad alta luminosità e inglobato (con la sua resistenza di caduta) in una colata di cera (quella delle candele per intenderci). Anche se in questa foto non si vedono sul lato sinistro della ciabatta sono stati praticati 2 fori: uno per fa passare il singolo filo di tensione di ogni presa e il filo “master” per la chiusura di ogni singolo contatto. Il secondo foro per far passare i fili di ciascun led e il filo di massa comune per tutti i led. Notare il buco che alloggiava l’interruttore della prima presa. Nella foto si può vedere che la seconda e la sesta presa sono sotto tensione 220 e la spia LED relativa è accesa. Questa foto si riferisce alla prime prove di funzionamento prima della produzione dell’ Hardware vero e proprio.

STUDIO DEL PROGETTO:

Come ho già detto l’intero progetto deve costare pochissimo a patto di utilizzare solo componenti già in possesso o al massimo acquistare solo quelli necessari.

Prima idea: utilizzare una pagina WEB con cui comandare singolarmente ognuna delle prese in accensione e/o spegnimento.

Seconda idea: utilizzare un dispositivo BlueTooth per fare lo stesso.

Quale è la più semplice ? : dipende dal grado di esperienza che ognuno di noi hobbista, dilettante o professionista, ha relativamente alla programmazione dei due sistemi. Personalmente sono un hobbista senza grandi pretese e ritengo di cavarmela a sufficienza in entrambi i sistemi. Allora per ogni modalità vediamo complicazioni e facilitazioni:

Idea WEB: Forse è la più complicata in quanto richiede risorse e conoscenze di un certo livello. Le risorse possono essere: scheda Arduino e shield Ethernet ma le esperienze effettuate dal sottoscritto qualche anno fa non mi hanno soddisfatto e la stessa shield NON gestisce il WIFI. Per cui è stata scartata. Se vogliamo allora fare qualcosa di più “moderno” e usare il WIFI (tanto oggi va di moda !) è possibile utilizzare i moduli ESP_8266 che in una dimensione di 25mm per 12,5 raccolgono un completo microprocessore programmabile via Arduino e specifico per effettuare connessioni in WIFI utilizzando WEB_SERVER e altri sistemi.

Qual’ è la complicazione di questa scelta ?: Una buona esperienza di programmazione “C”, la personalizzazione dell’ambiente Arduino a gestire questo modulo, la conoscenza delle pagine HTML e la loro programmazione. Tutto questo potrebbe non essere alla portata di tutti. Personalmente ho fatto un po’ di esperienza sia in tempi recenti che in tempi remoti almeno per quanto riguarda le pagine HTML. Però credo che anche a non essere “esperti” c’è tanto materiale ON_LINE che aiuta a programmare questi moduli ESP fornendo esempi più o meno complessi.
L’unico svantaggio molte volte è la lingua: moltissimi siti sono di lingua inglese.

Idea BlueTooth: Questa forse è la più semplice: il modulo BlueTooth non si connette in WIFI ma appunto tramite protocollo Bluetooth disponibile su tutti i tablet e cellulari. Può essere usato connettendolo in modalità seriale ad un micro arduino, oppure utilizzare qualche APP (o programmarla per chi è capace) prodotta allo scopo. Nella fattispecie in questo progetto può essere utilizzato in modalità seriale con la libreria “Serial_Software” di Arduino. Lo sketch deve essere programmato in modo da ricevere i caratteri seriali che l’APP invia appunto via seriale. Ci sono diverse APP che gestiscono questo modulo in modo seriale. Quindi l’ unica complicazione è la programmazione dello sketch.

Dopo aver analizzato le due idee ho deciso di usare i moduli ESP_8266 per una serie di motivi. Qualche tempo fa ne avevo acquistati ben 5 del modello ESP_01 per fare delle esperienze. Ne avevo utilizzato solo uno per produrre un orologio digitale ON_LINE ovvero riprendendo il tempo da internet visualizzandolo su un LCD (data e orario completi). Perché allora lasciarli invecchiare nel cassetto ?.

L’uso di questo micro implica una serie di “complicazioni” e “aggiustamenti” nell’ambiente IDE di Arduino. Non è difficile basta seguire le indicazioni che si trovano nel WEB per aggiornare l’IDE sia in termini di “schede” che devono essere gestite sia in termini di “librerie” usabili. In effetti sia le “schede” che le “librerie” sono tantissime ma per prima cosa occorre inserire nelle impostazioni dell’IDE di Arduino la seguente definizione:

Url aggiuntive per il gestore schede: http//arduino.esp8266.com/stable/package_esp8266com_index,json

Poi se non viene eseguito in automatico, da menù “strumenti” selezionare “Gestione schede” e lasciare che l’IDE ricerchi le “schede” da aggiungere. Si dovrà allora nell’ elenco proposto scegliere come da figura: (nel mio ide sono già installate).

Se tutto va a buon fine nella selezione delle schede da usare si troverà un elenco di schede ESP che possono essere utilizzate: nella fattispecie è sufficiente selezionare la voce “Generic ESP8266 module”.

L’ESP8266_01 presenta (pur nelle sue dimensioni) ben 8 pin:

• VCC (3,3V tassativi !) e GND.
• Due pin definiti GPIO_0 e GPIO_2. Sono di pin che possono essere visti come INPUT/OUTPUT di segnali logici (Bit “0” Bit “1”) sempre rispetto al livello dei 3V. .
• RST per il reset del micro a massa per resettarlo altrimenti a “1” logico.
• Il pin EN (enable) che abilita il micro se posto a “1” logico.
• Due pin TX/RX che possono essere usati per ricevere e trasmettere dati seriali ricordandosi che il livello dei segnali è basato sui 3V di alimentazione. TX e TX vengono anche definiti come GPIO_1 e GPIO_3 in quanto potrebbero essere usati come pin di I/O ma con attenzione.

La complicazione sull’uso di questo micro sta nella programmazione se non si usa un adeguato sistema. Il pin GPIO_0 viene anche definito GPIO_0FLASH in quanto se posto a massa permette la scrittura dello sketch nella memoria flash del micro.

Non è così facile come sembra: c’è una specifica sequenza di operazioni da fare per portare detto micro in nella condizione di accettare il caricamento: spegnerlo, portare GPIO_0 a massa quindi riaccenderlo oppure fare un reset sempre con GPIO_0 a massa. Ma non è stato semplice. Ho avuto l’accortezza (senza saperlo) di acquistare un modulo “debugger” con il quale ho risolto appunto senza saperlo (inizialmente) proprio questo problema di caricamento.

Ecco i due moduli: A sinistra un modulo ESP_01 e a destra il modulo Debugger. E’ utilissimo: viene visto come una porta seriale (COM), ha un tastino per il reset del micro e il connettore maschio è la copia esatta degli 8 pin del micro e quindi perfettamente utilizzabili. Nessun problema per il caricamento dello sketch in quanto effettua un modo automatico l’operazione descritta al paragrafo precedente. Dopo il caricamento si può provare lo sketch senza toglierlo dall’adattatore. Ho trovato questo modulo su Futura_Shop a circa 6 euro. Diffidate da altri adattatori perché non hanno queste caratteristiche.

Un’ altra complicazione nell’uso di questo micro sta nell’ alimentazione: vuole soltanto 3,3 V e necessita di un sistema di alimentazione che fornisca i 3V con almeno 1A di corrente.
E non finisce qui: i livelli GPIO_0, GPIO_2 sono anch’essi a livello 3V. Ora se devono essere usati per interfacciare altri dispositivi che lavorano a livello 5V si rende necessario un convertitore di livello (o partitori di tensione che io sconsiglio) come interfaccia tra i pin del micro e i pin di altri dispositivi. Quasi tutti i dispositivi con protocollo I2C richiedono ai pin SDA/SCL i livelli corretti a 5V. Per inciso nel mio orologio internet con LCD I2C ho usato questi convertitori tra GPIO_0 e GPIO_2 del micro.

Ecco come si presentano: A sinistra l’ alimentatore con uscita 3V e a destra il modulo convertitore di livello con 4 canali. Questi convertitori hanno un ingresso a 5V e uno a 3V denominati HV e LV.
Le uscite sono bidirezionali: ciò che entra a 5V esce a 3 e viceversa.

(Immagini copiate dal sito EBMSTORE.it)

NOTA IMPORTANTE che quasi dimenticavo: quando escono dalla fabbrica (cinese) tutti gli ESP sono dotati di un software per gestire i comandi “AT” per intenderci quelli che venivano usati una volta sui vecchi modem telefonici. Con questi comandi è possibile verificare, tra gli altri, anche la connessione WIFI al proprio router e verificare anche quanti sono nel raggio di azione del chip anche se limitato. Per provare questi comandi, anche senza bisogno di sketch appositi, occorre effettuare una connessione seriale (baud rate 115200) utilizzando il monitor seriale di Arduino oppure l’Hyper Terminal di Windows. Serve allora un convertitore RS232/USB per connettersi ad una porta USB del PC. DI seguito una delle connessioni fattibili. Nel convertitore RS232 FTDI occorre spostare il ponticello da 5V a 3V per rendere compatibili i segnali.

ATTENZIONE: al primo caricamento di un qualsiasi  sketch sull’ ESP questo software “AT” viene perso e occorre scaricare dal web un’apposita applicazione “FLASH” per ricaricarlo.

Il progetto comincia a prendere forma: abbiamo il micro, l’ alimentazione corretta e l’ adattatore logico di livello. Adesso occorre studiare come accendere/spegnere singolarmente le 5 prese a 220 della ciabatta. Ho verificato due sistemi:

1. Pilotare un triac tramite foto accoppiatore con segnale a logica “1”. Avevo già sperimentato questi dispositivi con diversi circuiti ma si sono dimostrati sempre poco affidabili e non vanno bene per le lampade a risparmio energetico. Questo è uno dei circuiti.

2. Pilotare un relais con foto accoppiatore o tramite transistor anch’esso pilotato da un segnale a logica “1”. I due schemi seguenti non presentano problemi specifici salvo quello con foto accoppiatore funzionante solo con relais a 12V.

La scelta è caduta sull’interfaccia relais a 5V anche perché avevo a disposizione quasi 10 relais da circuito stampato con doppio scambio utilizzabili per commutare anche tensioni a 220V. Questi relais sono piuttosto anzianotti e non ricordo da dove li ho cannibalizzati. Questo il modello:

Fatto un prototipo ho provato la funzionalità e quindi ho deciso di preparare tutta l’interfaccia per gestire cinque di questi relais usando l’interfaccia con transistor.

Rimane solo un ultimo problema: i relais sono 5, il micro ESP ha sono 2 pin usabili senza problemi. Occorre quindi un dispositivo che permetta di aumentare questi pin. Anche in questo caso mi aiuta la mia passata esperienza con dispositivi tipo PCF8574 come quello in figura:

 

Questo dispositivo si interfaccia con protocollo I2C indirizzabile su 7 indirizzi diversi (vedi ponticelli nella figura). Può essere inserito in cascata con altri dispositivi analoghi o altri tipo LCD sempre I2C salvo il corretto indirizzo. L’unico problema di questi dispositivi è l’ingombro e inserirlo in un PCB può dare qualche problema. Sarebbe preferibile usare il singolo chip in quanto non necessita di particolari circuiti: 5V per l’alimentazione anche se supporta i 3V, un paio di resistenza di pull_up ai pin SDA/SCL, qualche ponticello per assegnare l’indirizzo e niente altro.
Gli 8 pin (più uno definito INT come interrupt) possono essere solo di Input o solo di Output o in modo misto. La lettura o scrittura su questi pin avviene semplicemente con la libreria WIRE (Wire.write o Wire.read).

Ma ci sono dei problemi: non per i pin definiti in ingresso, ma per quelli definiti in uscita occorre verificare bene come si devono usare. La corrente massima (vedi i datasheet) è troppo poca anche per pilotare un singolo led. Diversi forum ON_LINE dimostrano come devono essere connessi eventuali led o dispositivi che per loro natura assorbono correnti superiori a quella erogata dal dispositivo.

Questo in figura è uno degli esempi funzionanti per l’accensione di 8 led: si può notare la loro connessione: Anodo a VCC, catodo con R verso i pin. Facendo opportune prove ho potuto notare l’ottima luminosità di un classico LED verde. E’ importante però sapere che all’accensione del sistema tutti i pin del chip vengono posti a “1” logico: quindi mentre per lo schema precedente non ci sono anomalie (i led si accendono solo se il relativo pin viene posto a massa), nel mio caso può dare problemi in quanto tutti i relais si innescano con il segnale a “1” logico. E’ però superabile in quanto nello sketch la prima operazione da fare sarebbe quella di portare a “0” logico tutti i pin. Ma, c’è sempre un “ma”, c’è un tempo che per quanto sia in termini di millesimi è da tener presente: il micro si avvia dopo qualche secondo e ciò potrebbe causare problemi.
Non dimentichiamo che nei relais passerà una tensione a 220V.

Date queste premesse per non avere sorprese provo a fare qualche prova con cablaggi volanti e sketch minimali, connetto il PCF ad arduino (protocollo WIRE) e un pin all’ingresso del prototipo di accensione relais (Innesco con “1” logico). Perfetto: si accende e si spegne ma se ripetuto anche ad intervalli di qualche secondo a volte NON FUNZIONA !, risultando inaffidabile.

Ritengo allora che la scarsa disponibilità di corrente sia la causa di questa inaffidabilità: dopo qualche giro ON_LINE decido di modificare il metodo di innesco: invece di portare “1” logico il pin lo porto a massa. Ma questo comporta una modifica al circuito di innesco per cui, per non dover modificare il tutto, interpongo tra i pin del PCF e gli ingressi un circuito inversore. A prima vista un 74Ls04 potrebbe andare bene, però ho preferito usare un ULN2003A che è un “SEVEN DARLIGTON ARRAY” che fornisce una corrente di 500ma. Sette ingressi ed altrettante uscite tutte però “Open_Collector” per cui si rende necessaria una R da 4,7 ohm (o superiore) in pull_up verso i 5V per ogni pin. E agisce anche da inversore per cui un ingresso a “1” viene invertito in uscita a “0” e viceversa. Ottimo per quello che mi serve: dovrò semplicemente modificare nello sketch il metodo di accensione: da “1” a “0” per ogni relais. E non dovrò preoccuparmi se all’accensione i pin del chip vanno tutti a “1”. Nella figura la disposizione dei pin.

AVVIAMENTO DEL PROGETTO:

Ritengo, a questo punto, di aver tutto a disposizione per iniziare a produrre PCB e implementare qualche sketch con l’ ESP_01. Facciamo la “lista della spesa” per sapere se abbiamo effettivamente tutto quello che serve e cioè:

• N.1 ESP8266 modello 01
• N.1 Convertitore di livello 5V/3V
• N.1 Alimentatore da 3V (Input da 5 a 9V max)
• N. 1 PCF8574
• N. 1 ULN2003A
• N. 5 Relais Finder modello 30.22
• N. 5 transistor BC547
• N. 5 diodi 1N4007
• N. 5 LED AL. (qualunque colore)
• N. 10 resistenze valori secondo lo schema
• Connettori vari e zoccoli per il montaggio.
• Pulsante di Reset del micro
• Led (qualunque colore) come spia del sistema ON_LINE

Non avendo strumentazione più o meno professionale e nemmeno un ambiente idoneo mi devo accontentare di produrre solo pcb di piccole dimensioni. Pertanto questo progetto si compone di due PCB: PCB MAIN per alloggiare il cuore del sistema e PCB RELAIS per alloggiare i relais.

PCB MAIN:

Non ho disegnato un circuito da cui ricavare questo pcb ma è stato disegnato a mano libera cercando di evitare ponticelli e compattare meglio i componenti.

Si può notare: in alto a sinistra i connettori per alimentare la stessa scheda e altre; il connettore a quattro pin per l’inserimento del PCF8574. In basso a sinistra nel rettangolo rosso l’alimentatore da 3V. Nel mezzo il convertitore di livello a destra il connettore femmina per l’inserimento dell’ ESP_01. Il rettangolo giallo a forma di “L” rovesciata serve da guida per il taglio della parte in eccesso del PCB. Ecco la foto del PCB prodotto. Il taglio serviva ad inserire la scheda del PCF.

 

 

PCB RELAIS:

Questo pcb è il più complesso e per il disegno sono partito da un altro pcb prototipo prodotto per prove effettuando le dovute correzioni e facendo in pratica un copia/incolla.
Lo schema elettrico è quello delle figure precedenti. In alto nel pcb possiamo vedere i 6 connettori relativi a: 5 per le 5 prese e il sesto per il secondo ramo della tensione a 220.In basso a sinistra i pin di alimentazione 5V che verranno connessi al PCB main. Al centro i 5 pin di ingresso dei segnali di innesco dei relais. I diodi dopo ogni ingresso sono 1n4148.

Ecco nella foto come si presenta la scheda relais completata.

Non ci crederete ma dopo tutta la produzione di PCB (progettazione e produzione) mi accorgo di aver dimenticato di inserire un componente fondamentale: il driver di interfaccia tra le uscite del PCF8574 e gli ingressi del PCB relais. Non potevo certo mandare all’aria quanto fatto e mi sono dovuto accontentare di fare un ulteriore pcb per alloggiare il driver da interporre. E ho prodotto il seguente:

Le resistenze di PULL_UP sono da 4,7K.

Alla fine in questa foto il progetto completato:

Nel mezzo tra il PCB_Main e il PCB_Relais la schedina del driver. I tre connettori bianchi a destra della scheda relais servono a connettere i cavi di tensione delle 5 prese. Il sesto l’altro cavo di tensione del 220. Anche se non si nota bene in basso destra c’è il pulsante rosso che resetta il micro ESP e accanto un led che si accende quando tutto il sistema è ON_LINE come spiegherò nel capitolo software.

Abbiate pietà sulla costruzione del supporto: come bricolage sono una vera e propria frana: le dimensioni del contenitore sono 10×20 cm !! in plexiglass.

Nella foto seguente il progetto completo e funzionante.

Purtroppo la ciabatta non è in grado di ospitare niente data anche la dimensione dei dispositivi.

IL SOFTWARE DI GESTIONE:

Ed eccoci arrivati alla parte più interessante e fondamentale di tutto il progetto. Come ho già detto all’inizio la scelta è caduta sull’ utilizzo di una interfaccia WEB tramite una pagina HTML gestibile via WIFI da un qualsiasi PC, Tablet, o cellulare. Premetto che la realizzazione degli sketch non sono tutta farina del mio sacco, ma attraverso il WEB ho potuto scaricare vari esempi di gestione di un WEB_SERVER per accendere e spegnere dei led e da questi esempi sono partito per implementare gli sketch completandoli con la gestione del PCF8574. Un po’ di esperienza nella implementazione delle pagine HTML l’avevo fatta anni fa ma è passato molto tempo ho dovuto rinfrescare la memoria.

Gli sketch realizzati producono la seguente pagina HTML:

Nella prima riga lo stato dei relais ad indicare quali sono “ON” e quali “OFF”. Nella seconda e riga 5 bottoni per portare “ON” ciascun relais, nella terza riga altri 5 bottoni per portare “OFF” ciascun relais. Ad ogni pressione del relativo bottone la prima riga viene aggiornata di conseguenza. Infine nella 4 riga due bottoni “ALL_ON” e “ALL_OFF” accendono o spengono tutti i relais in un colpo solo.

Questa sottostante è la pagina HTML di un ulteriore sketch: Per inciso il disegno dei bottoni e stato effettuato con il software WYSIWYG che produce pagine HTML in modo visivo.

Il procedimento è analogo ma con una diversità: La prima riga evidenzia sempre lo stato dei relais. I bottoni sottostanti hanno una doppia funzione: quando sono di colore “rosso” significa che il relativo relais è spento. Ad ogni pressione il relativo bottone diventa di colore blu e la dicitura cambia da ON a OFF e così per tutti gli altri, così come il bottone “ALL_ON “ che diventa “ALL_OFF” di colore blu. E la la prima riga evidenzia sempre lo stato dei relais.

STRUTTURA E LOGICA DEGLI SKETCH:

Ho implementato due sketch chiamati Ciabatta_Web e Ciabatta_Web3. La logica di programmazione è sostanzialmente la stessa cambia solo il metodo di gestione del PCF8574 relativamente alla accensione/spegnimento dei relais e la scrittura delle righe che compongono la pagina web.

Per gestire delle pagine HTML ON_LINE con il supporto dell’ ESP_01 e altri modelli, ci sono vari metodi per un approccio corretto: non mi dilungo in questa sede su quali e quanti sono in quanto ognuno ha le sue caratteristiche specifiche ed un diverso metodo di gestione. Mi limito a descrivere quello usato nei due sketch.

Per accedere ad un sistema WIFI_Server occorre:

La libreria “ESP8266WiFi”. Che deve essere stata caricata una_tantum quando è stato aggiornato l’Ide di Arduino per le schede ESP.

La definizione dei parametri per accedere al proprio router casalingo: “ssid” che è il nome assegnato al router, e la sua password. Due semplici definizioni come queste: I nomi possono essere di propria scelta.

const char* ssid = “nome del router”;
const char* pwd = “password assegnata”

Infine l’assegnazione della porta al WiFiServer con questa definizione:
WiFiServer server (80); (il server “ascolta” sulla porta 80)

Ovviamente occorre anche definizione della libreria WIRE che serve a gestire il PCF8574.

In entrambi gli sketch è stato inserita la possibilità di effettuare un debug inserendo la classica Serial.print() in punti più o meno critici dello sketch attraverso il monitor seriale di Arduino o (che io consiglio) l’Hyper Terminal di Windows. Purtroppo su Windows 10 questa APP non viene fornita per cui occorre cercarla nel Web e scaricare la versione gratuita.

Viene quindi abilitata la porta seriale con baud a 115200 per l’ ESP (sembra che non funzioni a velocità inferiori) ma viene inserita anche una procedura per cui se non si preme un qualsiasi tasto entro 3 secondi vengono inibite le scritture sul monitor seriale delle segnalazioni di debug opportunamente programmate. Ma questa è una mia scelta personale. Del resto non esistendo altri metodi di debug interattivo, questa è la soluzione migliore per evitare di trovarsi al buio quando lo sketch per qualche motivo non risponde.

NOTA: per eseguire il debug sul monitor è necessario che l’ ESP sia connesso ad un convertitore seriale tipo FTDI232 oppure al modulino “debugger” che ho descritto in precedenza in modo da assegnare una porta COM.

Si passa quindi ad inizializzare il Wifi con il comando: WiFi.begin(ssid, pwd) e verificando attraverso un loop “while” che il WiFi.status sia ok: ovvero testando il parametro WL_CONNECTED finchè non è OK. Poiché la risposta del router potrebbe essere più lunga del normale è buona cosa inserire un timer di qualche secondo per evitare un loop infinito. Il router potrebbe non rispondere se i parametri sono errati o per altri cause.

Effettuando il WiFI.begin(ssid, pwd) per default quando il router risponde e la connessione viene effettuata, viene assegnato all’ ESP un indirizzo IP nella classica forma 192.168.1.XXX dove XXX è l’indirizzo effettivo assegnato. Diventa necessario quindi sapere quale indirizzo è stato assegnato (DHCP abilitato nel router) all’ ESP per poter poi dal browser connettersi e lanciare la pagina HTML. Questo indirizzo non cambierà mai un quanto viene associato al MAC Address dell’ ESP.

Ma come facciamo a sapere quale indirizzo è stato assegnato ?: Viene in aiuto il sistema di debug sul monitor seriale: dopo che la connessione è ok, viene inviato attraverso la classica Serial.print l’indirizzo assegnato con la frase: Serial.print(WiFi.localIP()).

C’è un altro sistema per ovviare questo possibile inconveniente: assegnare un indirizzo statico con le seguenti definizioni:

IPAddress ip (192.168.1.XXX) per definire l’indirizzo che si vuole nel parametro XXX.
IPAddress gateway (192.168.1.1) indirizzo del gateway del router
IPAddress subnet (255.255.255.0) maschera per gli indirizzi.

Quindi dopo il WiFi.begin aggiungere la frase WiFi.config(ip,gateway,subnet). Dal browser per accedere sarà sufficiente digitare l’indirizzo assegnato per connettersi. I nomi sono a piacere proprio.

Alla conclusione di queste operazioni andate a buon fine con la frase “server.begin()” si avvia il server pronto ad ascoltare le richieste che arrivano dal browser.

A questo punto e solo questo punto attraverso il PCF8574 (che è già stato inizializzato) viene inviato un byte con la configurazione 0111 111: ovvero il bit 7 su cui è connesso un led si accende ma rimangono spenti tutti i relais della ciabatta. L’accensione di questo led verifica che tutte le operazioni effettuate sono ok e che il sistema “server” è on_line. Questo sistema del led è una scelta personale.

Nel “setup” non c’è altro da aggiungere salvo eventuali operazioni per il settaggio di altri dispositivi che nella fattispecie del progetto non ci sono.

Nel “loop” la parte del leone viene dalla gestione del “client” ovvero del sistema che deve interagire con il server e ricevere i comandi inviati dalla pagina WEB. La prima cosa è istruire il “client” a verificare se il server è disponibile: un loop dopo la frase” WiFiClient client = server.available()” permette di verificare quando il server è disponibile. Se risponde positivamente verifichiamo con un loop che il client sia disponibile . Se tutto procede OK possiamo procedere con leggere quando viene inviato da browser, memorizzandolo in una stringa, e di conseguenza inviare al client le istruzioni che compongono la pagina HTML. L’ istruzione client.print o client.println funziona come una Serial.print e quindi tra parantesi si definiscono le frasi HTML. La stringa che abbiamo memorizzata contiene quanto definito nei parametri cioè quale bottone è stato premuto. Una apposita routine analizza questa stringa e prepara quella che deve essere visualizzata nella pagina WEB ad indicare quale relais è ON o OFF.

Ma più che le parole servono i fatti: ecco cosa viene emesso (debug dello sketch attivo) da quando con il browser ci connettiamo:

Output su porta seriale per la verifica della connessione:

Ciabatta WEB 3
Connecting to TPLINK_8968                      >>>>> CONNESSIONE AL ROUTER
………….                                                              >>>>>> ATTESA DELLA CONNESSIONE
WiFi connected. IP address: 192.168.1.113 >>>>>>> SERVER CONNESSO IP ASSOCIATO

SI EFFETTUA DAL BROWSER LA CONNESSIONE ALL’INDIRIZZO 192.168.1.113 E VIENE EMESSA LA PAGINA HTML PROGRAMMATA

New Client
GET / HTTP/1.1
Host: 192.168.1.113
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1

Client disconnected.                  >>>>>>> DISCONNESSIONE DEL CLIENT DALLO SKETCH
                                                 >>>>>>>> NESSUNA OPERAZIONE RICHIESTA

DA QUI IN AVANTI PER OGNI OPERAZIONE EFFETTUATA NELLA PAGINA DEL BROWSER VERRANNO EMESSE LE SEGUENTI FRASI QUANDO VIENE PREMUTO UN BOTTONE

Host: 192.168.1.113
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://192.168.1.113/6/ON   >>>>>>>> ECCO COSA INVIA IL BROWSER A SEGUITO DELLA PRESSIONE DI UN  BOTTONE: IN QUESTO CASO IL SESTO BOTTONE

Upgrade-Insecure-Requests: 1

Client disconnected.

CONCLUSIONI:

Premetto che tutto quanto è stato realizzato e completato è solo ed esclusivamente prodotto dal sottoscritto. Sicuramente può essere migliorato e pensato anche in modo diverso e più professionale. Anche le scelte circuitali possono essere oggetto di modifiche e sicuramente un approccio diverso potrebbe dare risultati migliori. Ma non sono un professionista e la mia esperienza in elettronica è limitata.

Ringrazio comunque dell’ attenzione.

Gvsoft luglio 2020.

 

VOTO
2 commenti
  1. Picmicro675
    Picmicro675 dice:

    Lavoro di un bell’impegno. Per un certo caso mi sembra che Just4Fun ha fatto una schedina proprio simile alla parte ESP-01 e PCF8574.
    Infine più che una ciabatta sarà uno scarpone, visto che i componenti sono diventati di un certo volume e non fattibile montarli al posto degli interruttori.
    Comunque sempre una interessante spiegazione di questi moduli che nelle mie prove hanno dato qualche grattacapo.

    Approvazioni

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento