import time
import machine
from machine import Pin, ADC
import dht
import network
import ujson
import requests
led = Pin(26, Pin.OUT)
light_auto = Pin(14, Pin.OUT)
ldr = ADC(33)
# Kết nối Wifi
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
sensor = dht.DHT22(Pin(15))
# Host và auth liên kết với firebase
FIREBASE_HOST = "https://lab37-a04d0-default-rtdb.firebaseio.com/"
FIREBASE_AUTH = "OPAawKOdHPcnz3vFGwrl60YgV9MqpncRwD46V6P0"
# Firebase database path
FIREBASE_PATH = "/home_data.json"
# Khởi tạo các giá trị nhiệt độ, độ ẩm, và trở trước khi đọc từ cảm biến
prev_temperature = 0
prev_humidity = 0
pre_ldr_state = 0
# Chỉ cập nhật dữ liệu trên Firebase nếu giá trị thay đổi
def update_firebase_data(temperature, humidity,ldr_state):
global prev_temperature, prev_humidity, pre_ldr_state
if (temperature > 45):
led.on()
led_state = 1
else:
led.off()
led_state = 0
if ldr_state < 500:
light_auto.off()
pre_LDR = 0
else:
light_auto.on()
pre_LDR = 1
# Kiểm tra xem giá trị có thay đổi không
if temperature != prev_temperature or humidity != prev_humidity or ldr_state != pre_ldr_state:
data = {"temperature": temperature, "humidity": humidity, "led_state": led_state, "auto_led": pre_LDR}
url = "{}{}?auth={}".format(FIREBASE_HOST, FIREBASE_PATH, FIREBASE_AUTH)
try:
# Cập nhật dữ liệu trên Firebase
response_put = requests.put(url, json=data)
print("Firebase response (PUT):", response_put.text)
# Kiểm tra xem dữ liệu đã được đặt thành công hay không
if response_put.status_code == 200:
# Nhận dữ liệu cập nhật từ Firebase chỉ khi đặt dữ liệu thành công
response_get = urequests.get(url)
updated_data = response_get.json()
print("Firebase Data (GET):", updated_data)
response_get.close()
# Cập nhật các giá trị trước đó
prev_temperature = temperature
prev_humidity = humidity
pre_LDR = ldr_state
except Exception as e:
print("Error updating or fetching data from Firebase:", e)
while True:
try:
# Đọc dữ liệu từ cảm biến
sensor.measure()
# Lấy giá trị nhiệt độ và độ ẩm
temperature = sensor.temperature()
humidity = sensor.humidity()
ldr_state = ldr.read()
# In giá trị nhiệt độ và độ ẩm
print("Temperature: {}C".format(temperature))
print("Humidity: {}%".format(humidity))
print()
time.sleep(1)
# Cập nhật giá trị lên firebase và nhận giá trị sau khi cập nhật từ firebase
update_firebase_data(temperature, humidity, ldr_state)
except Exception as e:
print("Error reading sensor data: {}".format(e))
time.sleep(5)