from machine import Pin, Timer
import network
import time
from umqtt.robust import MQTTClient
import sys
import onewire
import ds18x20
# ============= CONFIGURACIÓN =============
TEMP_LIMIT = 30.0 # Límite de alarma
# DS18B20 en GPIO 15
ds_pin = Pin(15)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
# LED en GPIO 2 (activo en bajo)
led = Pin(2, Pin.OUT, value=1)
if not roms:
sys.exit()
# ============= ADAFRUIT IO =============
ADAFRUIT_IO_URL = b'io.adafruit.com'
ADAFRUIT_USERNAME = 'yaircostac'
ADAFRUIT_IO_KEY = 'ae02a36881a647b6a5144a9baf1bd58b'
CLIENT_ID = b'ESP32_Client_' + ADAFRUIT_USERNAME.encode()
FEED_TEMP = f'{ADAFRUIT_USERNAME}/feeds/presion'.encode()
FEED_ALERT = f'{ADAFRUIT_USERNAME}/feeds/alerta'.encode()
# ============= WIFI =============
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
wlan.connect('Wokwi-GUEST', '')
while not wlan.isconnected():
time.sleep(1)
connect_wifi()
# ============= MQTT =============
def connect_mqtt():
global client
client = MQTTClient(
client_id=CLIENT_ID,
server=ADAFRUIT_IO_URL,
user=ADAFRUIT_USERNAME,
password=ADAFRUIT_IO_KEY,
ssl=False
)
client.connect()
connect_mqtt()
# ============= LECTURA SENSOR =============
def read_sensor(timer):
try:
ds_sensor.convert_temp()
time.sleep_ms(750)
for rom in roms:
temp = ds_sensor.read_temp(rom)
# Publicar temperatura
client.publish(FEED_TEMP, f"{temp:.2f}")
# Control alarma (solo datos 1 o 0)
if temp >= TEMP_LIMIT:
led.value(0) # Encender LED
client.publish(FEED_ALERT, b"1")
else:
led.value(1) # Apagar LED
client.publish(FEED_ALERT, b"0")
except:
pass
# Cada 10 segundos
sensor_timer = Timer(0)
sensor_timer.init(period=10000, mode=Timer.PERIODIC, callback=read_sensor)
# ============= LOOP PRINCIPAL =============
while True:
time.sleep(1)