# main.py - ESP32 + A4988 + DHT22 + LED + Stepper Motor
from machine import Pin
import time
import dht
# ---------------- PIN SETUP ----------------
STEP_PIN = 14
DIR_PIN = 12
SLEEP_PIN = 13
RESET_PIN = 27
MS1_PIN = 25
MS2_PIN = 26
MS3_PIN = 33
LED_PIN = 2
DHT_PIN = 15
# ---------------- PARAMETERS ----------------
TEMP_THRESHOLD = 40.0 # °C
TEST_MODE = False # True = force motor & LED ON for debugging
STEP_DELAY = 0.005 # seconds between steps (5 ms pulse)
# ---------------- INITIALIZATION ----------------
led = Pin(LED_PIN, Pin.OUT)
step = Pin(STEP_PIN, Pin.OUT)
dir_pin = Pin(DIR_PIN, Pin.OUT)
sleep_pin = Pin(SLEEP_PIN, Pin.OUT)
reset_pin = Pin(RESET_PIN, Pin.OUT)
ms1 = Pin(MS1_PIN, Pin.OUT)
ms2 = Pin(MS2_PIN, Pin.OUT)
ms3 = Pin(MS3_PIN, Pin.OUT)
sensor = dht.DHT22(Pin(DHT_PIN))
# Initialize A4988
sleep_pin.value(1)
reset_pin.value(1)
ms1.value(0) # Full step
ms2.value(0)
ms3.value(0)
dir_pin.value(1) # Clockwise rotation
# ---------------- FUNCTIONS ----------------
def step_motor(steps, delay=STEP_DELAY):
for _ in range(steps):
step.value(1)
time.sleep(delay)
step.value(0)
time.sleep(delay)
def blink_led(times=1, on_time=0.1, off_time=0.1):
for _ in range(times):
led.value(1)
time.sleep(on_time)
led.value(0)
time.sleep(off_time)
# ---------------- MAIN LOOP ----------------
print("System Ready. TEST_MODE =", TEST_MODE)
while True:
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print("Temperature:", temp, "°C Humidity:", hum, "%")
if TEST_MODE or temp > TEMP_THRESHOLD:
print("Temperature high! Motor + LED ON")
led.value(1)
# Run motor continuously (adjust steps as needed)
step_motor(400, delay=STEP_DELAY)
time.sleep(0.1)
else:
print("Temperature below threshold. Motor OFF")
led.value(0)
blink_led(1, 0.1, 0.1)
time.sleep(0.5)
except Exception as e:
print("Sensor read error:", e)
blink_led(2, 0.05, 0.05)
time.sleep(1)