from machine import Pin, ADC, I2C
from time import sleep
import dht
import ssd1306 # SSD1306 driver file
# Setup for Potentiometer (simulating MQ-135 air quality sensor)
pot = ADC(Pin(34))
pot.atten(ADC.ATTN_11DB) # Full range (0-3.3V)
# Setup for DHT22 (temperature and humidity sensor)
dht_sensor = dht.DHT22(Pin(15))
# Setup for OLED display (I2C)
i2c = I2C(0, scl=Pin(22), sda=Pin(21)) # ESP32 default I2C pins
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# Add an initial delay to ensure OLED initializes properly
sleep(1)
def read_air_quality():
air_quality_value = pot.read() # Simulated air quality using potentiometer
voltage = (air_quality_value / 4095.0) * 3.3
return air_quality_value, voltage
def read_temperature_humidity():
try:
dht_sensor.measure()
temperature = dht_sensor.temperature()
humidity = dht_sensor.humidity()
return temperature, humidity
except OSError as e:
return None, None
while True:
# Read air quality (potentiometer simulating MQ-135)
air_quality_value, air_voltage = read_air_quality()
# Read temperature and humidity from DHT22
temperature, humidity = read_temperature_humidity()
# Clear OLED display before updating
oled.fill(0)
# Display air quality data
oled.text("Air Quality:", 0, 0)
oled.text("Value: {}".format(air_quality_value), 0, 10)
oled.text("Voltage: {:.2f}V".format(air_voltage), 0, 20)
# Display temperature and humidity
if temperature is not None and humidity is not None:
oled.text("Temp: {:.1f}C".format(temperature), 0, 40)
oled.text("Humidity: {:.1f}%".format(humidity), 0, 50)
else:
oled.text("Sensor Error", 0, 40)
# Update OLED display
oled.show()
# Add a delay to allow time for the display to update
sleep(2)