import network
import machine
import time
import urequests
import dht
from machine import Pin, time_pulse_us
SSID = "Wokwi-GUEST"
PASSWORD = ""
pir = Pin(15, Pin.IN, Pin.PULL_DOWN)
dht_sensor = dht.DHT22(Pin(12))
THINGSPEAK_URL = "https://api.thingspeak.com/update.json"
THINGSPEAK_API_KEY = "6Y1NWMB6LOMF4CHN"
trig_pin = Pin(5, Pin.OUT)
echo_pin = Pin(18, Pin.IN)
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("Conectando a WiFi...")
while not wlan.isconnected():
time.sleep(1)
print("Conectado exitosamente a WiFi:", wlan.ifconfig())
def medir_distancia():
trig_pin.value(0)
time.sleep_us(2)
trig_pin.value(1)
time.sleep_us(10)
trig_pin.value(0)
try:
duration_us = time_pulse_us(echo_pin, 1, 30000)
distance_cm = duration_us / 58.0
return distance_cm
except OSError:
print("Error: tiempo de espera excedido para eco.")
return -1
def enviar_a_thingspeak(temp, humidity, distancia, estado):
data = {
"api_key": THINGSPEAK_API_KEY,
"field1": temp,
"field2": humidity,
"field3": distancia,
"field4": estado,
}
try:
respuesta = urequests.post(THINGSPEAK_URL, json=data)
print("Enviado a ThingSpeak:", respuesta.text)
respuesta.close()
except Exception as e:
print("Error al enviar datos:", e)
connect_wifi()
try:
while True:
estado = pir.value()
print("Estado PIR:", estado)
dht_sensor.measure()
temp = dht_sensor.temperature()
humidity = dht_sensor.humidity()
print("Temperatura:", temp, "°C")
print("Humedad:", humidity, "%")
distancia = medir_distancia()
if distancia >= 0:
print(f"Distancia medida: {distancia:.2f} cm")
else:
print("No se pudo medir la distancia.")
distancia = -1
enviar_a_thingspeak(temp, humidity, distancia, estado)
time.sleep(5)
except KeyboardInterrupt:
print("Programa detenido.")