"""
MicroPython IoT Weather Station Example for Wokwi.com
To view the data:
1. Go to http://www.hivemq.com/demos/websocket-client/
2. Click "Connect"
3. Under Subscriptions, click "Add New Topic Subscription"
4. In the Topic field, type "wokwi-weather" then click "Subscribe"
Now click on the DHT22 sensor in the simulation,
change the temperature/humidity, and you should see
the message appear on the MQTT Broker, in the "Messages" pane.
Copyright (C) 2022, Uri Shaked
https://wokwi.com/arduino/projects/322577683855704658
"""
import network #Este comando realiza la importación de la librería de MicroPython titulada "network" la cual está disponible en: https://docs.micropython.org/en/latest/library/network.html
import time #Este módulo proporciona funciones para trabajar con operaciones relacionadas con el tiempo
from machine import Pin, PWM #Este módulo se utiliza para controlar hardware de bajo nivel en plataformas de microcontroladores. En este caso, se importa la clase Pin para manejar las operaciones de entrada/salida
import dht #Utilizado para trabajar con sensores DHT (Digital Humidity and Temperature). Permite leer datos de sensores DHT conectados al microcontrolador.
import ujson # Este módulo proporciona funciones de codificación y decodificación JSON.
from umqtt.simple import MQTTClient #Este módulo se utiliza para la comunicación MQTT (Message Queuing Telemetry Transport)
import utime, math
from time import sleep
# MQTT Server Parameters
MQTT_CLIENT_ID = "emqx_cloud6d460e" # parametros del protocolo mqtt para conectarse
MQTT_BROKER = ""# parametros del protocolo mqtt para conectarse al servidor
MQTT_USER = "" # configuración del usuario
MQTT_PASSWORD = "" # configuración de la contraseña para ingresar al servidor
MQTT_TOPIC = "testtopic" # parametro del tópico
sensor = dht.DHT22(Pin(15))# Se realiza la lectura del modulo DHT por el pin 15
print("Connecting to WiFi", end="") # imprime en patalla el mensaje sin agregar salto de linea al final
sta_if = network.WLAN(network.STA_IF)#En este caso, el modo es STA_IF, que indica que se está configurando la interfaz de red en modo estación
sta_if.active(True) #comando que activa la interface de red
sta_if.connect('Wokwi-GUEST', '') #se concta a red de nombre wokwi-guest
while not sta_if.isconnected(): #condicional que verifica si se establecio el enlace retorna True para una conexion positiva
print(".", end="") #e imprime un punto (.) mientras no se establace la conexion
time.sleep(0.1)
print(" Connected!") #imprime conected al final de la linea
print("Connecting to MQTT server... ", end="") #impresion en pantall sin salto de linea
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)# se almacena en una variable los parametros de conexion al modulo
client.connect() # envia los datos para establecer la conexion
print("Connected!") #imprime en pantalla para indicar se establecio la conexion
#pwm
pwm = PWM(Pin(23), freq=50, duty=0)
def Servo(servo, angle):
# angle / 180( * 2(0°-180°) + 0.5()/ 20ms * 1023
pwm.duty(int(((angle)/180 *2 + 0.5) / 20 * 1023))
def moveServo(position):
Servo(pwm, position)
utime.sleep(0.5)
print("Servo Angle : ",position)
prev_weather = ""
while True:
print("Measuring weather conditions... ", end="")
sensor.measure()
message = ujson.dumps({
"temp": sensor.temperature(),
"humidity": sensor.humidity(),
})
if message != prev_weather:
print("Updated!")
print("Reporting to MQTT topic {}: {}".format(MQTT_TOPIC, message))
client.publish(MQTT_TOPIC, message)
prev_weather = message
elif (sensor.temperature()>=27):
for i in range(0, 181, 10):
moveServo(i)
else:
print("No change")
#print("Comienzo:", sensor.temperature())
time.sleep(1)