import network
import machine
import time
import dht
import urequests as requests
import LDR
import i2c_lcd
ldr_pin: int = 32
dht_pin: int = 33
led_temperature_red_pin = 22
led_temperature_blue_pin = 21
led_humidity_pin = 23
led_illumination_pin = 19
temperature_upper_limit = 38
temperature_lower_limit = 28
humidity_upper_limit = 60
humidity_lower_limit = 40
illumination_lower_limit = 400 # in lux
wifi_ssid = 'Wokwi-GUEST'
wifi_password = ''
thingspeak_api_key = 'F2HE1FDVQOMEZU50'
# Display
I2C_ADDR = 0x27
I2C_NUM_ROWS = 2
I2C_NUM_COLS = 16
FREQ = 800000
class SensorsData:
def __init__(
self,
humidity: float = 0.0,
temperature: float = 0.0,
illumination: float = 0.0,
):
self.humidity = humidity
self.temperature = temperature
self.illumination = illumination
def connect_to_wifi(ssid: str, password: str) -> network.WLAN:
print("Connecting to WiFi", end="")
wlan_sta = network.WLAN(network.STA_IF)
if not wlan_sta.isconnected():
wlan_sta.active(True)
wlan_sta.connect(wifi_ssid, wifi_password)
while not wlan_sta.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
return wlan_sta
def collect_data_from_sensors(dht_sensor: dht.DHT22, ldr_sensor: LDR.LDR) -> SensorsData:
dht_sensor.measure()
return SensorsData(
temperature=dht_sensor.temperature(),
humidity=dht_sensor.humidity(),
illumination=ldr_sensor.value(),
)
def send_data_to_thingspeak(data: SensorsData) -> None:
url = 'http://api.thingspeak.com/update?api_key={}&field1={}&field2={}&field3={}'.format(
thingspeak_api_key,
data.temperature,
data.humidity,
data.illumination,
)
requests.request('GET', url)
def main() -> None:
wlan_sta: network.WLAN = connect_to_wifi(wifi_ssid, wifi_password)
dht_sensor: dht.DHT22 = dht.DHT22(machine.Pin(dht_pin))
ldr_sensor: LDR.LDR = LDR.LDR(machine.Pin(ldr_pin))
# led_temperature_red = machine.Pin(led_temperature_red_pin, machine.Pin.OUT)
# led_temperature_blue = machine.Pin(led_temperature_blue_pin, machine.Pin.OUT)
# led_humidity = machine.Pin(led_humidity_pin, machine.Pin.OUT)
# led_illumination = machine.Pin(led_illumination_pin, machine.Pin.OUT)
while True:
sensors_data = collect_data_from_sensors(dht_sensor, ldr_sensor)
print(sensors_data.temperature)
if wlan_sta.isconnected():
#send_data_to_thingspeak(sensors_data)
pass
# if sensors_data.temperature >= temperature_upper_limit:
# led_temperature_red.value(1)
# led_temperature_blue.value(0)
# elif sensors_data.temperature <= temperature_lower_limit:
# led_temperature_red.value(0)
# led_temperature_blue.value(1)
# else:
# led_temperature_red.value(0)
# led_temperature_blue.value(0)
# if sensors_data.humidity < humidity_lower_limit:
# led_humidity.value(1)
# else:
# led_humidity.value(0)
# if sensors_data.illumination < 400:
# led_illumination.value(1)
# else:
# led_illumination.value(0)
time.sleep(0.5)
if __name__ == '__main__':
main()