from machine import SoftI2C, Pin
import time
from ssd1306 import SSD1306_I2C
from dht import DHT22
from time import sleep
from blynkLib import Blynk
import network
# Initialize DHT22 sensor
dht22 = DHT22(Pin(14))
BLYNK_AUTH_TOKEN = "vOdkqjun8LhH1KDKq7JgTDxOesC07bxO"
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("Wokwi-GUEST", "")
while not wifi.isconnected():
pass
print("Wifi Connected Successfully")
blynk = Blynk(BLYNK_AUTH_TOKEN)
# Initialize OLED display
I2C_ADDR_OLED = 0x3c
oled_width = 128
oled_height = 64
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)
oled = SSD1306_I2C(oled_width, oled_height, i2c, I2C_ADDR_OLED)
def send_sensor_data():
dht22.measure()
temp = dht22.temperature()
hum = dht22.humidity()
blynk.virtual_write(0, temp) # Virtual pin 0 for temperature
blynk.virtual_write(1, hum) # Virtual pin 1 for humidity
# Main loop
while True:
try:
sleep(2)
dht22.measure()
temp = dht22.temperature()
hum = dht22.humidity() # Read temperature and humidity
# Print to console
print('Temperature: %.1f C' % temp)
print('Humidity: %.1f %%' % hum)
blynk.run()
send_sensor_data() # Send sensor data to Blynk
# Display on OLED
oled.fill(0) # Clear the screen
oled.text('Temperature:'+str(temp)+'C', 0, 26, 1)
oled.text('Humidity: '+str(hum)+'%', 0, 36, 1)
oled.show()
except OSError as e:
print('Failed to read sensor.')