# Projeto de Irrigação Automatizada e Monitoramento do Solo via MQTT
# Importa bibliotecas
import network # Biblioteca para conexão em rede
import time # Biblioteca para utilização da função sleep
import machine # Biblioteca para geração do ID único do cliente MQTT
import ubinascii # Biblioteca para geração do ID único do cliente MQTT
import dht # Biblioteca para manipulação do sensor DHT
import json # Biblioteca para manipulação de arquivos JSON
from umqtt.simple import MQTTClient # Biblioteca para comunicação MQTT
from machine import Pin, PWM # Biblioteca para manipulação dos pinos do ESP
# Configuração do pino do servo
servo_pin = 14 # Pino 14 (GPIO14)
servo_pwm = PWM(Pin(servo_pin), freq=50) # Frequência de 50 Hz
# Ângulo do servo (0 a 180 graus)
def set_servo_angle(angle):
duty = int((angle / 180) * 1023)
servo_pwm.duty(duty)
# Configuração do pino dos LEDs
pino_led_vermelho = Pin(13, Pin.OUT)
pino_led_verde = Pin(12, Pin.OUT)
# Configuração do pino da bomba
pino_bomba = Pin(14, Pin.OUT)
# Configuração do pinagem do sensor.
sensor = dht.DHT22(Pin(15))
# Conecta ao WiFi
print("Connectando 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("Connectando ao servidor MQTT... ", end="")
cliente = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
cliente.connect()
print(" Conectado!")
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)
pino_bomba.value(1)
set_servo_angle(0) # Servo motor 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)
pino_bomba.value(0)
set_servo_angle(90) # Servo motor ligado
# Enviando Mensagem ao Broker
cliente.publish("jardim/bomba", "1")
print("Mensagem enviada com sucesso...")
time.sleep(10)