from machine import Pin, ADC, I2C
from time import sleep
import dht
from ssd1306 import SSD1306_I2C
# --- OLED setup ---
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(128, 64, i2c)
# --- Inputs ---
button = Pin(12, Pin.IN, Pin.PULL_DOWN)
ldr = ADC(Pin(34))
ldr.atten(ADC.ATTN_11DB)
pot = ADC(Pin(35))
pot.atten(ADC.ATTN_11DB)
sensor_dht = dht.DHT22(Pin(4))
pir = Pin(27, Pin.IN)
# --- Outputs ---
led_green = Pin(2, Pin.OUT)
led_yellow = Pin(18, Pin.OUT)
led_red = Pin(5, Pin.OUT)
buzzer = Pin(15, Pin.OUT)
# --- OLED Display Function ---
def show_message(line1, line2=""):
oled.fill(0)
oled.text(line1, 0, 10)
oled.text(line2, 0, 30)
oled.show()
# --- Initial Message ---
show_message("Smart Learning", "Panel Ready")
sleep(2)
while True:
# Read sensor values
light_val = ldr.read()
pot_val = pot.read()
pir_val = pir.value()
button_val = button.value()
# Temperature + Humidity
sleep(0.3)
sensor_dht.measure()
temp = sensor_dht.temperature()
hum = sensor_dht.humidity()
print("LDR:", light_val, "POT:", pot_val, "TEMP:", temp, "HUM:", hum, "PIR:", pir_val)
# Reset outputs
led_green.off()
led_yellow.off()
led_red.off()
buzzer.off()
# --- Motion Detected ---
if pir_val == 1:
led_yellow.on()
show_message("Motion Detected", "Student Present")
sleep(0.5)
# --- Light Check ---
if light_val < 1000:
led_red.on()
buzzer.on()
show_message("Too Dark!", "Increase Light")
sleep(0.5)
buzzer.off()
# --- Temperature Check ---
if temp > 30:
led_red.on()
show_message("Too Hot!", f"Temp: {temp:.1f}C")
sleep(0.5)
# --- Potentiometer (Score level) ---
if pot_val > 3000:
led_green.on()
show_message("Good Job!", "High Score Level")
sleep(0.5)
# --- Button (Answer Submitted) ---
if button_val == 1:
buzzer.on()
show_message("Answer", "Submitted!")
sleep(0.5)
buzzer.off()
sleep(0.3)