import network
import time
from machine import Pin
import dht
import ujson
from umqtt.simple import MQTTClient
# --- Configuration ---
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
MQTT_CLIENT_ID = "micropython-weather-data"
MQTT_BROKER = "sensor-micro.cloud.shiftr.io"
MQTT_USER = "sensor-micro"
MQTT_PASSWORD = "ulcB4x2V9ghmWzTo"
MQTT_TOPIC = "wokwi-weather"
DHT_PIN = 15
MEASURE_INTERVAL = 1 # seconds
# --- Initialize Sensor ---
sensor = dht.DHT22(Pin(DHT_PIN))
# --- Connect to WiFi ---
def connect_wifi():
print("Connecting to WiFi", end="")
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect(WIFI_SSID, WIFI_PASSWORD)
while not sta.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
# --- Connect to MQTT ---
def connect_mqtt():
print("Connecting to MQTT server... ", end="")
client = MQTTClient(
client_id=MQTT_CLIENT_ID,
server=MQTT_BROKER,
user=MQTT_USER,
password=MQTT_PASSWORD
)
client.connect()
print("Connected!")
return client
# --- Main Loop ---
def main():
connect_wifi()
client = connect_mqtt()
prev_message = ""
while True:
print("Measuring weather conditions... ", end="")
sensor.measure()
message = ujson.dumps({
"temperature": sensor.temperature(),
"humidity": sensor.humidity()
})
if message != prev_message:
print("Updated!")
print(f"Reporting to MQTT topic {MQTT_TOPIC}: {message}")
client.publish(MQTT_TOPIC, message)
prev_message = message
else:
print("No change")
time.sleep(MEASURE_INTERVAL)
# --- Run Program ---
if __name__ == "__main__":
main()