import time
import network
import machine
from machine import Pin, PWM
from umqtt.simple import MQTTClient
import dht
# Definições do sensor de distância
TRIGGER_PIN = 5
ECHO_PIN = 18
MAX_DISTANCE = 300 # Distância máxima
# Definições do sensor de umidade
DHT_PIN = 4
# Definições do LED e Buzzer
LED_PIN = 2
#BUZZER_PIN = 15
buzzer = PWM(machine.Pin(15))
buzzer.freq(500)
buzzer.duty(0)
# Parâmetros MQTT
MQTT_SERVER = "broker.hivemq.com"
MQTT_PORT = 1883
MQTT_TOPIC = "sensoragua"
# Configurando os pinos / entradas
trigger = Pin(TRIGGER_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
led = Pin(LED_PIN, Pin.OUT)
#buzzer = Pin(BUZZER_PIN, Pin.OUT)
dht_sensor = dht.DHT22(Pin(DHT_PIN))
# WiFi
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!")
# Configurando MQTT
def connect_mqtt():
client = MQTTClient("Pelanda_Jafte_Vini", MQTT_SERVER, port=MQTT_PORT)
client.connect()
print("Conectado ao MQTT")
return client
client = connect_mqtt()
# Função - medindo distância
def medirDistancia():
trigger.off()
time.sleep_us(2)
trigger.on() #envia o pulso
time.sleep_us(10)
trigger.off()
while echo.value() == 0: #espera sinal pulso
start = time.ticks_us() #Registra o tempo em MS - enviado
while echo.value() == 1:
end = time.ticks_us() #Registra o tempo em MS - recebido
duracao = time.ticks_diff(end, start) # diferença entre dois tempos
distancia = (duracao * 0.0343) / 2 #Converte a duração do pulso em distância (velocidade do som)
return distancia
def avisoSensores():
avisoLimiteAgua = 10 # Limite água - nível
avisoUmidade = 70 # Limite de umidade
while True:
# Medir distância
distanciaAtual = medirDistancia()
print("Distância: {:.2f} cm".format(distanciaAtual))
# Medir temperatura e umidade
dht_sensor.measure()
umid = dht_sensor.humidity()
print(" Umidade: {:.2f}%".format(umid))
# Verificar condições de alerta
if distanciaAtual < avisoLimiteAgua and distanciaAtual > 0:
print("Nível de água abaixo do limite!")
client.publish(MQTT_TOPIC, "Alerta: Nível da água baixo!")
led.value(1)
buzzer.freq(100)
buzzer.duty(50)
elif umid > avisoUmidade:
print("Umidade acima do limite!")
client.publish(MQTT_TOPIC, "Alerta: Umidade alta!")
led.value(1)
buzzer.freq(100)
buzzer.duty(50)
else:
led.value(0)
buzzer.freq(900)
buzzer.duty(50)
time.sleep(10) # Delay de leituras
avisoSensores()