import network # importa la libreria "network" que permite usar la clase WLAN y STA_IF
import time # importa la libreria "time" que contiene operaciones relacionadas con el manejo de tiempo. En este codigo permite usar el comando sleep
from machine import Pin, PWM # Importa desde la libreria "machine" la clase pin
import dht # importa la libreria dht que permite usar el sensor DHT22
import ujson # importa la libreria ujson para usar dumps
from umqtt.simple import MQTTClient # Trae la clase MQTTClient desde la libreria umqtt.simple
from servo import Servo # Importa la libreria servo.py que cargó al proyecto
# MQTT Server Parameters
MQTT_CLIENT_ID = "micropython-weather-demo" # Establece el ID del cliente a usar
MQTT_BROKER = "broker.mqttdashboard.com" # Configura el broker o intermediario a utilizar
MQTT_USER = "" # Establece el Usuario
MQTT_PASSWORD = "" # Establece la contraseña de inicio. Al quedarse como un string vacio, indica que no son necesarias las credenciales de inicio de sesión
MQTT_TOPIC = "wokwi-weather" # Indica el tópico o tema a usar, en este caso, wokwi-weather
sensor = dht.DHT22(Pin(15)) # Le indica al ESP32 el tipo de sensor que se está usando (DHT22) y en que pin se encuentra (15)
servo_pin = 22 # Indica al ESP32 el pin donde se encuentra el servomotor
servo = PWM(Pin(servo_pin),50) # Genera el pulso PWM en el pin indicado (22) y la frecuencia de operación, en este caso, 50 Hz
Servo1 = Servo(pin_id=servo_pin) # Establece el pin donde está el servo
print("Connecting to WiFi", end="") # Genera el mensaje de espera mientras se establece conexión con el servidor
sta_if = network.WLAN(network.STA_IF) # Permite crear una instancia de red inalambrica como estación en el ESP32
sta_if.active(True) # Coloca en estado activo la instancia creada para configurar el ESP32 como estación
sta_if.connect('Wokwi-GUEST', '') # Conecta el ESP32 a la red "Wokwi-GUEST"
while not sta_if.isconnected(): # El bucle de estas tres lineas (44, 45 y 46) permiten colocar un punto en la consola mientras se espera la conexión con el servidor
print(".", end="")
time.sleep(0.1)
print(" Connected!") # Una vez se realiza la conexión a la red Wokwi-Guest, imprime en pantalla "Connected!". No se especifica ningún otro argumento para iniciar en una nueva linea.
print("Connecting to MQTT server... ", end="") # Similar al codigo de la linea 36, imprime en pantalla el mensaje mostrado, sin cambiar de linea
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD) # Crea el cliente MQTT que se va a usar, especificando el ID, Broker, Usuario y contraseña del mismo
client.connect() # Establece la conexión con el cliente
print("Connected!") # Una vez conectado, imprime sobre la misma linea el mensaje "Connected!"
prev_weather = "" # Crea una variable llamada prev_weather y le asigna como valor inicial una cadena vacia
servo_active = False # Asegura que el servo arranque apagado
Umbral_Temp = 30 # Permite establecer el Umbral de temperatura para el funcionamiento del servo
x='t'
while x: # Crea el bucle
sensor.measure() # Busca los valores percibidos por el sensor
temperatura = sensor.temperature() # Almacena el valor de la temperatura en una variable con ese mismo nombre
print ("Temperatura Actual:", temperatura) # Imprime en consola el valor de la temperatura actual
if temperatura > Umbral_Temp and not servo_active: # Verifica si el valor de temperatura supera el umbral de activación, y si el servo no está activo
print("Umbral superado") # Si se supera el umbral de temperatura, imprime en pantalla el mensaje "Umbral Superado"
servo_active = True # Activa el servo
mensaje = ujson.dumps ({"temp": temperatura,}) # Almacena el valor de Temperatura como una cadena json
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, mensaje)) # Imprime en pantalla el valor de la temperatura actual percibida por el sensor
client.publish(MQTT_TOPIC, mensaje)
while temperatura > Umbral_Temp: # Permite el funcionamiento del Servomotor
Servo1.write(0) # Establece la posición del servo a 0°
time.sleep(1)
Servo1.write(180) # Establece la posición del servo a 180°
time.sleep(1)
sensor.measure() # Busca los valores percibidos por el sensor
temperatura = sensor.temperature() # Almacena el valor de la temperatura en una variable con ese mismo nombre
Servo1.write(90) # Fija la posicion de reposo del servo
servo_active = False # Apaga el servo
time.sleep(1) # Reinicia el ciclo