from machine import Timer,ADC,Pin,I2C
from time import sleep,sleep_us
import machine
import dht
import sh1106
#---------------------------------------------------------------------------
i2c = I2C(scl=Pin(22), sda=Pin(23), freq=400000)
display = sh1106.SH1106_I2C(128, 64, i2c, Pin(16), 0x3c)
echo=Pin(18,Pin.IN)
trig=Pin(5,Pin.OUT)
tim0 = Timer(0)
led = Pin(13,Pin.OUT)
led2 = Pin(12,Pin.OUT)
led3= Pin(14,Pin.OUT)
sensor = dht.DHT22(Pin(15))
ldr = ADC(Pin(34))
ldr.atten(ADC.ATTN_11DB)
ldr.width(ADC.WIDTH_12BIT)
#---------------------------------------------------------------------------
def dis_meature():
trig.value(0)
sleep_us(2)
trig.value(1)
sleep_us(10)
trig.value(0)
x=machine.time_pulse_us(echo,1)
distance=(0.034*x)/2
return distance
#---------------------------------------------------------------------------
def ht_detect_nodis():
#for himidity
if hum <= 39 and (temp<=40 and temp >=15):
status = "Very Low"
display.fill(0)
display.text('Huminity:', 0, 5, 1)
display.text(status, 0, 15, 1)
display.text('Humidity: %3.1f per' %hum, 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
elif hum <= 49 and (temp<=40 and temp >=15):
status = "Low"
display.fill(0)
display.text('Huminity:', 0, 5, 1)
display.text(status, 0, 15, 1)
display.text('Humidity: %3.1f per' %hum, 0, 50, 1)
display.show()
led3.value(0)
led.value(0)
led2.value(1);sleep(0.5)
led2.value(0);sleep(0.5)
#for temp
elif temp >= 40 :
display.fill(0)
display.text('Temp: %3.1f C' %temp, 0, 5, 1)
display.text('high tempareture', 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
elif temp <= 15 :
display.fill(0)
display.text('Temp: %3.1f C' %temp, 0, 5, 1)
display.text('Low tempareture', 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
else:
# status = "Normal"
led3.value(1)
led.value(0)
led2.value(0)
sleep(1)
status = "Normal"
display.fill(0)
display.text('Huminity: %str'%status, 0, 5, 0)
display.text('Temp: %3.1f C' %temp, 0, 25, 0)
display.text('Humidity: %3.1f percent' %hum, 0, 50, 0)
display.show()
def ht_detect_dis():
# print('Temperature: %3.1f C' %temp)
# print('Humidity: %3.1f percent' %hum)
if hum <= 39 and (temp<=40 and temp >=15):
status = "Very Low"
display.fill(0)
display.text('Huminity:', 0, 5, 1)
display.text(status, 0, 15, 1)
display.text('Humidity: %3.1f per' %hum, 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
elif hum <= 49 and (temp<=40 and temp >=15):
status = "Low"
display.fill(0)
display.text('Huminity:', 0, 5, 1)
display.text(status, 0, 15, 1)
display.text('Humidity: %3.1f per' %hum, 0, 50, 1)
display.show()
led3.value(0)
led.value(0)
led2.value(1);sleep(0.5)
led2.value(0);sleep(0.5)
#for temp
elif temp >= 40 :
display.fill(0)
display.text('Temp: %3.1f C' %temp, 0, 5, 1)
display.text('high tempareture', 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
elif temp <= 15 :
display.fill(0)
display.text('Temp: %3.1f C' %temp, 0, 5, 1)
display.text('Low tempareture', 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
else:
# status = "Normal"
led3.value(1)
led.value(0)
led2.value(0)
sleep(1)
status = "Normal"
display.fill(0)
display.text('Huminity: %str'%status, 0, 5, 1)
display.text('Temp: %3.1f C' %temp, 0, 25, 1)
display.text('Humidity: %3.1f percent' %hum, 0, 50, 1)
display.show()
#---------------------------------------------------------------------------
def Lux_detect(timer):
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
data_ldr = ldr.read()
volt_ldr = (3.3/4095)*data_ldr
illuminance_ldr = 42.175*pow(volt_ldr,-3.145)
print("send data Timer0 illuminance_ldr = %5.2f Lux" % illuminance_ldr)
if illuminance_ldr <= 20 :
if dis_meature() <= 380:
if hum <= 39 and (temp<=40 and temp >=15):
status = "Very Low"
display.fill(0)
display.text('Huminity:', 0, 5, 1)
display.text(status, 0, 15, 1)
display.text('Humidity: %3.1f per' %hum, 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
elif hum <= 49 and (temp<=40 and temp >=15):
status = "Low"
display.fill(0)
display.text('Huminity:', 0, 5, 1)
display.text(status, 0, 15, 1)
display.text('Humidity: %3.1f per' %hum, 0, 50, 1)
display.show()
led3.value(0)
led.value(0)
led2.value(1);sleep(0.5)
led2.value(0);sleep(0.5)
#for temp
elif temp >= 40 :
display.fill(0)
display.text('Temp: %3.1f C' %temp, 0, 5, 1)
display.text('high tempareture', 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
elif temp <= 15:
display.fill(0)
display.text('Temp: %3.1f C' %temp, 0, 5, 1)
display.text('Low tempareture', 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
else:
# status = "Normal"
led3.value(1)
led.value(1)
led2.value(1)
status = "Normal"
display.fill(0)
display.text('Huminity: %str'%status, 0, 5, 1)
display.text('Temp: %3.1f C' %temp, 0, 25, 1)
display.text('Humidity: %3.1f percent' %hum, 0, 50, 1)
display.show()
sleep(2)
else:
if hum <= 39 and (temp<=40 and temp >=15):
status = "Very Low"
display.fill(0)
display.text('Huminity:', 0, 5, 1)
display.text(status, 0, 15, 1)
display.text('Humidity: %3.1f per' %hum, 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
elif hum <= 49 and (temp<=40 and temp >=15):
status = "Low"
display.fill(0)
display.text('Huminity:', 0, 5, 1)
display.text(status, 0, 15, 1)
display.text('Humidity: %3.1f per' %hum, 0, 50, 1)
display.show()
led3.value(0)
led.value(0)
led2.value(1);sleep(0.5)
led2.value(0);sleep(0.5)
#for temp
elif temp >= 40 :
display.fill(0)
display.text('Temp: %3.1f C' %temp, 0, 5, 1)
display.text('high tempareture', 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
elif temp <= 15 :
display.fill(0)
display.text('Temp: %3.1f C' %temp, 0, 5, 1)
display.text('Low tempareture', 0, 25, 1)
display.show()
led3.value(0)
led2.value(0)
led.value(1);sleep(0.5)
led.value(0);sleep(0.5)
else:
status = "Normal"
display.fill(0)
display.text('Huminity: %str'%status, 0, 5, 0)
display.text('Temp: %3.1f C' %temp, 0, 25, 0)
display.text('Humidity: %3.1f percent' %hum, 0, 50, 0)
display.show()
led.value(1)
led2.value(1)
led3.value(1)
sleep(2)
else:
pass
#---------------------------------------------------------------------------
tim0.init(period=1000, mode=Timer.PERIODIC, callback=Lux_detect)
#---------------------------------------------------------------------------
while True:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
if dis_meature()<= 380:
ht_detect_dis()
else:
ht_detect_nodis()