# Author : Irfan Harris
# Written for Assignement
from machine import Pin, SoftI2C,PWM
import machine
import time
import dht
import ssd1306
# Initialize I2C bus and OLED display
i2c_oled = SoftI2C(scl=Pin(22), sda=Pin(21))
oled_width = 128 #based on spec
oled_height = 64 #based on spec
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c_oled)
# DHT22 sensor configuration
dht_pin = machine.Pin(4, machine.Pin.IN, machine.Pin.PULL_UP)
sensor = dht.DHT22(dht_pin)
# RGB LED configuration
led1_red_pin = machine.Pin(13, machine.Pin.OUT)
led1_green_pin = machine.Pin(12, machine.Pin.OUT)
led1_blue_pin = machine.Pin(14, machine.Pin.OUT)
led2_red_pin = machine.Pin(27, machine.Pin.OUT)
led2_green_pin = machine.Pin(26, machine.Pin.OUT)
led2_blue_pin = machine.Pin(25, machine.Pin.OUT)
led1_color = (0, 0, 0) # Initialize LED1 color to black
led2_color = (0, 0, 0) # Initialize LED2 color to black
def set_led1_color(red, green, blue):
led1_red_pin.value(red)
led1_green_pin.value(green)
led1_blue_pin.value(blue)
def set_led2_color(red, green, blue):
led2_red_pin.value(red)
led2_green_pin.value(green)
led2_blue_pin.value(blue)
def update_led_colors(temperature, humidity):
global led1_color, led2_color
# Set LED1 color based on temperature
if temperature >= 40:
led1_color = (1, 0, 0) # Red
elif temperature <= 15:
led1_color = (0, 0, 1) # Blue
else:
led1_color = (0, 1, 0) # Green
# Set LED2 color based on humidity
if humidity >= 70:
led2_color = (0, 1, 1) # Cyan
elif humidity <= 30:
led2_color = (1, 1, 0) # Yellow
else:
led2_color = (1, 0, 1) # Magenta
set_led1_color(*[1 - c for c in led1_color]) # Common anode requires inverse logic
set_led2_color(*[1 - c for c in led2_color]) # Common anode requires inverse logic
while True:
try:
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
update_led_colors(temperature, humidity)
# Display data on OLED
oled.fill(0)
oled.text("Temp: {:.1f}C".format(temperature), 0, 0)
oled.text("Humidity: {:.1f}%".format(humidity), 0, 12)
oled.show()
print("Temperature: {:.1f}C, Humidity: {:.1f}%".format(temperature, humidity))
time.sleep(1) # Update every second
except Exception as e:
print("Error:", e)
time.sleep(2)