import machine
from dht import DHT22
from machine import Pin, ADC, SoftI2C
from ssd1306 import SSD1306_I2C
from time import sleep, ticks_us, ticks_diff, sleep_us
def meas(led, led1, sensor):
sensor.measure()
temperature = sensor.temperature()
humidity = sensor.humidity()
con_temp(led, temperature)
con_humi(led1, humidity)
return [temperature, humidity]
def adc_v(led, led1, mq2, ldr):
mq2.atten(ADC.ATTN_11DB)
ldr.atten(ADC.ATTN_11DB)
gas = mq2.read()
light = ldr.read()
con_gas(led, gas)
con_ldr(led1, light)
return [gas, light]
def ultra(led, trigger, echo):
trigger.value(1)
sleep_us(10)
trigger.value(0)
while echo.value() == 0:
pulse_start = ticks_us()
while echo.value() == 1:
pulse_end = ticks_us()
pulse_duration = ticks_diff(pulse_end, pulse_start)
distance = pulse_duration * 0.034 / 2
con_dist(led, distance)
return distance
def con_temp(led, temp):
if temp > 30:
led.value(1)
else:
led.value(0)
def con_humi(led, humi):
if humi > 50:
led.value(1)
else:
led.value(0)
def con_gas(led, gas):
if gas > 2000:
led.value(1)
else:
led.value(0)
def con_ldr(led, ldr):
if ldr < 2000:
led.value(1)
else:
led.value(0)
def con_dist(led, dist):
if dist < 50:
led.value(1)
else:
led.value(0)
def main():
leds = [Pin(19, Pin.OUT), Pin(18, Pin.OUT), Pin(17, Pin.OUT), Pin(4, Pin.OUT), Pin(0, Pin.OUT)]
sensors = [DHT22(Pin(33, Pin.OUT)), ADC(Pin(35)), ADC(Pin(34)), Pin(12, Pin.OUT), Pin(13, Pin.IN)]
I2C_ADDR = 0x3C
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=100000)
oled_width = 128
oled_height = 64
oled = SSD1306_I2C(oled_width, oled_height, i2c, I2C_ADDR)
while True:
measured_value = meas(leds[0], leds[1], sensors[0])
adc_value = adc_v(leds[2], leds[3],sensors[1], sensors[2])
distance = int(ultra(leds[4], sensors[3], sensors[4]))
print(f"Temperature : {measured_value[0]}°C")
print(f"humidity : {measured_value[1]}%")
print(f"GAS : {adc_value[0]} ppm")
print(f"light : {adc_value[1]} lux")
print(f"The Distance : {distance} cm")
oled.text(f"temp : {measured_value[0]}C", 0, 0)
oled.text(f"humid : {measured_value[1]}%", 0, 10)
oled.text(f"gas : {adc_value[0]} ppm", 0, 20)
oled.text(f"light : {adc_value[1]} lux", 0, 30)
oled.text(f"dist : {distance} cm", 0, 40)
oled.show()
sleep(0.6)
if __name__ == "__main__":
main()