import network, time, ujson
from machine import Pin, ADC
from utime import sleep_ms, ticks_ms, ticks_diff
from umqtt.simple import MQTTClient
# Configuración del cliente MQTT
MQTT_CLIENT_ID = "jxs15"
MQTT_BROKER = "broker.hivemq.com"
MQTT_USER = ""
MQTT_PASSWORD = ""
MQTT_TOPIC = "juanxiosam"
# Configuración del ADC (potenciómetro en pin 34)
sensor_adc = ADC(Pin(34))
sensor_adc.atten(ADC.ATTN_11DB) # Rango de entrada 0-3.6V aprox
sensor_adc.width(ADC.WIDTH_12BIT) # Resolución de 0-4095
# Función para conectar al WiFi
def conectaWifi(red, password):
miRed = network.WLAN(network.STA_IF)
miRed.active(True)
if not miRed.isconnected():
print('Conectando a la red', red, '...')
miRed.connect(red, password)
tiempo_inicio = ticks_ms()
while not miRed.isconnected():
if ticks_diff(ticks_ms(), tiempo_inicio) > 10000: # 10 segundos
print("Tiempo de espera agotado.")
return None
return miRed
# Conectar al WiFi
miRed = conectaWifi("Wokwi-GUEST", "")
if miRed:
print("¡Conexión WiFi exitosa!")
print("Configuración de red:", miRed.ifconfig())
try:
print("Conectando al broker MQTT:", MQTT_BROKER)
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
client.connect()
print("¡Conectado al broker MQTT!")
while True:
lectura = sensor_adc.read() # Valor de 0 a 4095
voltaje = (lectura / 4095) * 3.3 # Aproximado al rango real de voltaje
print("Voltaje: {:.2f} V, Lectura cruda: {}".format(voltaje, lectura))
mensaje = ujson.dumps({
"Voltaje": round(voltaje, 2),
"Lectura": lectura
})
print("Publicando en {}: {}".format(MQTT_TOPIC, mensaje))
client.publish(MQTT_TOPIC, mensaje)
sleep_ms(1000)
except Exception as e:
print("Error en la conexión MQTT o lectura:", str(e))
client.disconnect()
miRed.active(False)
else:
print("No se pudo conectar a la red WiFi.")