Sistema de riego controlado desde el móvil

Controla el sistema de riego de tus plantas desde el móvil fácilmente

Ejemplo de la interfaz que se usará en el proyecto

Este artículo presenta un sistema de riego controlado por Wi-Fi, utilizando un ESP32 y una interfaz móvil para gestionar una bomba de agua de forma remota. El sistema permite encender y apagar el riego a distancia, facilitando el mantenimiento de jardines o huertos. Gracias a su conectividad inalámbrica, los usuarios pueden monitorear el riego en tiempo real desde su teléfono móvil. Esta solución es ideal para aplicaciones tanto domésticas como agrícolas, brindando eficiencia y comodidad. Este artículo es una ampliación del Control de bomba de agua.

Materiales

  • Placa ESP32
  • Bomba de Agua de 5V
  • Recipiente para almacenar agua
  • Transistor NPN
  • Protoboard

Procedimiento

Se necesitará un transistor PNP, cuya base irá conectada al pin 14 del ESP32, el colector se conectará a 9V de una pila, y el emisor se conectará al cable rojo de la bomba de agua. El cable negro se conectará a GND. El código se implementará usando Python, mediante MicroPython y la interfaz de desarrollo llamada Thonny. Para saber el puerto que debemos usar, debemos buscar en el Administrador de dispositivos, el número del puerto COM que está conectado.

A continuación se implementará el siguiente código en Thonny:

import network
try:
  import usocket as socket
except:
  import socket

from machine import Pin
import dht

import esp
esp.osdebug(None)

import gc
gc.collect()

# Datos de conexión WiFi
ssid = ‘SSID DE TU WIFI’
password = ‘CONTRASEÑA DE TU WIFI’

# Configuración del WiFi
station = network.WLAN(network.STA_IF)

station.active(True)
station.connect(ssid, password)

while station.isconnected() == False:
  pass

print(‘Conexión exitosa’)
print(station.ifconfig())

# Definir el pin 14 como salida para controlar la bomba de agua
bomba = Pin(14, Pin.OUT)
bomba.value(0)  # Inicialmente apagada (nivel bajo)

# Función para generar la página web con botones
def web_page():
  # Estado actual de la bomba
  if bomba.value() == 1:
    bomba_estado = “ABIERTA”
  else:
    bomba_estado = “CERRADA”
 
  # HTML con botones
  html = “””<!DOCTYPE HTML><html>
<head>
  <meta name=”viewport” content=”width=device-width, initial-scale=1“>
  <meta http-equiv=”refresh” content=”2“>  <!– Recargar automáticamente la página cada 2 segundos –>
  <link rel=”stylesheet” href=”https://use.fontawesome.com/releases/v5.7.2/css/all.css” integrity=”sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr” crossorigin=”anonymous”>
  <style>
    html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center; }
    h2 { font-size: 3.0rem; }
    p { font-size: 3.0rem; }
    .button {
      display: inline-block;
      padding: 15px 30px;
      font-size: 30px;
      margin: 10px;
      cursor: pointer;
      border-radius: 5px;
    }
    .button-on { background-color: #4CAF50; color: white; }
    .button-off { background-color: #f44336; color: white; }
  </style>
</head>
<body>
  <h2>CONTROL DE BOMBA DE AGUA</h2>
  <p>Estado de la bomba: <strong>“”” + bomba_estado + “””</strong></p>
  <a href=“/?bomba=on”><button class=“button button-on”>ABRIR BOMBA</button></a>
  <a href=“/?bomba=off”><button class=“button button-off”>CERRAR BOMBA</button></a>
</body>
</html>“””
  return html

# Configuración del servidor web
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)  # Permitir la reutilización del puerto
s.bind((”, 80))
s.listen(5)

print(“Servidor escuchando en el puerto 80“)

# Bucle principal para manejar las conexiones entrantes
while True:
  conn, addr = s.accept()
  print(‘Conexión recibida desde %s’ % str(addr))
  request = conn.recv(1024).decode()
  print(‘Contenido = %s’ % str(request))
 
  # Procesar la solicitud HTTP
  if ‘/?bomba=on’ in request:
    print(“Activando la bomba“)
    bomba.value(1)  # Activar la bomba (nivel alto)
  if ‘/?bomba=off’ in request:
    print(“Desactivando la bomba“)
    bomba.value(0)  # Desactivar la bomba (nivel bajo)

  # Comprobar el estado del pin
  print(“Estado del pin 14: %d” % bomba.value())

  # Respuesta HTTP con la página web
  response = web_page()
  conn.send(‘HTTP/1.1 200 OK\r\n’)
  conn.send(‘Content-Type: text/html\r\n’)
  conn.send(‘Connection: close\r\n’)
  conn.send(‘\r\n’)
  conn.sendall(response)
  conn.close()

Con la implementación de este código en la comunicación serie obtendremos la dirección IP a la que debemos acceder para controlar la bomba de agua. Obteniendo las siguientes líneas en el terminal. 

En este caso nos conectaremos a la dirección 192.168.1.198

El proyecto acabado quedará de está manera, adjuntamos video con el resultado.

Esperamos que os haya servido de ayuda para completar vuestro proyecto o al menos para aprender algo que desconocíais.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *