Blog
ESP32 MQTT Smart Home: Dati al Cloud in 30 Minuti
Il Problema
Hai costruito una stazione meteo con l’ESP32. Temperatura e umidità vengono visualizzate perfettamente sul serial monitor. Ma ecco il problema — quei dati sono intrappolati nel tuo laptop. Non puoi controllarli dal telefono. Non puoi registrarli. Non puoi innescare automazioni.
MQTT risolve tutto questo. È il protocollo di comunicazione che alimenta la maggior parte dei sistemi IoT nel mondo — dalle fabbriche intelligenti alle installazioni Home Assistant.
Cosa Costruirai
Un nodo sensore ESP32 che:
- Legge temperatura e umidità ogni 30 secondi
- Pubblica i dati su un broker MQTT cloud gratuito
- Ti permette di monitorare tutto da qualsiasi browser web, ovunque
Difficoltà: Principiante | Tempo: 30 minuti | Costo: ~$23 di componenti
Hardware Necessario (Bill of Materials)
| Componente | Modello | Qtà | Prezzo | Acquista |
|---|---|---|---|---|
| Microcontrollore | ESP32 DevKitC V4 | 1 | $13.49 | Vedi Prodotto |
| Sensore Temp/Umidità | DHT22 | 1 | $5.24 | Vedi Prodotto |
| Display (opzionale) | 0.96″ OLED SSD1306 | 1 | $5.99 | Vedi Prodotto |
| Breadboard | 830 punti | 1 | $4.49 | Vedi Prodotto |
| Cavi Jumper | M-M 40 pz | 1 | $2.99 | Vedi Prodotto |
Passo 1: Cablaggio
ESP32 ↔ DHT22
| Pin DHT22 | Pin ESP32 | Nota |
|---|---|---|
| VCC | 3V3 | Alimentazione |
| GND | GND | Terra |
| DATA | GPIO 13 | Linea dati |
ESP32 ↔ OLED (opzionale)
| Pin OLED | Pin ESP32 | Nota |
|---|---|---|
| VCC | 3V3 | Alimentazione |
| GND | GND | Terra |
| SDA | GPIO 21 | Dati I2C |
| SCL | GPIO 22 | Clock I2C |
Passo 2: Installa le Librerie
Apri Arduino IDE → Sketch → Includi Libreria → Gestisci Librerie e installa:
- PubSubClient di Nick O’Leary (comunicazione MQTT)
- DHT sensor library di Adafruit (driver DHT22)
- Adafruit SSD1306 (display OLED, se lo usi)
Passo 3: Carica il Codice
#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
// --- WiFi Settings ---
const char* ssid = "YOUR_WIFI_SSID";
const char* password = "YOUR_WIFI_PASSWORD";
// --- MQTT Settings ---
const char* mqtt_server = "broker.hivemq.com";
const int mqtt_port = 1883;
const char* temp_topic = "sensbench/home/temperature";
const char* hum_topic = "sensbench/home/humidity";
// --- Sensor Settings ---
#define DHTPIN 13
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// --- Globals ---
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
delay(10);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("nWiFi connected! IP: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
while (!client.connected()) {
Serial.print("Connecting to MQTT...");
String clientId = "sensbench-" + String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("connected!");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5s");
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
dht.begin();
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Sensor read failed!");
return;
}
char tempStr[8], humStr[8];
dtostrf(t, 4, 2, tempStr);
dtostrf(h, 4, 2, humStr);
client.publish(temp_topic, tempStr);
client.publish(hum_topic, humStr);
Serial.printf("Temp: %s°C Humidity: %s%%n", tempStr, humStr);
delay(30000);
}
Passo 4: Guarda i Tuoi Dati nel Cloud
- Apri https://www.hivemq.com/mqtt-web-client/ nel browser
- Clicca su Connect
- Sotto Subscriptions, aggiungi il topic:
sensbench/home/# - Guarda il tuo ESP32 inviare dati in tempo reale ogni 30 secondi
E Adesso?
Ora che i tuoi dati sono nel cloud, puoi:
- Creare una dashboard con Node-RED o Home Assistant per visualizzare i dati
- Aggiungere altri sensori — BME280 per la pressione atmosferica, umidità del terreno per le piante
- Innescare automazioni — “se la temperatura > 30°C, accendi la ventola”
- Passare a batteria — aggiungi la modalità deep sleep per mesi di funzionamento