from machine import Pin, PWM, SoftI2C
import oledlib
import servolib
import dht
from utime import sleep
oled_pin = SoftI2C(scl=Pin(22), sda=Pin(21))
servo_pin = Pin(2)
led1_pin = 4
led2_pin = 5
led3_pin = 18
sensor = dht.DHT22(Pin(13))
servo = servolib.Servo(pin=servo_pin)
button_0 = Pin(26, Pin.IN, Pin.PULL_UP)
button_1 = Pin(27, Pin.IN, Pin.PULL_UP)
button_2 = Pin(14, Pin.IN, Pin.PULL_UP)
button_3 = Pin(12, Pin.IN, Pin.PULL_UP)
sensor = dht.DHT22(Pin(13))
servo = servolib.Servo(pin=servo_pin)
led1 = Pin(led1_pin, Pin.OUT)
led2 = Pin(led2_pin, Pin.OUT)
led3 = Pin(led3_pin, Pin.OUT)
oled = oledlib.SSD1306_I2C(width=128, height=64, i2c=oled_pin, external_vcc=False)
servo_running = False
speed_factor = 1
def Servo(angle, speed_factor):
duty_cycle = int(((angle) / 180 * 2 + 0.5) / 20 * 1023 * speed_factor)
servo.duty(duty_cycle)
def button_callback(pin):
global servo_running, speed_factor
if pin == button_0:
servo_running = False
servo.duty = 0
speed_factor = 1
elif pin == button_1:
speed_factor = 0.5
servo_running = True
elif pin == button_2:
speed_factor = 1
servo_running = True
elif pin == button_3:
speed_factor = 2
servo_running = True
button_0.irq(trigger=Pin.IRQ_FALLING, handler=button_callback)
button_1.irq(trigger=Pin.IRQ_FALLING, handler=button_callback)
button_2.irq(trigger=Pin.IRQ_FALLING, handler=button_callback)
button_3.irq(trigger=Pin.IRQ_FALLING, handler=button_callback)
while True:
sensor.measure()
t = sensor.temperature()
h = sensor.humidity()
if h < 50 and t < 20:
led1.on()
led2.off()
servo.duty = 0
servo_running = False
elif h > 50 and t > 20:
led1.off()
led2.on()
if not servo_running:
servo_running = True
speed_factor = 1
servo.duty = 0
else:
led1.off()
led2.off()
if servo_running and not led1.value():
for angle in range(0, 181):
servo.move(angle, speed_factor)
sleep(0.01)
for angle in range(180, -1, -1):
servo.move(angle, speed_factor)
sleep(0.01)
oled.fill(0)
oled.text("Fan is running", 13, 20, 1)
oled.text("Speed: ", 13, 40, 1)
if speed_factor == 0.5:
oled.text("20%", 70, 30, 1)
elif speed_factor == 1:
oled.text("50%", 70, 30, 1)
elif speed_factor == 2:
oled.text("80%", 70, 30, 1)
oled.show()
sensor.measure()
t = sensor.temperature()
h = sensor.humidity()
print("Temperature:", t)
print("Humidity:", h)
oled.fill(0)
if led1.value() == 1:
oled.text("OFF", 40, 30)
elif led2.value() == 1:
oled.text("ON", 30, 30)
oled.text("Temp: {:.2f} C".format(t),5, 20, 1)
oled.text("Humidity: {:.2f}%".format(h),5, 40, 1)
oled.show()
if h < 50 and t < 40:
led1.on()
else:
led1.off()
if h > 50 and t > 40:
led2.on()
else:
led2.off()