from machine import Pin
from time import sleep_ms, sleep
from hx711 import HX711
import network, time
import ujson
from umqtt.simple import MQTTClient
MQTT_CLIENT_ID = "fruver333tFFFFORsant"
MQTT_BROKER = "test.mosquitto.org"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC_SUB = "reconocimiento/fruver"
DATA_PIN = 5
CLOCK_PIN = 17
hx = HX711(dout=DATA_PIN, pd_sck=CLOCK_PIN)
FACTOR_CALIBRACION = 2100/5 # Este valor debe ser ajustado según la calibración
TIEMPO_ESPERA = 500 # en milisegundos
precios = {
"mango_tommy": 1450,
"granadilla": 2570,
}
def conectaWifi(red, password):
global miRed
miRed = network.WLAN(network.STA_IF)
if not miRed.isconnected():
miRed.active(True)
miRed.connect(red, password)
print('Conectando a la red', red + "…")
timeout = time.time()
while not miRed.isconnected():
if (time.ticks_diff(time.time(), timeout) > 10):
return False
return True
# --------------------------
# Función para imprimir factura
# --------------------------
def imprimir_factura(producto, peso_kg, costo_total):
print("+-------------------------------------------+")
print("| SUPER FRUVER |")
print("+-------------------------------------------+")
print(f"| Producto : {producto:<30} |")
print(f"| Peso (kg) : {peso_kg:.1f}{'':<26} |")
print(f"| Precio total : ${costo_total:.1f}{'':<23} |")
print("+-------------------------------------------+")
# --------------------------
# Lógica principal
# --------------------------
if conectaWifi("Wokwi-GUEST", ""):
print("Conexión exitosa!")
print('Datos de la red (IP/netmask/gw/DNS):', miRed.ifconfig())
print("Conectando a MQTT server... ", MQTT_BROKER, "...", end="")
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
def sub_cb(topic, msg):
dato = ujson.loads(msg.decode())
r = dato["Producto"]
valor_crudo = hx.read()
peso_kg = valor_crudo / FACTOR_CALIBRACION
if r in precios:
costo_total = peso_kg * precios[r]
imprimir_factura(r, peso_kg, costo_total)
else:
print(f"Producto '{r}' no reconocido.")
while True:
client.set_callback(sub_cb)
client.subscribe(MQTT_TOPIC_SUB)
print("Esperando mensaje MQTT...")
client.wait_msg()
time.sleep(3)