from machine import I2C, Pin, ADC
from time import sleep
from dht import DHT22
from pico_i2c_lcd import I2cLcd
import urequests
import network
# WiFi credentials
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# ThingSpeak API settings
THINGSPEAK_API_KEY = "0ARIHGR70ZITST3W"
THINGSPEAK_CHANNEL_ID = 2354374
dht = DHT22(Pin(15))
ldr_pin = Pin(26, Pin.IN) # GPIO for the LDR sensor
ldr_adc = ADC(ldr_pin)
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=100000)
I2C_ADDR = i2c.scan()[0]
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
# Connect to WiFi
wifi = network.WLAN(network.STA_IF)
if not wifi.isconnected():
print("Connecting to WiFi...")
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
while not wifi.isconnected():
pass
print("Connected to WiFi")
def send_to_thingspeak(temp, hum, light):
url = "https://api.thingspeak.com/update?api_key={}&field1={}&field2={}&field3={}".format(THINGSPEAK_API_KEY, temp, hum, light)
response = urequests.get(url)
response.close()
try:
while True:
dht.measure()
temp = dht.temperature()
hum = dht.humidity()
# Read the LDR sensor value
light_value = ldr_adc.read_u16()
print("Temperature: {}°C Humidity: {:.0f}% Light: {}".format(temp, hum, light_value))
send_to_thingspeak(temp, hum, light_value)
lcd.clear()
lcd.putstr('Temp: ' + str(temp) + " C")
lcd.move_to(0, 1)
lcd.putstr('Hum: ' + str(hum) + "%")
lcd.move_to(0, 2)
lcd.putstr('Light: ' + str(light_value))
sleep(30) # Delay for 30 seconds (ThingSpeak allows up to 15-second updates)
except KeyboardInterrupt:
pass