MicroPython MQTT Weather Logger (ESP32)




Wokwi Simulator Setup

1 

Create MicroPython Project

1. Go to wokwi.com

2. Click "New Project"

3. Select "ESP32" board

4. In the project settings, choose "MicroPython" as the firmware

2 

Add DHT22 Sensor

1. Click the "+" button to add parts

2. Search for "DHT22"

3. Place the DHT22 sensor on the canvas

4. Connect the wires:

  • VCC (Pin 1) → ESP32 3V3
  • DATA (Pin 2) → ESP32 GPIO 15
  • GND (Pin 4) → ESP32 GND
 4 

Configure wokwi.toml

The wokwi.toml file configures the simulation environment:

wokwi.toml
[wokwi] version = 1 firmware = "micropython-20240222-v1.22.2" elf = "" [[wokwi.wifi]] ssid = "Wokwi-GUEST" password = "" channel = 6 [env] MQTT_BROKER = "broker.hivemq.com" MQTT_PORT = "1883"
💡 Note: Wokwi automatically provides internet connectivity in the simulation, allowing your ESP32 to connect to real MQTT brokers like HiveMQ!
✅ Setup Complete! Your Wokwi environment is ready for MicroPython code.


CODE:

 """

MicroPython IoT Weather Station Example for Wokwi.com

To view the data:

1. Go to http://www.hivemq.com/demos/websocket-client/
2. Click "Connect"
3. Under Subscriptions, click "Add New Topic Subscription"
4. In the Topic field, type "wokwi-weather" then click "Subscribe"

Now click on the DHT22 sensor in the simulation,
change the temperature/humidity, and you should see
the message appear on the MQTT Broker, in the "Messages" pane.

Copyright (C) 2022, Uri Shaked

https://wokwi.com/arduino/projects/322577683855704658
"""

import network
import time
from machine import Pin
import dht
import ujson
from umqtt.simple import MQTTClient

# MQTT Server Parameters
MQTT_CLIENT_ID = "micropython-weather-demo"
MQTT_BROKER    = "broker.mqttdashboard.com"
MQTT_USER      = ""
MQTT_PASSWORD  = ""
MQTT_TOPIC     = "wokwi-weather"

sensor = dht.DHT22(Pin(15))

print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
  print(".", end="")
  time.sleep(0.1)
print(" Connected!")

print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()

print("Connected!")

prev_weather = ""
while True:
  print("Measuring weather conditions... ", end="")
  sensor.measure()
  message = ujson.dumps({
    "temp": sensor.temperature(),
    "humidity": sensor.humidity(),
  })
  if message != prev_weather:
    print("Updated!")
    print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, message))
    client.publish(MQTT_TOPIC, message)
    prev_weather = message
  else:
    print("No change")
  time.sleep(1)

Testing & Monitoring

1 

Run in Wokwi

1. Copy all code files to your Wokwi project

2. Make sure the circuit is connected (DHT22 to GPIO 15)

3. Click the green Play ▶ button

4. Open the Serial Monitor (bottom panel)

5. Watch the weather data being published!

Diagram.json:
{
  "version": 1,
  "author": "Uri Shaked",
  "editor": "wokwi",
  "parts": [
    { "type": "board-esp32-devkit-c-v4", "id": "esp", "top": -37.58, "left": -96.37, "attrs": {} },
    { "type": "wokwi-dht22", "id": "dht1", "top": -32.2, "left": 40.16, "attrs": {} }
  ],
  "connections": [
    [ "esp:TX", "$serialMonitor:RX", "", [] ],
    [ "esp:RX", "$serialMonitor:TX", "", [] ],
    [ "dht1:VCC", "esp:3V3", "red", [ "v109.3", "h-170.36", "v-200.78" ] ],
    [ "dht1:SDA", "esp:15", "green", [ "v0" ] ],
    [ "dht1:GND", "esp:GND.1", "black", [ "v99.7", "h-189.56", "v-66.38" ] ]
  ],
  "dependencies": {}
}

Comments