from machine import I2C, Pin
import time
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
from hx711 import HX711 # Asegúrate de tener esta librería en tu ESP32
# **Configuración del LCD I2C**
I2C_ADDR = 0x27 # Dirección del LCD (ajustar si es diferente)
LCD_COLUMNS = 16
LCD_LINES = 2
i2c = I2C(0, scl=Pin(22), sda=Pin(21)) # Ajusta los pines según tu hardware
lcd = I2cLcd(i2c, I2C_ADDR, LCD_LINES, LCD_COLUMNS)
# **Configuración de la celda de carga HX711**
pin_OUT = Pin(18, Pin.IN, pull=Pin.PULL_DOWN) # Data del HX711
pin_SCK = Pin(5, Pin.OUT) # Clock del HX711
hx = HX711(pin_SCK, pin_OUT)
hx.set_gain(128)
time.sleep_ms(50)
# **Tarar la celda de carga (ajustar a cero)**
lcd.putstr("TARANDO...")
hx.tare()
lcd.clear()
# **Calibración con un peso conocido**
peso_referencia = 1.0 # Peso en kg
lcd.putstr("Coloca 1kg...")
time.sleep(5) # Esperar para colocar el peso
raw_data = hx.read() # Leer valor en bruto
scale_factor = raw_data / peso_referencia # Calcular el factor de escala
hx.set_scale(scale_factor)
lcd.clear()
lcd.putstr("Calibrado OK")
time.sleep(2)
lcd.clear()
# **Bucle principal de medición**
while True:
peso = round(hx.get_units(), 2) # Leer peso y redondear a 2 decimales
# **Mostrar en consola**
print(f"Peso: {peso} kg")
# **Mostrar en LCD**
lcd.clear()
lcd.putstr(f"Peso: {peso} kg")
time.sleep(0.5) # Intervalo de actualización