Buongiorno a tutti.
Sperimentando con i vari servizi gratuiti offerti da Google, ed in particolare con Google Firebase, mi sono imbattuto in questa libreria completissima che consente di usare questo servizio cloud con le MCU Espressif (per ora solo quelle purtroppo).
Google Firebase è una suite di servizi (Realtime Database, Firestore, Hosting, Storage etc etc) che già con il piano gratuito Spark Plan può coprire abbondantemente le esigenze Cloud più comuni di noi makers.
Ad esempio, con Realtime Database, il sevizio che sto usando in questo momento, abbiamo a disposizione un totale di 1GB per i nostri dati ed un traffico massimo di 10GB/mese.
Il Realtime Database è un servizio davvero interessante, veloce ed efficiente, ma in particolare ciò che mi interessava in questo caso è la possibilità di "sottoscrivere" lo streaming degli eventi in funzione di un "topic", un po' come si fa con MQTT.
In parole povere se scrivo o aggiorno un dato sul database, tutti i client connessi vengono notificati.
Da qui l'idea di utilizzarlo come infrastruttura per collegare una webpage (o una web app su dispositivi mobile) al nostro microcontrollore e devo dire che funziona davvero alla grande!
Massima flessibilità, tempi di risposta velocissimi ed il vantaggio di avere come dipendenza "esterna" un colosso come Google che difficilmente smetterà di esistere dall'oggi al domani o stravolgerà la "politica dei prezzi" e di ciò che offre gratuitamente.
Quando realizzo webpage da usare come interfaccia grafica per una MCU, io di solito uso WebSocket per avere un canale di comunicazione bidirezionale e poter aggiornare la GUI non solo quando l'utente esegue un'operazione, ma anche quando lato MCU si genera un evento e voglio notificare/aggiornare l'utente.
Usando lo stesso approccio ho fatto questo progetto di prova con la classica pagina che mostra un elenco di I/O con stato e pulsante per attivare disattivare le uscite esp-vue-gui-firebase
Il firmware per la MCU è poco più dell'esempio incluso nella libreria, modificato secondo le mie esigenze per inviare un payload con l'elenco dei pin e del relativo stato (in formato JSON) ogni volta che lo stato di uno dei gpio monitorati cambia e fare il parsing dei comandi ricevuti dalla pagina (sempre JSON, unico comando supportato writeOut).
Per sviluppare pagine web, negli ultimi tempi sto imparando ad usare il framework Vue di cui sono entusiasta, ma ovviamente lo stesso funzionamento si può ottenere anche con l'utilizzo di HTML e Javascript "plain".
Se volete provare/migliorare rapidamente il progetto che ho realizzato, dopo aver installato Vue (e Node.js), scaricate o clonate il repository, aprite un terminale (nella cartella del progetto ovviamente) e digitate questo comando per installare in automatico tutte le dipendenze necessarie
npm install
Completata l'installazione, con il comando
npm run build
verrà generato il codice html/javascript/css nella cartella /dist
Per provare rapidamente la pagina invece, con
npm run serve
verrà avviato un webserver locale. Io uso VSCode che ha il terminale integrato per fare tutto: sia firmware ESP che progetto Vue.
I contenuti html/javascript/css che vengono generati possono essere poi caricati su un sito "statico". Lo stesso Google ha un servizio del genere, ma io ho usato Github perché più rapido: basta solo fare l'upload dei file contenuti in /dist cosi come sono ( i file .map in realtà non sono necessari).
Ad esempio questa è la mia pagina (chiaramente se l'ESP è spento, non vedrete cambiare nulla).
https://cotestatnt.github.io. Le credenziali di test sono dummyemail@email.it - dummypassword