from machine import Pin
from time import sleep
import network
import dht
import urequests
import time
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
BLYNK_TOKEN = "WBRAXIVGPVfKjzlL55OFiQvASnNfyjdM"
BLYNK_URL = "https://blynk.cloud/external/api"
THINGSPEAK_KEY = "YOIFM1E9CBZPQN0U"
THINGSPEAK_URL = "http://api.thingspeak.com/update"
sensor = dht.DHT22(Pin(15))
led = Pin(4, Pin.OUT)
ledamarillo = Pin(16, Pin.OUT)
ledrojo = Pin(17, Pin.OUT)
pin_sensor = Pin(21, Pin.IN)
def conectar_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
print("Conectando a WiFi", end="")
while not wifi.isconnected():
print(".", end="")
sleep(0.5)
print("\nWiFi conectado:", wifi.ifconfig()[0])
def blynk_update(**datos):
params = "&".join([pin + "=" + str(valor) for pin, valor in datos.items()])
url = BLYNK_URL + "/update?token=" + BLYNK_TOKEN + "&" + params
try:
r = urequests.get(url)
r.close()
except Exception as e:
print("Error enviando a Blynk:", e)
def blynk_get(pin):
url = BLYNK_URL + "/get?token=" + BLYNK_TOKEN + "&" + pin
try:
r = urequests.get(url)
valor = int(r.text)
r.close()
return valor
except Exception as e:
print("Error leyendo Blynk:", e)
return 0
def enviar_thingspeak(temperatura, humedad):
url = THINGSPEAK_URL + "?api_key=" + THINGSPEAK_KEY
url += "&field1=" + str(temperatura)
url += "&field2=" + str(humedad)
try:
r = urequests.get(url)
print("ThingSpeak respuesta:", r.text)
r.close()
except Exception as e:
print("Error enviando a ThingSpeak:", e)
conectar_wifi()
while True:
try:
sensor.measure()
temperatura = sensor.temperature()
humedad = sensor.humidity()
estado_sensor = pin_sensor.value()
estado_led = blynk_get("V0")
led.value(estado_led)
blynk_update(V1=temperatura, V2=humedad)
enviar_thingspeak(temperatura, humedad)
if temperatura < 15:
led.on()
else:
led.off()
if humedad < 30:
ledamarillo.on()
else:
ledamarillo.off()
# Lógica inversa: 0 significa que detecta gas/humo
if estado_sensor == 0:
print("¡Alerta! Humo o gas detectado")
led.value(1) # Encendemos el LED
else:
print("Ambiente seguro")
led.value(0) # Apagamos el LED
# Enviamos los datos a Blynk en el pin virtual V3
blynk_update(V3=estado_sensor)
# Esperamos medio segundo antes de la siguiente lectura
time.sleep(0.5)
print("Temperatura:", temperatura, "°C")
print("Humedad:", humedad, "%")
print("LED:", estado_led)
print("--------------------------------")
except OSError:
print("Error al leer el DHT22")
sleep(15)