import RPi.GPIO as GPIO
import time
import smbus
import Adafruit_DHT
from i2c_lcd import I2cLcd # Librería para la pantalla LCD
# Configuración de GPIO
GPIO.setmode(GPIO.BCM)
# Configuración LCD I2C
I2C_ADDR = 0x27
bus = smbus.SMBus(1)
lcd = I2cLcd(bus, I2C_ADDR, 2, 16)
# Sensor de temperatura y humedad
DHT_SENSOR = Adafruit_DHT.DHT22
DHT_PIN = 15
# Configuración de LEDs (simulación de bombas)
LED_16 = 13
LED_17 = 17
GPIO.setup(LED_16, GPIO.OUT)
GPIO.setup(LED_17, GPIO.OUT)
# Configuración teclado matricial
row_pins = [2, 3, 4, 5]
col_pins = [7, 8, 9, 10]
for row in row_pins:
GPIO.setup(row, GPIO.OUT)
GPIO.output(row, 1)
for col in col_pins:
GPIO.setup(col, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
keymap = [["1", "2", "3", "A"],
["4", "5", "6", "B"],
["7", "8", "9", "C"],
["*", "0", "#", "D"]]
estado_dispositivos = {"1": 0, "2": 0, "riego": 0}
estado_modo = None
# Función para leer el teclado
def leer_teclado():
for r, row in enumerate(row_pins):
GPIO.output(row, 0)
for c, col in enumerate(col_pins):
if GPIO.input(col) == 0:
time.sleep(0.2)
return keymap[r][c]
GPIO.output(row, 1)
return None
# Función para activar LEDs
def activar_led(pin):
GPIO.output(pin, 1)
print(f"LED {pin} activado")
def desactivar_led(pin):
GPIO.output(pin, 0)
print(f"LED {pin} desactivado")
# Función para mostrar datos en LCD
def mostrar_en_lcd(linea1, linea2=""):
lcd.clear()
lcd.putstr(linea1)
lcd.move_to(0, 1)
lcd.putstr(linea2)
# **INGRESO DE USUARIO**
print("🔧 INGRESAR USUARIO")
while not leer_teclado() == "123": # Espera la clave correcta
print("🚫 USUARIO INCORRECTO, intenta nuevamente")
time.sleep(1)
print("✅ USUARIO CORRECTO, selecciona modo: [A] Automático | [B] Manual")
while estado_modo not in ["A", "B"]:
estado_modo = leer_teclado()
# Bucle principal
while True:
tecla = leer_teclado()
if tecla == "1":
print(f"Opción seleccionada: {tecla}")
mostrar_en_lcd(f"Opción: {tecla}")
if tecla == "A":
print("Modo automático activado")
mostrar_en_lcd("Modo: Automático")
if tecla == "6":
activar_led(LED_16)
mostrar_en_lcd("Riego Activado")
elif tecla == "7":
desactivar_led(LED_16)
mostrar_en_lcd("Riego Apagado")
# Leer sensores
humedad, temperatura = Adafruit_DHT.read(DHT_SENSOR, DHT_PIN)
# Mostrar datos en LCD
mostrar_en_lcd(f"Temp: {temperatura:.1f}C", f"Humedad: {humedad:.1f}%")
time.sleep(1)