import network
import time
from machine import Pin
import dht
import ujson
from umqtt.simple import MQTTClient
import hcsr04
MQTT_CLIENT_ID = "micropython--demo"
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = "temperaturasensor"
MQTT_TOPIC2 = "distanciasensor"
MQTT_TOPIC3 = "movimentosensor"
sensor = dht.DHT22(Pin(12))
sensor_distance = hcsr04.HCSR04(trigger_pin=33, echo_pin=26)
motion_sensor = Pin(14, Pin.IN)
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
print("Connecting to MQTT server... ", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
print("Connected!")
prev_weather = ""
prev_distance = None
prev_pir = False
while True:
print("Medindo o clima...", end="")
sensor.measure()
message = ujson.dumps({
"temp": sensor.temperature(),
"humidity": sensor.humidity(),
})
if message != prev_weather:
print("Atualizado!")
print("Comunicando ao tópico MQTT {}: {}".format(MQTT_TOPIC, message))
client.publish(MQTT_TOPIC, message)
prev_weather = message
else:
print("Sem alterações.")
print("Medindo distância... ", end="")
distance = sensor_distance.distance_cm()
if distance != prev_distance:
print("Atualizado!")
print("Comunicando ao tópico MQTT {}: {}".format(MQTT_TOPIC2, distance))
client.publish(MQTT_TOPIC2, str(distance))
prev_distance = distance
else:
print("Sem alterações.")
motion_state = motion_sensor.value()
if motion_state and not prev_pir:
custom_message = "Movimento detectado!"
print(custom_message)
print("Comunicando ao tópico MQTT {}: {}".format(MQTT_TOPIC3, custom_message))
client.publish(MQTT_TOPIC3, custom_message)
prev_pir = motion_state
time.sleep(1)