Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ENV Pro Monitor icon

M5Stack StickC Plus2 — ENV Pro Monitor

Monitor ambientale multi-pagina per M5Stack StickC Plus2 con sensore ENVPROUnit (BME688).
Mostra temperatura, umidità, pressione, punto di rugiada, temperatura percepita e qualità dell'aria.


Hardware richiesto

Componente Dettaglio
M5Stack StickC Plus2 MCU ESP32, display 135×240 px
ENVPROUnit Sensore BME688 (temp, umidità, pressione, gas)
Connessione Port A (Grove): SDA=GPIO32, SCL=GPIO33

Firmware

  • UIFlow2 v2.4.6
  • MicroPython v1.27.0-dirty (build 2026-06-10)

Struttura progetto

m5stack-envpro/
├── main.py               # Applicazione principale
├── secrets.py            # Credenziali WiFi/ThingSpeak — locale, NON committato
├── secrets.example.py    # Template di secrets.py
├── README.md
├── CHANGELOG.md
├── LICENSE
└── .gitignore

Pagine display

Naviga con Pulsante A (click ciclico):

Pagina 0 — LIVE DATA

  • Temperatura (°C) con simbolo grado
  • Dew point / punto di rugiada
  • Feels like / temperatura percepita (heat index)
  • Umidità relativa (%)
  • Pressione atmosferica (hPa) con trend ↑↓=

Pagina 1 — MAX RECORDS

  • Massimo storico di temperatura, umidità e pressione
  • Reset con Pulsante B (hold)

Pagina 2 — SYSTEM INFO

  • Livello batteria (%)
  • Uptime (hh:mm:ss)
  • Intervallo di campionamento
  • Stato WiFi (OFFLINE / CONNESSIONE... / CONNESSO / NON RIUSCITA) e SSID selezionato

Pagina 3 — AIR QUALITY

  • Gas resistance BME688 in KOhm
  • Qualità aria con colore dinamico:
Soglia Qualità Colore
> 100 KOhm BUONA 🟢 Verde
50–100 KOhm DISCRETA 🟡 Giallo
< 50 KOhm SCARSA 🔴 Rosso

Nota: la gas resistance è un valore relativo, non un indice IAQ calibrato.
Valori più alti indicano aria più pulita. Per un indice IAQ preciso è necessario
l'algoritmo BSEC di Bosch (non incluso).

Pagina 4 — WIFI

  • Stato connessione (grande, colorato)
  • Rete selezionata tra quelle configurate
  • Indirizzo IP (se connesso)
  • Esito ultimo upload ThingSpeak (--- mai tentato, OK, ERR)

WiFi e upload ThingSpeak

Credenziali WiFi e API key ThingSpeak non stanno in main.py (finirebbero su GitHub in chiaro), ma in secrets.py, locale e gitignorato:

cp secrets.example.py secrets.py
# poi modifica secrets.py con le tue reti/API key reali
# secrets.py
WIFI_NETWORKS = [
    {"ssid": "NOME_RETE_1", "password": "PASSWORD_1"},
    {"ssid": "NOME_RETE_2", "password": "PASSWORD_2"},
]
THINGSPEAK_API_KEY = "TUA_WRITE_API_KEY"

Non essendoci una tastiera a bordo per digitare SSID/password a runtime, WIFI_NETWORKS è una lista di reti note, in ordine di preferenza.

secrets.py va caricato sul device separatamente da main.py (non è nel repo, quindi MicroPico non lo carica in automatico):

mpremote connect <porta> cp secrets.py :secrets.py

Se manca sul device, WiFi e upload ThingSpeak restano disabilitati senza bloccare il resto dell'app (temperatura/umidità/pressione/gas continuano a funzionare offline).

Al boot (e ad ogni retry, ogni 30s se offline) il device scansiona le reti visibili e si collega automaticamente a quella nota con segnale migliore. In pagina WIFI puoi anche:

  • B — click: cambia manualmente la rete selezionata tra quelle configurate
  • B — hold: forza subito il tentativo di connessione alla rete selezionata

Ad ogni lettura, se il WiFi è connesso, i dati vengono inviati in upload al canale ThingSpeak ogni THINGSPEAK_INTERVAL:

Campo Valore
field1 Temperatura
field2 Umidità
field3 Pressione
field4 Dew point
field5 Feels like
field6 Gas resistance

La Write API Key si imposta in:

THINGSPEAK_API_KEY = "..."

Limiti piano free ThingSpeak

Limite Valore
Intervallo minimo tra update dello stesso canale 15s
Messaggi/anno 3.000.000
Canali 4

THINGSPEAK_INTERVAL è impostato a 10 minuti di default: ben sopra il minimo di 15s e produce ~144 upload/giorno (~52.000/anno), ampiamente sotto la soglia annua. L'esito di ogni upload viene verificato leggendo la risposta di ThingSpeak (l'entry id: 0 = rifiutato, es. rate limit o API key errata) e mostrato in pagina WIFI (ts_status: OK / ERR) invece di fallire in silenzio.

Tutte le operazioni WiFi (scan, connessione, upload) sono non bloccanti o a timeout limitato, per evitare di bloccare la lettura sensore e la UI.


Controlli

Pulsante Azione
A — click Pagina successiva (0→1→2→3→4→0)
A — hold Schermo on/off (risparmio batteria)
B — hold Reset record massimi + beep (in pagina WIFI: forza connessione)
B — click (solo in pagina WIFI) cambia rete selezionata

Setup VSCode

  1. Installa l'estensione MicroPico (Paulober)
  2. Collega il device via USB
  3. Seleziona la porta seriale corretta in basso a destra
  4. Carica main.py con "Upload file to Pico" o drag & drop tramite explorer MicroPico

Il file deve trovarsi nella root del device come /flash/main.py
oppure /main.py a seconda del firmware.

Estensioni VSCode consigliate

{
  "recommendations": [
    "paulober.pico-w-go",
    "ms-python.python",
    "ms-python.vscode-pylance"
  ]
}

I2C — nota tecnica

Su UIFlow2 il bus I2C 0 è riservato internamente dal firmware.
Usare sempre bus 1 con pin espliciti:

i2c0 = I2C(1, scl=Pin(33), sda=Pin(32), freq=100000)

Roadmap

  • Upload dati su ThingSpeak via WiFi
  • Calibrazione baseline gas resistance per IAQ relativo
  • Grafico storico temperatura su display
  • Modalità deep sleep tra le letture

Licenza

MIT — vedi LICENSE

About

An advanced MicroPython weather and air quality monitor using M5Stack and the ENV III / ENV Pro (BME280/SGP30) unit, featuring multi-page UI, real-time metrics, heat index, and data logging.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages