


























Open Wokwi in a new tab and start experimenting.
/*
ESP32 + DHT22 -> MQTT -> Node-RED demo (Wokwi)
Wiring:
DHT22 VCC -> ESP32 3V3
DHT22 SDA -> ESP32 GPIO15
DHT22 NC -> not connected
DHT22 GND -> ESP32 GND
MQTT: using the public broker.hivemq.com for a quick test.
This is a public broker, so don't put private data on it.
*/
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHTesp.h>
// ---- Wiring ----
#define DHT_PIN 15
// ---- WiFi (Wokwi's built-in virtual network) ----
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// ---- MQTT ----
const char* MQTT_BROKER = "broker.hivemq.com";
const int MQTT_PORT = 1883;
const char* MQTT_CLIENT_ID = "iot-YOURNAME-dht22";
// Change YOURNAME below too, so your topics don't collide with anyone else's
const char* TOPIC_TEMPERATURE = "YOURNAME/dht22/temperature";
const char* TOPIC_HUMIDITY = "YOURNAME/dht22/humidity";
DHTesp dht;
WiFiClient espClient;
PubSubClient mqtt(espClient);
void connectWiFi() {
Serial.printf("Connecting to WiFi \"%s\" ", WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println(" connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void connectMQTT() {
while (!mqtt.connected()) {
Serial.print("Connecting to MQTT broker...");
if (mqtt.connect(MQTT_CLIENT_ID)) {
Serial.println(" connected!");
} else {
Serial.printf(" failed, rc=%d, retrying in 2s\n", mqtt.state());
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
delay(500);
dht.setup(DHT_PIN, DHTesp::DHT22);
connectWiFi();
mqtt.setServer(MQTT_BROKER, MQTT_PORT);
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
connectWiFi();
}
if (!mqtt.connected()) {
connectMQTT();
}
mqtt.loop();
TempAndHumidity reading = dht.getTempAndHumidity();
if (dht.getStatus() != 0) {
Serial.print("DHT22 error: ");
Serial.println(dht.getStatusString());
} else {
char tempStr[8];
char humStr[8];
dtostrf(reading.temperature, 4, 1, tempStr);
dtostrf(reading.humidity, 4, 1, humStr);
Serial.printf("Temp: %s C Humidity: %s %%\n", tempStr, humStr);
mqtt.publish(TOPIC_TEMPERATURE, tempStr);
mqtt.publish(TOPIC_HUMIDITY, humStr);
}
delay(2500); // DHT22 refreshes at most every ~2s
}# ESP32 + DHT22 -> MQTT -> Node-RED demo (Wokwi, MicroPython)
#
# Wiring:
# DHT22 VCC -> ESP32 3V3
# DHT22 SDA -> ESP32 GPIO15
# DHT22 NC -> not connected
# DHT22 GND -> ESP32 GND
#
# Uses the built-in `dht` and `network` modules, plus umqtt.simple
# for MQTT -- Wokwi's MicroPython firmware bundles umqtt.simple by
# default. If it's missing, add a requirements.txt with the line
# "umqtt.simple" to your project and Wokwi will fetch it.
from machine import Pin
import network
import dht
import time
from umqtt.simple import MQTTClient
# ---- Wiring ----
DHT_PIN = 15
# ---- WiFi (Wokwi's built-in virtual network) ----
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# ---- MQTT ----
MQTT_BROKER = "broker.hivemq.com"
MQTT_PORT = 1883
MQTT_CLIENT_ID = "embedclub-YOURNAME-dht22"
TOPIC_TEMPERATURE = "YOURNAME/dht22/temperature"
TOPIC_HUMIDITY = "YOURNAME/dht22/humidity"
sensor = dht.DHT22(Pin(DHT_PIN))
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Connecting to WiFi "{}" '.format(WIFI_SSID), end="")
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
time.sleep_ms(300)
print(".", end="")
print(" connected!")
print("IP address:", wlan.ifconfig()[0])
return wlan
def connect_mqtt():
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, MQTT_PORT)
while True:
try:
print("Connecting to MQTT broker...", end="")
client.connect()
print(" connected!")
return client
except Exception as e:
print(" failed, retrying in 2s:", e)
time.sleep(2)
wlan = connect_wifi()
mqtt = connect_mqtt()
while True:
if not wlan.isconnected():
wlan = connect_wifi()
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print("Temp: {} C Humidity: {} %".format(temp, hum))
mqtt.publish(TOPIC_TEMPERATURE, str(temp))
mqtt.publish(TOPIC_HUMIDITY, str(hum))
except OSError as e:
print("DHT22 error:", e)
except Exception as e:
print("MQTT publish failed, reconnecting:", e)
mqtt = connect_mqtt()
time.sleep_ms(2500)
Connecting to WiFi "Wokwi-GUEST" ..... connected!
IP address: 10.10.0.2
Connecting to MQTT broker... connected!
Temp: 24.0 C Humidity: 40.0 %npm install -g --unsafe-perm node-red
node-red"%APPDATA%\npm\node-red.cmd"