#Importa las clases y funciones necesarias para controlar los pines GPIO, el bus I2C, el sensor DHT22 y la pantalla OLED SSD1306.
from machine import Pin, ADC, PWM, I2C
from utime import sleep, sleep_ms
from dht import DHT22
from ssd1306 import SSD1306_I2C
#Define la altura y el ancho de la pantalla OLED.
alto = 64
ancho = 128
i2c=I2C(0, scl=Pin(22), sda=Pin(21)) #Inicializa el bus I2C en el canal 0 con los pines 22 (SCL) y 21 (SDA) del microcontrolador.
oled = SSD1306_I2C(ancho, alto, i2c) #Crea una instancia de la pantalla OLED SSD1306 con las dimensiones especificadas y el bus I2C inicializado.
dht= DHT22(Pin(15)) #Inicializa el sensor DHT22 conectado al pin 15.
print(i2c.scan(), "conectada") #Escanea los dispositivos conectados al bus I2C e imprime su dirección junto con el mensaje "conectada".
while True: #Inicia un bucle infinito para leer y mostrar continuamente los datos del sensor.
dht.measure() #Toma una nueva medida de temperatura y humedad con el sensor DHT22.
#Obtiene los valores de temperatura y humedad del sensor DHT22 y los almacena en las variables tem y hum.
tem = dht. temperature()
hum = dht.humidity()
oled.fill(0) #Borra la pantalla OLED llenándola con color negro (0).
oled.pixel(64,60, 1) #Dibuja un píxel en la posición (64, 60) con color blanco (1).
#Dibuja dos líneas verticales de color blanco en las posiciones (0, 0) y (120, 0), cada una con una longitud de 20 píxeles.
oled.vline(0, 0, 20, 1)
oled.vline(120, 0, 20, 1)
#Dibuja dos líneas horizontales de color blanco en las posiciones (0, 0) y (0, 20), cada una con una longitud de 120 píxeles.
oled.hline(0, 0, 120, 1)
oled.hline(0, 20, 120, 1)
oled.text("Datos", 10, 10, 1) #Escribe el texto "Datos" en la posición (10, 10) con color blanco (1).
#Escribe los textos "Tem:" y "Hum:" en las posiciones (0, 30) y (0, 40) respectivamente, con color blanco (1).
oled.text ("Tem:", 0, 30, 1)
oled.text ("Hum:", 0, 40, 1)
#Escribe los valores de temperatura y humedad en las posiciones (60, 30) y (60, 40) respectivamente, con color blanco (1).
oled.text(str(tem), 60, 30, 1)
oled.text(str(hum), 60, 40, 1)
oled. show() #Actualiza la pantalla OLED para mostrar todos los cambios realizados.