import network
import machine
import time
import dht
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
import usocket as socket
import ussl as ssl
import sys
# DHT sensor
DHT_PIN = 0
dht_sensor = dht.DHT22(machine.Pin(DHT_PIN))
# I2C LCD
I2C_ADDR = 0x27
I2C_NUM_ROWS = 2
I2C_NUM_COLS = 16
i2c = machine.I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
# WiFi credentials
SSID = "Wokwi-GUEST"
PASSWORD = ""
# Email credentials
SMTP_HOST = "smtp.gmail.com"
SMTP_PORT = 465
AUTHOR_EMAIL = ""
AUTHOR_PASSWORD = ""
RECIPIENT_EMAIL = ""
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("Connecting to WiFi...", end="")
while not wlan.isconnected():
print(".", end="")
time.sleep(1)
print(" Connected!")
print(wlan.ifconfig())
def send_email(subject, msg):
content = f"Subject: {subject}\n\n{msg}"
smtp_server = socket.getaddrinfo(SMTP_HOST, SMTP_PORT)[0][-1]
s = socket.socket()
s.connect(smtp_server)
s = ssl.wrap_socket(s)
s.write("EHLO {}\r\n".format(SMTP_HOST).encode())
s.write("AUTH LOGIN\r\n".encode())
s.write("{}\r\n".format(binascii.b2a_base64(AUTHOR_EMAIL.encode()).decode().strip()).encode())
s.write("{}\r\n".format(binascii.b2a_base64(AUTHOR_PASSWORD.encode()).decode().strip()).encode())
s.write("MAIL FROM:<{}>\r\n".format(AUTHOR_EMAIL).encode())
s.write("RCPT TO:<{}>\r\n".format(RECIPIENT_EMAIL).encode())
s.write("DATA\r\n".encode())
s.write("{}\r\n.\r\n".format(content).encode())
s.write("QUIT\r\n".encode())
s.close()
print("Email sent")
def main():
connect_wifi()
lcd.putstr("IOT\nCW2")
time.sleep(3)
while True:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
print(f"Temperature: {temperature:.2f} C")
print(f"Humidity: {humidity:.1f} %")
lcd.clear()
lcd.putstr(f"Temp: {temperature:.2f} C\nHumidity: {humidity:.1f} %")
if temperature > 40:
send_email("Alert! High Temperature", f"Temperature was over 40 degrees Celsius! Current temperature: {temperature:.2f} C")
print("High temperature message sent")
if humidity < 60:
send_email("Alert! High Humidity", f"Humidity was over 60%! Current humidity: {humidity:.1f} %")
print("High humidity message sent")
time.sleep(3)
if __name__ == "__main__":
main()