Premessa: un rilevatore di fumo è una sicurezza per eventuali incendi. Creare un sistema con componenti elettronici assemblati può non dare la garanzia di funzionamento e non può sostituire un rilevatore testato e venduto da canali ufficiali.

Detto quanto sopra, nel mio caso il rilevatore di fumo è affiancato a quello tradizionale incluso nel sistema di allarme funzionante in casa (Visonic).
Per la realizzazione di ciò ho trovato utilissime le informazioni contenute nel sito "Randomnerdtutorials.com" che consiglio a tutti coloro i quali si vogliono cimentare con ESP8266, ESP32, ecc. (mi è servito anche per la camera abbinata ad ESP32)
Per il programma ho dovuto rispolverare le conoscenze su Arduino e il suo "C" non ortodosso, messe da parte per molti anni.

HARDWARE:

- ESP8266 NODEMCU
- SENSORE FUMO (E GAS) MQ-2


Nelle foto sotto si vede il sensore montato nella scatola da posizionare sul soffitto:

Il circuito è molto semplice (come cerco di solito di fare); il sensore è collegato all'ESP con GND, VCC o Vin e A0, ingresso analogico (visto che leggerà i volt equivalenti ai ppm).
Ho trovato, per questo lavoro, due tipi di sensori MQ-2, quello che funziona da 2.5v a 5v (a DX nella foto) e quello che funziona solo a 5v (a SX).

E' importante capire subito quale sensore volete collegare perchè se prendete i 3.3v dall'uscita Vcc per alimentare il sensore a 5v, dopo un certo periodo di funzionamento la ESP8266 si brucerà, esperienza diretta!
Infatti dopo avere collegato il primo MQ-2 alla Vcc a 3.3v, perchè del tipo giusto, e non avere avuto nessun problema, quando ho acquistato un altro sensore mi sono dimenticato di controllare la tensione di funzionamento. Da subito ho notato che i valori di assenza gas-fumo erano sempre più alti ma non ho dato peso a ciò.
Dopo un paio di giorni, la fine dell'ESP! Infatti collegare un sensore che richiede 5v (e questo perchè deve essere caldo per funzionare) all'uscita da 3.3v crea una sovracorrente che alla fine brucia l'ESP8266.
Nel caso del sensore a 5v si può collegare alla Vin della ESP che in realtà non è fatta per alimentare device esterni ma, se si tratta di un (1) sensore può essere sfruttata in quanto a 5v.
Ricordarsi che per la prima volta deve essere collegato all'alimentazione (sempre preferibile a 5v) per 24 ore.

C'è pure un led che segnala il superamento della soglia, collegato all'ESP con GND e uscita digitale. La resistenza da 220ohm (per i 3.3v può essere utilizzata una da 120 ohm) è messa in linea direttamente sul led. Attenzione a non collegare il led al contrario perché non funzionerà.

Non si vede nessun buzzer o simile perché ho voluto fare un rilevatore solo per segnalazioni in remoto, quando non ci sarebbe nessuno in casa (che è poi il caso, purtroppo, più frequente).

Tutto è poi basato su MQTT ed il solito python. Il concetto che ho sviluppato è questo: in caso di superamento della soglia di valore impostata (100 per ora, da verificare) viene mandato un messaggio via mail e via pushover (i devices su cui si leggono le mail hanno un intervallo di push notifications non continuo mentre la seconda via è immediata).

In pratica il sensore legge i valori ogni 10 secondi e li pubblica sul server MQTT. Un client di MQTT, sempre in funzione, legge questi dati e li mostra in una dashboard di controllo. Se i valori sono sotto il limite, la dashboard mostra, oltre al valore, la scritta "OK". Se i valori superano il limite la scritta cambia in "SMOKE" e i messaggi vengono inviati.
Per ottimizzare il limite di rilevamento ho predisposto anche un file di log che segna i valori superiori a 100 rilevati. Lo scopo è di monitorare la cucina (zona dove ho messo questo primo sensore) e capire se certe situazioni come il vapore delle pentole possono creare falsi allarmi.

Una nota sui valori letti: si tratta di un valore che va da 0 a 1023. Un valore di 300, ad esempio e per una tensione di 5 volt, corrisponde a 1.5 volt. Infatti, 1023 = 5v, 5/1023 = 0.00489, questo valore per 300 = 1.5 volt circa.

Alla base di questo sistema ci deve essere una connessione funzionante (e qui c'è la differenza importante con un sistema di allarme collegato ad un combinatore telefonico su SIM).
Nel mio sistema però, per una migliore sicurezza, ho previsto questi casi:

a) la rete cade: non ricevo più niente da nessun device. Può succedere, spesso, ma la probabilità che succeda prima di un eventuale inizio di incendio è molto bassa. In questo caso subentrerebbe il secondo sensore con l'antifurto. Se volessi, potrei implementare un sistema che fa il check della rete ogni tot e, in caso di stop manda un messaggio con il 3G.

b) il broker che riceve i dati dal sensore si blocca oppure....

c) il sensore perde la connettività wifi o si spenge: in questi casi ho messo un controllo sul client che fornisce la dashboard visualizzata. Il sensore pubblica sul broker, insieme al valore, il time aggiornato ai minuti. Questo time si continua quindi ad aggiornare sul broker. Se per qualche motivo (perdita connessione, stop del sensore o stop del broker) questo time non si aggiorna, il check che il client fa tra il suo time e quello dal broker non sarà superato ed un messaggio verrà inviato (insieme alla scritta "STOP" sulla dashboard).

Qui sotto le schermate con il dash del rilevatore in basso a sinistra: