from machine import Pin, ADC, I2C
from time import sleep
from i2c_lcd import I2cLcd
import network
import ujson
from umqtt.simple import MQTTClient
import urequests
import math
# Configuración del Potenciómetro
pot = ADC(Pin(33))
pot.atten(ADC.ATTN_11DB)
pot.width(ADC.WIDTH_12BIT)
# Configuración del LCD
i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
lcd = I2cLcd(i2c, 0x27, 2, 16)
# Conexión WiFi
print("Conectando a WiFi...", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
sleep(0.1)
print(" ¡Conectado!")
# Configuración MQTT
MQTT_CLIENT_ID = "esp32-potenciometro"
MQTT_BROKER = "broker.mqttdashboard.com"
MQTT_TOPIC = "proyect_esp32"
client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER)
client.connect()
print("Conectado al broker MQTT")
# Firebase (Realtime Database)
FIREBASE_URL = "https://misaaaa-d1938-default-rtdb.firebaseio.com/lectura.json"
# Bucle principal
prev_value = -1
while True:
valor_adc = pot.read()
grados = int((valor_adc / 4095) * 270)
radianes = (grados * math.pi) / 180 # Conversión a radianes
if grados != prev_value:
# Mostrar en LCD
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("ADC:{:<4} G:{:<3}".format(valor_adc, grados))
lcd.move_to(0, 1)
lcd.putstr("Rad:{:.2f}".format(radianes))
# Crear mensaje
mensaje = ujson.dumps({
"adc": valor_adc,
"grados": grados,
"radianes": round(radianes, 2)
})
# Enviar por MQTT
client.publish(MQTT_TOPIC, mensaje)
print("MQTT:", mensaje)
# Enviar a Firebase
try:
response = urequests.put(FIREBASE_URL, data=mensaje)
print("Firebase:", response.text)
response.close()
except Exception as e:
print("Error Firebase:", e)
prev_value = grados
else:
print("No hay cambios")
sleep(1)