Questo progetto implementa un sistema di domotica intelligente (Smart Home) basato su architettura IoT (Internet of Things). L'obiettivo è fornire un controllo automatizzato e manuale degli attuatori (luci e sistema di condizionamento/buzzer) all'interno di una stanza, basando le decisioni su sensori ambientali.
Il sistema è suddiviso in moduli distinti che comunicano tramite il protocollo MQTT e un bridge WebSocket per l'interfaccia utente.
graph TD
subgraph "Hardware (ESP32)"
S[Sensor Board] -- "MQTT (sensor/)" --> Broker
A[Actuator Board] -- "MQTT (esp/)" --> Broker
end
subgraph "Cloud / Network"
Broker((MQTT Broker<br/>HiveMQ))
end
subgraph "Backend Server"
Bridge[Server Bridge<br/>Python] -- "MQTT" --> Broker
Bridge -- "WebSocket" --> Dashboard
Bridge -- "SQL" --> DB[(SQLite DB)]
end
subgraph "Frontend"
Dashboard[Web Dashboard<br/>HTML/JS] -- "WebSocket" --> Bridge
end
Broker -- "MQTT (cmd/)" --> A
| Modulo | Microcontrollore | Sensori/Attuatori |
|---|---|---|
| Room Sensor Board | ESP32 | Sensore PIR (Movimento), Sensore DHT22 (Temperatura/Umidità). |
| Room Actuator Board | ESP32 | LED (Simula Luce), Buzzer (Simula Condizionatore/AC). |
| Modulo | Tecnologia Principale | Protocollo/Libreria | Ruolo |
|---|---|---|---|
| Microcontrollori | C++/Arduino | MQTT | Comunicazione Device-to-Device e verso il Server. |
| Server Bridge | Python / Flask | MQTT / WebSocket | Ponte tra la rete locale (MQTT) e l'interfaccia web (WS), gestione DB. |
| Dashboard | HTML / JS / Bootstrap | WebSocket | Interfaccia utente in tempo reale. |
| Data Visualization | JavaScript | Plotly.js | Rendering di grafici storici (Temperatura). |
Il sistema supporta due modalità operative principali per ogni attuatore:
- Modalità Automatica: Il condizionatore (simulato dal Buzzer) si attiva se la temperatura rilevata dal sensore DHT22 supera la soglia di 24°C.
- Modalità Manuale: L'utente può forzare l'attivazione o lo spegnimento ("Toggle Buzzer") dalla dashboard.
- Nota: Se la temperatura è critica (> 24°C), il sistema potrebbe riattivare il condizionatore per sicurezza anche se spento manualmente.
- Modalità Automatica: La luce si accende automaticamente se viene rilevato movimento (PIR).
- Modalità Manuale: L'utente può forzare l'accensione della luce tramite la dashboard.
- Nota: La modalità manuale funge da override per mantenere la luce accesa. Se disattivata, la luce segue lo stato del sensore di movimento.
Prima di avviare il progetto, verifica ed eventualmente modifica i parametri di configurazione nei seguenti file:
File: serverBridge/variable.py
In questo file puoi impostare:
- MQTT_URL / PORT: Indirizzo del broker HiveMQ.
- MQTT_USER / PASS: Credenziali di accesso al broker.
- WEBSOCKET_PORT: Porta del server WebSocket (default:
8080).
File: roomDashboard/js/socket.js
- WebSocket URL: Modifica la riga
const webSocket = new WebSocket('ws://localhost:8080');se il server Python gira su un IP diverso (es. se accedi da smartphone).
File: *.ino (in roomActuatorBoard 2 e sensor-board (1))
- ssid / password: Credenziali della rete WiFi.
- mqtt_server / mqtt_user / mqtt_pass: Credenziali del broker MQTT.
- Nota: Se usi Wokwi, queste sono già configurate per la rete Guest virtuale.
Per eseguire il progetto completo, seguire questi passaggi in ordine.
- Python 3.x installato.
- Connessione Internet (per il broker MQTT HiveMQ Cloud) preferibilmente senza firewall.
- Aprire un terminale nella cartella
serverBridge. - Installare le dipendenze:
pip install -r requirements.txt
- Avviare il server backend:
python app.py
- Il server avvierà sia l'API Flask che il Bridge WebSocket/MQTT.
- Aprire il file
roomDashboard/index.htmlin un browser web moderno.
Caricare i firmware sulle rispettive schede ESP32 (o simulatori Wokwi):
- Room Sensor Board: Caricare
sensor-board (1)/sketch.ino. - Room Actuator Board: Caricare
roomActuatorBoard 2/sketch.ino. - Le versioni Wokwi simulate del sensore e attuatore sono disponibili ai seguenti link:
- SENSORE: https://wokwi.com/projects/447411725151306753
- ATTUATORE: https://wokwi.com/projects/447413070768226305
Una volta verificate le connessioni al WiFi e al Broker MQTT (visibili da Monitor Seriale), il sistema è operativo.
- Diego Andruccioli
- Rei Mici
- Giovanni Morelli
Corso di Laboratorio di Sistemi Embedded e Iot | CdL Tecnologie dei Sistemi Informatici | Università di Bologna | A.A. 2025-2026