from machine import Pin, time_pulse_us
import network
from time import sleep, sleep_us
import urequests
import ujson
import dht
import math
#Wifi Credentials
ssid = "Wokwi-GUEST"
password = ""
# ThingSpeak API Setting
THINGSPEAK_API_KEY = "4KA5OZSQNVINM10V"
THINGSPEAK_URL = "https://api.thingspeak.com/update"
#ldr sensor connected to GPIO27
ldr_pin = machine.ADC(1)
#DHT22 (AM2302) sensor on GPIO 41
dht_sensor = dht.DHT22(machine.Pin(1))
led1 = machine.Pin(18, Pin.OUT)
led2 = machine.Pin(19, Pin.OUT)
trigger = Pin(17, Pin.OUT)
echo = Pin(16, Pin.IN)
#read analog pin
def read_ldr():
ldr_data = ldr_pin.read_u16()
#print(ldr_data)
v_out = ldr_data / 65535 * 5
#print(v_out)
r_ldr = 2000*v_out/(1 - v_out / 5)
lux = pow(50*1000*pow(10, 0.7)/r_ldr, (1/0.7))
return lux
#Function to read room temperature and humidity
def read_room_temperature_humidity():
dht_sensor.measure()
temperature = dht_sensor.temperature ()
humidity = dht_sensor.humidity()
return temperature, humidity
def measure_distance():
# Ensure trigger is low initially
trigger.low()
sleep_us(2)
# Send a 10 microsecond pulse to the trigger pin
trigger.high()
sleep_us(10)
trigger.low()
# Measure the duration of the echo pulse (in microseconds)
pulse_duration = time_pulse_us(echo, Pin.high)
# Calculate the distance (in centimeters) using the speed of sound (343 m/s)
distance = pulse_duration * 0.0343 / 2
return distance
#send to Thingspeak
def send_cloud(ldr, temperature, humidity, data4):
data = {
"api_key":THINGSPEAK_API_KEY,
"field1": ldr,
"field2": temperature,
"field3": humidity,
"field4": data4,
}
response = urequests.post(THINGSPEAK_URL, data=ujson.dumps(data), headers={"Content-Type": "application/json"})
response.close()
def send_cloud1(data1):
data = {
"api_key":THINGSPEAK_API_KEY,
"field5": data1,
}
response = urequests.post(THINGSPEAK_URL, data=ujson.dumps(data), headers={"Content-Type": "application/json"})
response.close()
def connect():
# Connect to WLAN
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while wlan.isconnected() == False:
print('Waiting for connection...')
sleep(1)
ip = wlan.ifconfig()[0]
print(f'Connected on {ip}')
return ip
if __name__ == "__main__":
connect()
try:
while True:
ldr = read_ldr()
temperature, humidity = read_room_temperature_humidity()
distance = measure_distance()
print(f"Lux: {ldr}")
print(f"Temp: {temperature}")
print(f"Hum: {humidity}")
if ldr > 500 :
led2.off()
send_cloud1(0)
if ldr <= 500 :
led2.on()
send_cloud1(1)
if distance <= 50:
led1.on()
send_cloud(ldr, temperature, humidity,1)
print("Data sent to ThingSpeak")
print("\n-------------------------------\n")
if distance > 50:
led1.off()
send_cloud(ldr, temperature, humidity,0)
print("Data sent to ThingSpeak")
print("\n-------------------------------\n")
sleep(5)
except KeyboardInterrupt:
pass