import network
import time
from machine import Pin, PWM
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"
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 = ""
# Sensor indicators
INSIDE_SENSOR_PIN = 15
OUTSIDE_SENSOR_PIN = 2
inside_sensor = dht.DHT22(Pin(INSIDE_SENSOR_PIN)) # for control
outside_sensor = dht.DHT22(Pin(OUTSIDE_SENSOR_PIN)) # Outside (for monitoring/comparing)
# Humidity thresholds
HUMIDITY_ON = 70
HUMIDITY_OFF = 65
# Temperature & Heater
TEMP_HEATER_ON = 45
TEMP_HEATER_OFF = 50
TEMP_HIGH = 55
# Fan indicators
fan1 = PWM(Pin(25)) # Inlet fan (GREEN)
fan2 = PWM(Pin(27)) # Exhaust fan (BLUE)
fan1.freq(1000)
fan2.freq(1000)
# Hybrid heater
heater = Pin(33, Pin.OUT)
def set_fan_speed(fan, percent):
percent = max(0, min(100, percent))
duty = int((percent / 100) * 65535)
fan.duty_u16(duty)
while True:
try:
print("Measuring conditions...")
# Inside Sensor
inside_sensor.measure()
inside_temp = inside_sensor.temperature()
inside_humidity = inside_sensor.humidity()
# Outside Sensor
outside_sensor.measure()
outside_temp = outside_sensor.temperature()
outside_humidity = outside_sensor.humidity()
# Calculate differences
temp_difference = inside_temp - outside_temp
humidity_difference = inside_humidity - outside_humidity
# Fan 2 (Exhaust fan (BLUE))
if inside_humidity >= 80 or inside_temp >= TEMP_HIGH:
fan2_speed = 100
elif inside_humidity >= HUMIDITY_ON:
fan2_speed = 70
elif inside_humidity > HUMIDITY_OFF:
fan2_speed = 40
else:
fan2_speed = 0
set_fan_speed(fan2, fan2_speed)
# Fan 1 (Inlet fan (GREEN))
if fan2_speed == 0:
fan1_speed = 40
elif fan2_speed == 40:
fan1_speed = 50
elif fan2_speed == 70:
fan1_speed = 80
else:
fan1_speed = 100
set_fan_speed(fan1, fan1_speed)
# Hybrid heater
if inside_temp <= TEMP_HEATER_ON:
heater.on()
heater_status = True
elif inside_temp >= TEMP_HEATER_OFF:
heater.off()
heater_status = False
print("----------------------------------------")
print("Inside Sensor")
print("Temperature:", inside_temp, "°C")
print("Humidity:", inside_humidity, "%")
print()
print("Outside Sensor ")
print("Temperature:", outside_temp, "°C")
print("Humidity:", outside_humidity, "%")
print()
print("Comparison")
print("Temperature:", temp_difference, "°C")
print("Humidity:", humidity_difference, "%")
print()
print("SYSTEM STATUS")
print("Fan 1 - Inlet:","ON" if fan1_speed > 0 else "OFF","(", fan1_speed, "%)")
print("Fan 2 - Exhaust:","ON" if fan2_speed > 0 else "OFF","(", fan2_speed, "%)")
print("Heater:", "ON" if heater_status else "OFF")
print("----------------------------------------")
except OSError as error:
print("Sensor reading error:", error)
# DHT22 should not be read too rapidly
time.sleep(2)Loading
esp32-devkit-c-v4
esp32-devkit-c-v4