# Importamos las bibliotecas necesarias para el manejo de hardware y dispositivos
from machine import Pin, ADC, PWM, I2C # Importa las clases Pin, ADC, PWM, y I2C de la biblioteca machine
from utime import sleep, sleep_ms # Importa las funciones de suspensión de la biblioteca utime
from dht import DHT22 # Importa la clase DHT22 para manejar el sensor de temperatura y humedad
from ssd1306 import SSD1306_I2C # Importa la clase SSD1306_I2C para controlar la pantalla OLED
# Definimos las dimensiones de la pantalla OLED
alto = 64 # Altura de la pantalla en píxeles
ancho = 128 # Ancho de la pantalla en píxeles
# Configuramos la comunicación I2C con la pantalla OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21)) # Inicializa el bus I2C con los pines SCL y SDA
oled = SSD1306_I2C(ancho, alto, i2c) # Crea una instancia del objeto SSD1306_I2C para la pantalla OLED
# Configuramos el sensor DHT22
dht = DHT22(Pin(15)) # Inicializa el sensor DHT22 en el pin 15
# Verificamos la conexión del bus I2C y mostramos el resultado en la consola
print(i2c.scan(), "conectada") # Escanea los dispositivos en el bus I2C y muestra el resultado
# Bucle principal del programa
while True:
# Medimos la temperatura y humedad
dht.measure() # Realiza la medición del sensor
tem = dht.temperature() # Obtiene la temperatura medida
hum = dht.humidity() # Obtiene la humedad medida
# Limpiamos la pantalla OLED
oled.fill(0) # Llena la pantalla con color negro (apagada)
# Dibujamos el marco en la pantalla OLED
oled.pixel(64, 60, 1) # Dibuja un píxel blanco en la posición (64, 60)
oled.vline(0, 0, 20, 1) # Dibuja una línea vertical blanca desde (0, 0) hasta (0, 20)
oled.vline(120, 0, 20, 1) # Dibuja una línea vertical blanca desde (120, 0) hasta (120, 20)
oled.hline(0, 0, 120, 1) # Dibuja una línea horizontal blanca desde (0, 0) hasta (120, 0)
oled.hline(0, 20, 120, 1) # Dibuja una línea horizontal blanca desde (0, 20) hasta (120, 20)
# Mostramos los datos en la pantalla OLED
oled.text("Datos", 10, 10, 1) # Muestra el texto "Datos" en la posición (10, 10)
oled.text("Tem:", 0, 30, 1) # Muestra el texto "Tem:" en la posición (0, 30)
oled.text("Hum:", 0, 40, 1) # Muestra el texto "Hum:" en la posición (0, 40)
oled.text(str(tem), 60, 30, 1) # Muestra la temperatura medida en la posición (60, 30)
oled.text(str(hum), 60, 40, 1) # Muestra la humedad medida en la posición (60, 40)
# Actualizamos la pantalla OLED para mostrar los cambios
oled.show() # Refresca la pantalla para mostrar el contenido actualizado
# (Opcional) Pausa entre mediciones para evitar una actualización demasiado rápida
sleep(2) # Pausa la ejecución del programa durante 2 segundos