In questo repository trovate il codice in MicroPython per ESP32 per il corso tenuto dalla nostra scuola (a.s. 2022/23) rivolto ai docenti per la creazione di una stazione di monitoraggio ambientale che copre gli argomenti di Python, IoT ed Intelligenza Artificiale.
Riferimenti:
- Sito di presentazione
- Corsi su ScuolaFutura:
- ID.120087 Modulo 1: Python
- ID.120182 Modulo 2: IoT
- ID.120238 Modulo 3: Intelligenza Artificiale
Il progetto attualmente prevede la lettura dei dati da un sensore SDS011 per il rilevamento delle polveri sottili PM 2.5 e PM 10. La scheda invia anche il timestamp di lettura del dato, ottenendo l'orario da Internet con la libreria ntptime
.
I dati vengono inviati tramite il protocollo MQTT ad un broker online e successivamente trattati attraverso Python con la libreria Scikit-learn di intelligenza artificiale, per analizzare le correlazioni tra i dati (attualmente solo PM e orario).
Per il progetto abbiamo usato:
- Thonny IDE come editor e per caricare il firmware di MicroPython sulle schede ESP32.
- per gestire la scheda in modo wireless si consiglia anche WebREPL
Di seguito le immagini per il corretto collegamento della scheda al sensore.
Per configurare il wifi, creare il file src/esp32/config.py
e mettere all'interno le seguenti righe:
WIFI_SSID = "<ssid>"
WIFI_PASSWORD = "<password>"
sostitutendo <ssid>
e <password>
con il nome e la password della vostra rete WiFi.
- Andare su http://www.hivemq.com/demos/websocket-client/
- Cliccare "Connect"
- Su Subscriptions, cliccare "Add New Topic Subscription"
- Nel campo Topic, digitare "pm-sds011" quindi cliccare su "Subscribe"
Per collegare MQTT con il database NoSQL (nel nostro caso, MongoDB Atlas), abbiamo usato Node-RED installato localmente sul server della scoula.
Il flusso nodered è estremamente semplice.
I nodi necessari sono:
Trovate il flusso da importare tra i file sorgente. È necessario configurare correttamente il broker MQTT e le credenziali di accesso al server MongoDB.
Qui potete vedere un esempio di dahsboard per l'analisi dei dati.