# Projeto de Irrigação Automatizada e Monitoramento do Solo via MQTT
# Importa bibliotecas
import network
import time
import machine
import ubinascii
import dht
import json
from umqtt.simple import MQTTClient
from machine import Pin, PWM
# Configuração do pino do relé
rele_pin = 14 # Pino 14 (GPIO14)
rele = Pin(rele_pin, Pin.OUT)
# Configuração do pino dos LEDs
pino_led_vermelho = Pin(13, Pin.OUT)
pino_led_verde = Pin(12, Pin.OUT)
# Configuração do pino do servo motor
pino_servo = 5 # Exemplo: use o pino correto para o seu servo motor
servo = PWM(Pin(5), freq=50) # Frequência de 50 Hz
# Configuração do pinagem do sensor.
sensor = dht.DHT22(Pin(15))
# Conecta ao WiFi
print("Conectando ao WiFi...", end="")
estacao = network.WLAN(network.STA_IF)
estacao.active(True)
estacao.connect('Wokwi-GUEST', '')
while not estacao.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Conectado!")
# Parâmetros para conexão MQTT
MQTT_CLIENT_ID = ubinascii.hexlify(machine.unique_id()) # Gera ID único
MQTT_BROKER = "broker.mqttdashboard.com" # Endereço do broker
MQTT_USER = "" # Usuário (caso possua)
MQTT_PASSWORD = "" # Senha (caso possua)
MQTT_TOPIC = "EstacaoUnilavras" # Tópico MQTT
# Conecta ao broker MQTT
print("Conectando ao servidor MQTT... ", end="")
cliente = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
cliente.connect()
print(" Conectado!")
# Ajuste os valores de pulso para o seu servo motor
ANGULO_180 = 190
ANGULO_0 = 40
def girar_servo(angulo):
# Define a posição do servo com base no ângulo
servo.duty(ANGULO_180 if angulo == 180 else ANGULO_0)
def controle_rele_servo(ligado):
if ligado:
# Liga o relé
rele.value(1)
# Gira o servo para 180°
girar_servo(180)
else:
# Desliga o relé
rele.value(0)
# Retorna o servo à posição inicial (0°)
girar_servo(0)
# Exemplo de uso
controle_rele_servo(True) # Aciona o relé e gira o servo para 180°
# Aguarde o tempo necessário para o relé atuar
controle_rele_servo(False) # Desliga o relé e retorna o servo à posição inicial (0°)
def callback(topic, msg):
print((topic, msg))
cliente.set_callback(callback)
while True:
cliente.check_msg()
sensor.measure() # Realiza a leitura do sensor
valor_Pino_15 = sensor.humidity() # Lê a umidade do sensor
# Definindo o parâmetro para um Solo devidamente úmido, acendendo o LED VERDE
if valor_Pino_15 >= 50.0 and valor_Pino_15 < 100.0:
print("Status: Solo umido")
pino_led_vermelho.value(0)
pino_led_verde.value(1)
rele.value(0) # Relé desligado
# Enviando Mensagem ao Broker
cliente.publish("jardim/bomba", "0")
print("Mensagem enviada com sucesso...")
# Definindo o parâmetro para um Solo Seco, acendendo o LED VERMELHO
if valor_Pino_15 >= 0.0 and valor_Pino_15 <= 50.0:
print("Status: Solo seco")
pino_led_verde.value(0)
pino_led_vermelho.value(1)
rele.value(1) # Relé ligado
# Enviando Mensagem ao Broker
cliente.publish("jardim/bomba", "1")
print("Mensagem enviada com sucesso...")
time.sleep(10)