from machine import Pin
import dht
import time
last_temp_value=0
wait_time = 2
delta=10
file_name="weather_station.csv"
sensor_active=False
sensor_deactivated = False
press_count=0
last_press_time= 0
debounce_delay = 0.2
double_press_delay= 0.5
def setup():
global sensor, button, led
# Set up the DHT sensor
dht_pin = Pin(15) # Change to the GPIO pin where your DHT is connected
sensor = dht.DHT22(dht_pin) # Use dht.DHT11 for DHT11 sensors
temperature = get_temperature()
button=Pin(14,Pin.OUT)
led=Pin(5, Pin.OUT)
def get_temperature():
sensor.measure() # Read the sensor data
temperature = sensor.temperature() # Get temperature in Celsius
return temperature
def get_delta(last_value, current_value):
current_Delta=0
if(last_temp_value!=0):
current_Delta = (abs(temperature - last_temp_value) / last_temp_value) * 100
else:
current_Delta=delta
return abs(current_Delta)
def format_timestamp():
t = time.localtime()
return "{:04d}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(
t[0], t[1], t[2], t[3], t[4], t[5]
)
# t holds year-month-date(space) hour:min: sec
def write_data(event, value):
global last_temp_value
# this if block will open file which we created and will add two columns Timestamp
with open(file_name, "w") as f: # write mode for "w" we have read mode(r), a for append
timestamp = format_timestamp()
if (event=="Start"):
f.write("Event,Timestamp,Value\n")
f.write(f"{event},{timestamp},{value},\n")
else:
f.write(f"{event},{timestamp},{value},\n")
print(f"Temperature: {value:.1f}°C")
last_temp_value = value
def push_button(pin):
global sensor_active, sensor_deactivated, press_count, last_press_time
current_time = time.ticks_ms() / 1000
# create two variables debounce_delay and double_press_delay
if (current_time - last_press_time) < debounce_delay:
return # to eliminate noise/ function
if (current_time - last_press_time) < double_press_delay: # in 0.5 sec, two times we press button
press_count = press_count + 1
else:
press_count = 1
last_press_time = current_time
if press_count == 1:
sensor_active = True
sensor_deactivated = False
print("DHT22 Activated")
led.on()
elif press_count == 2:
sensor_active = False
sensor_deactivated = True
print("DHT22 Deactivated")
press_count = 0
def blink_led(times):
for i in range(times):
led.on()
time.sleep(0.5)
led.off()
time.sleep(0.5)
setup()
# Attach an interrupt to the button to detect a falling edge (button press event) and trigger toggle_sensor function
button.irq(trigger=Pin.IRQ_FALLING, handler=push_button)
while True:
if sensor_active:
try:
temperature = get_temperature()
if get_delta(last_temp_value, temperature) >= delta:
write_data("Start", temperature)
last_temp_value = temperature # Update the last temperature
except Exception as error:
print("Failed to read the sensor", error)
else:
if sensor_deactivated:
blink_led(5)
sensor_deactivated= False
led.off()
time.sleep(2)