import dht
import machine
import utime
import bmp280
from machine import Pin, I2C, ADC
from ssd1306 import SSD1306_I2C
# Initialize DHT22 Sensor (Temp & Humidity)
dht_sensor = dht.DHT22(Pin(15))
# Initialize BMP280 Sensor (Pressure)
i2c = I2C(0, scl=Pin(21), sda=Pin(20))
bmp = bmp280.BMP280(i2c)
# Initialize Potentiometer (Wind Speed Simulation)
wind_sensor = ADC(Pin(26))
# Initialize OLED Display
oled = SSD1306_I2C(128, 64, i2c)
def read_wind_speed():
raw_value = wind_sensor.read_u16() # Read ADC value (0 - 65535)
wind_speed = (raw_value / 65535) * 100 # Convert to % scale (0 - 100%)
return round(wind_speed, 1)
while True:
try:
# Read Temperature & Humidity
dht_sensor.measure()
temp = dht_sensor.temperature()
humidity = dht_sensor.humidity()
# Read Pressure
pressure = bmp.pressure / 100 # Convert to hPa
# Read Wind Speed
wind_speed = read_wind_speed()
# Print values to Serial Monitor
print(f"Temperature: {temp:.1f}°C, Humidity: {humidity:.1f}%, Pressure: {pressure:.1f} hPa, Wind Speed: {wind_speed}%")
# Update OLED Display
oled.fill(0) # Clear screen
oled.text("Weather Station", 10, 0)
oled.text(f"Temp: {temp:.1f}C", 10, 15)
oled.text(f"Humidity: {humidity:.1f}%", 10, 30)
oled.text(f"Pressure: {pressure:.1f} hPa", 10, 45)
oled.text(f"Wind: {wind_speed}%", 10, 60)
oled.show()
except Exception as e:
print("Sensor Error:", e)
utime.sleep(2)