import machine
import time
import urequests
import network
import dht
# ThingSpeak settings
THINGSPEAK_API_KEY = "YVDU6T4V5ACXH5AJ"
THINGSPEAK_URL = "http://api.thingspeak.com/update"
# Wi-Fi settings
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# DHT22 (AM2302) sensor on GPIO 4
dht_sensor = dht.DHT22(machine.Pin(4))
def read_room_temperature_humidity():
try:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
return temperature, humidity
except Exception as e:
print("Failed to read sensor:", e)
return None, None
def send_data_to_thingspeak(temperature, humidity):
try:
params = "api_key={}&field1={}&field2={}".format(THINGSPEAK_API_KEY, temperature, humidity)
url = THINGSPEAK_URL + "?" + params
response = urequests.get(url)
response.close()
print("Data sent to ThingSpeak")
except Exception as e:
print("Failed to send data to ThingSpeak:", e)
# Initialize Wi-Fi connection
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
timeout = 15
start = time.time()
print("Connecting to Wi-Fi...")
while not wifi.isconnected():
if time.time() - start > timeout:
print("Failed to connect to Wi-Fi")
break
time.sleep(1)
if wifi.isconnected():
print("Connected to Wi-Fi:", wifi.ifconfig())
else:
print("No Wi-Fi connection, stopping.")
if wifi.isconnected():
if __name__ == "__main__":
try:
while True:
temperature, humidity = read_room_temperature_humidity()
if temperature is not None and humidity is not None:
print("Temperature: {:.2f} °C, Humidity: {:.2f} %".format(temperature, humidity))
send_data_to_thingspeak(temperature, humidity)
else:
print("Sensor read failed, skipping sending data")
time.sleep(15)
except KeyboardInterrupt:
print("Program interrupted by user")