# COMPLETE HOME AUTOMATION WITH SERVO FAN
# Raspberry Pi Pico W + MicroPython + Wokwi
import network
import time
import urequests
import ujson
from machine import Pin, PWM
import dht
# ---------------- WIFI ----------------
SSID = "Wokwi-GUEST"
PASSWORD = ""
# ---------------- ADAFRUIT IO ----------------
AIO_USERNAME = "lokesh_naik128"
AIO_KEY = "aio_XACY73nPzMpJSjcG6ZfFFELVKzV0"
FEED_NAME = "light"
AIO_URL = "https://io.adafruit.com/api/v2/{}/feeds/{}/data/last".format(
AIO_USERNAME, FEED_NAME
)
HEADERS = {
"X-AIO-Key": AIO_KEY,
"User-Agent": "MicroPython",
"Accept": "application/json"
}
# ---------------- PIN SETUP ----------------
light = Pin(15, Pin.OUT)
button = Pin(16, Pin.IN, Pin.PULL_DOWN)
sensor = dht.DHT22(Pin(13))
# Servo (Fan)
servo = PWM(Pin(18))
servo.freq(50)
# ---------------- SERVO FUNCTION ----------------
def set_servo_angle(angle):
# Correct PWM mapping for Pico W
duty = int(1638 + (angle / 180) * (8192 - 1638))
servo.duty_u16(duty)
# Initial states
light.value(0)
set_servo_angle(0) # Fan OFF
# ---------------- WIFI CONNECT ----------------
print("Connecting to WiFi...")
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
while not wifi.isconnected():
time.sleep(0.2)
print("WiFi Connected")
print("IP:", wifi.ifconfig())
print("----------------------------------")
# ---------------- VARIABLES ----------------
aio_value = "OFF"
last_cloud_time = 0
CLOUD_INTERVAL = 5 # seconds (safe for Adafruit IO)
# ---------------- MAIN LOOP ----------------
while True:
now = time.time()
# -------- CLOUD READ (SLOW & SAFE) --------
if now - last_cloud_time >= CLOUD_INTERVAL:
try:
response = urequests.get(AIO_URL, headers=HEADERS)
data = ujson.loads(response.text)
response.close()
aio_value = data.get("value", "OFF")
except:
pass
last_cloud_time = now
# -------- BUTTON --------
button_state = button.value()
# -------- LIGHT CONTROL --------
if aio_value == "ON" or button_state == 1:
light.value(1)
light_state = "ON"
else:
light.value(0)
light_state = "OFF"
# -------- DHT22 + SERVO FAN CONTROL --------
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
if temp > 30:
set_servo_angle(90) # Fan ON
fan_state = "ON"
else:
set_servo_angle(0) # Fan OFF
fan_state = "OFF"
# -------- FAST CLEAN OUTPUT --------
print("Light", light_state,
"| Temp:", temp, "°C",
"| Hum:", hum, "%",
"| Fan", fan_state)
except:
pass
time.sleep(0.5) # FAST OUTPUT