from machine import Pin, ADC
import network
import urequests
import time
import dht
# ---------------- WIFI ----------------
ssid = "Wokwi-GUEST"
password = ""
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
while not wifi.isconnected():
print("Connecting to WiFi...")
time.sleep(1)
print("Connected:", wifi.ifconfig())
# ---------------- THINGSPEAK ----------------
api_key = "YOUR_API_KEY"
# ---------------- SENSORS ----------------
sensor = dht.DHT22(Pin(15))
pir = Pin(3, Pin.IN)
ldr = ADC(26)
mq2 = ADC(27)
# ---------------- BUFFER ----------------
buffer = [] # stores failed data
# ---------------- SEND FUNCTION ----------------
def send_data(data):
try:
url = (
"http://api.thingspeak.com/update?api_key={}"
"&field1={}&field2={}&field3={}&field4={}&field5={}"
).format(api_key, *data)
r = urequests.get(url)
print("Sent:", data, "| Response:", r.text)
r.close()
return True
except Exception as e:
print("Send Failed:", e)
return False
# ---------------- MAIN LOOP ----------------
while True:
try:
# Read sensors
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
motion = pir.value()
light = ldr.read_u16()
gas = mq2.read_u16()
current_data = (temp, hum, gas, light, motion)
print("\nCurrent:", current_data)
# 🔥 Step 1: Send buffered data first
if buffer:
print("Retrying buffered data...")
for old_data in buffer[:]:
if send_data(old_data):
buffer.remove(old_data)
# 🔥 Step 2: Send current data
if not send_data(current_data):
print("Adding to buffer...")
buffer.append(current_data)
print("Buffer size:", len(buffer))
except Exception as e:
print("Error:", e)
time.sleep(15)