from machine import Pin, I2C, PWM #comunicacion serial I2C
import ssd1306 #libreria para display oled
import dht #sensor de temperatura y humedad
import time # frecuencia y tiempos de buses
# Configurar la pantalla OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# Configurar el pin al que está conectado el sensor DHT22
pin_dht = 13 # Ajusta el número del pin según tu conexión
pin_buzzer = Pin(14, Pin.OUT)
dht_sensor = dht.DHT22(Pin(pin_dht))
# Configurar pines para el LED RGB de ánodo común
pin_led_red = 16
pin_led_green = 17
pin_led_blue = 18
# Configurar PWM para el LED RGB y el servo
#modulador de ancho de pulso, frecuencia.
pwm_led_red = PWM(Pin(pin_led_red), freq=1000, duty=0)
pwm_led_green = PWM(Pin(pin_led_green), freq=1000, duty=0)
pwm_led_blue = PWM(Pin(pin_led_blue), freq=1000, duty=0)
#duty es el valor que carga la frecuencia
pwm_buzzer = PWM(pin_buzzer, freq=400, duty=512)
pwm_buzzer.deinit()
# Función para asignar colores al LED RGB basado en la temperatura
def asignar_color(temperatura):
# Lógica para asignar colores basados en la temperatura
# Devuelve una tupla (r, g, b) con valores de 0 a 255 para cada canal
# Puedes personalizar esta lógica según tus preferencias
if temperatura < 10:
return (0, 0, 255) # Azul para temperaturas bajas
elif temperatura < 30:
return (0, 255, 0) # Verde para temperaturas medias
else:
return (255, 0, 0) # Rojo para temperaturas altas
def sonar_alarma(temperatura):
if temperatura < 0:
pwm_buzzer = PWM(pin_buzzer, freq=400, duty=10)
time.sleep(2)
pwm_buzzer.deinit()
elif temperatura > 50:
pwm_buzzer = PWM(pin_buzzer, freq=400, duty=10)
time.sleep(2)
pwm_buzzer.deinit()
else:
pwm_buzzer.deinit()
# Función para actualizar el LED RGB
def actualizar_led_rgb(color):
pwm_led_red.duty(color[0])
pwm_led_green.duty(color[1])
pwm_led_blue.duty(color[2])
# Función para leer y mostrar los datos del sensor en la pantalla OLED
def leer_sensor_y_mostrar():
try:
# Realizar la lectura del sensor
dht_sensor.measure()
# Obtener los valores de temperatura y humedad
temperatura = dht_sensor.temperature()
# Mostrar los resultados en la pantalla OLED
oled.fill(0)
#posicion en pantalla
oled.text('Temperatura:', 10, 10)
#formatea el texto
oled.text('{:.2f} °C'.format(temperatura), 10, 30)
#imprime temperatura
oled.show()
# Mostrar los resultados por el puerto serial
print("Temperatura: {:.2f} °C".format(temperatura))
# Asignar colores al LED RGB de cátodo común
color = asignar_color(temperatura)
actualizar_led_rgb(color)
sonar_alarma()
except Exception as e:
print("Error al leer el sensor:", e)
# Bucle principal
while True:
leer_sensor_y_mostrar()
# Esperar un intervalo antes de la próxima lectura
time.sleep(5)