from machine import Pin, ADC
import time
import dht
import network as MOD_NETWORK
import time as MOD_TIME
import os as MOD_OS
'''
Đèn thông minh
- Led xanh dương
Chân dài nối với điện trở và nối với chân GPIO13
- Button vàng
Một chân nối với GPIO26 của ESP2
Một chân nối với GND
'''
'''
Vòi nước thông minh
-DHT22
Chân VCC của relay nối với nguồn 3v3 của ESP32
Chân GND của relay nối với GND của ESP32
Chân SDA của DHT22 nối với 25 của ESP32
-Relay
Chân VCC của relay nối với nguồn 3v3 của ESP32
Chân GND của relay nối với GND của ESP32
Chân IN của relay nối với GPIO16 của ESP32
-Led xanh nước biển
Chân dài nối với nguồn VCC
Chân ngắn nối với NO của relay
-Button xanh dương
Một chân nối với GND của ESP32
Một chân nối với GPIO18 của ESP32
'''
'''
Quạt thông minh
Dư: (- LED đỏ
Chân dài nối với D của PIR
Chân ngắn nối với GND của ESP32)
-LED xanh lá cây
Chân dài nối với nguồn VCC
Chân ngắn nối với NO của relay
-Potentiometer
VCC nối với 3v3 của ESP32
GND nối với GND của ESP32
SIG nối với chân GPIO34 của ESP32
-Relay
Chân VCC của relay nối với nguồn 3v3 của ESP32
Chân GND của relay nối với GND của ESP32
Chân IN của relay nối với GPIO2 của ESP32
-Button đen
Một chân nối với GND của ESP32
Một chân nối với GPIO5 của ESP32
'''
'''
Rèm cửa thông minh
- Led tím
Chân dài nối với nguồn VCC
Chân ngắn nối với NO của relay
- Button đỏ
Một chân nối với GPIO15 của ESP2
Một chân nối với GND
- Relay
Chân VCC của relay nối với nguồn 3v3 của ESP32
Chân GND của relay nối với GND của ESP32
Chân IN của relay nối với GPIO4 của ESP32
'''
'''
Chuyển kênh TV
- Led cam
Chân dài nối với điện trở và nối điện trở với GPIO17 của ESP32
- Button xanh lá
Một chân nối với GPIO14 của ESP2
Một chân nối với GND
'''
# Định nghĩa chân kết nối
led_xanh_duong_pin = 13 # Chân kết nối đèn LED
button_vang_pin = 26 # Chân kết nối nút nhấn
relay_rem_pin = 4 # Chân kết nối Relay
led_hong_pin = 27
button_do_pin = 15 # Chân kết nối nút nhấn
led_cam_pin = 17 # Chân kết nối đèn LED
button_xanh_la_pin = 14 # Chân kết nối nút nhấn
# Vòi nước thông minh
chan_dht = 25 # Chân DHT22
chan_relay_voi_nuoc = 16 # Chân relay vòi nước
chan_led_nuoc = 21 # Chân LED xanh nước biển
button_xanh_duong_pin = 18
# Quạt thông minh
chan_potentiometer = ADC(Pin(34)) # Chân potentiometer
chan_led_xanh_la = 12 # Chân LED xanh lá (cho quạt)
chan_relay_quat = 2 # Chân relay quạt
button_đen_pin = 5
# Khởi tạo chân GPIO
led_xanh_duong = Pin(led_xanh_duong_pin, Pin.OUT)
button_vang = Pin(button_vang_pin, Pin.IN, Pin.PULL_UP) # Sử dụng pull-up resistor
relay_rem = Pin(relay_rem_pin, Pin.OUT)
led_hong = Pin(led_hong_pin, Pin.OUT)
button_do = Pin(button_do_pin, Pin.IN, Pin.PULL_UP) # Sử dụng pull-up resistor
led_cam = Pin(led_cam_pin, Pin.OUT)
button_xanh_la = Pin(button_xanh_la_pin, Pin.IN, Pin.PULL_UP) # Sử dụng pull-up resistor
relay_voi_nuoc =Pin(chan_relay_voi_nuoc, Pin.OUT)
button_xanh_duong =Pin(button_xanh_duong_pin, Pin.IN, Pin.PULL_UP)
relay_quat = Pin(chan_relay_quat, Pin.OUT)
button_đen =Pin(button_đen_pin,Pin.IN, Pin.OUT)
# Vòi nước
sensor_dht = dht.DHT22(Pin(chan_dht)) # Khởi tạo cảm biến DHT22
led_nuoc = Pin(chan_led_nuoc, Pin.OUT)
# Quạt thông minh
led_xanh_la = Pin(chan_led_xanh_la, Pin.OUT)
#Connect to Wifi
GLOB_WLAN=MOD_NETWORK.WLAN(MOD_NETWORK.STA_IF)
GLOB_WLAN.active(True)
GLOB_WLAN.connect("Wokwi-GUEST", "")
while not GLOB_WLAN.isconnected():
pass
#Connect to Firebase
import ufirebase as firebase
firebase.setURL("https://iotp-4968f-default-rtdb.firebaseio.com/")
#Hàm lấy bảng devices
firebase.get("devices","devices")
# Hàm đèn thông minh
def dieu_khien_den(is_on):
if is_on:
turnOffBlub
else:
turnOffBlub
time.sleep(0.5)
def turnOnBlub():
# print("Bật đèn...")
led_xanh_duong.value(1)
time.sleep(0.5)
def turnOffBlub():
# print("Tắt đèn...")
led_xanh_duong.value(0)
time.sleep(0.5)
# Hàm quạt
def turnOnFan():
# print("Bật quạt...")
relay_quat.value(1)
led_xanh_la.value(1)
time.sleep(0.5)
def turnOffFan():
# print("Tắt quạt...")
relay_quat.value(0)
led_xanh_la.value(0)
time.sleep(0.5)
def dieu_khien_quat(is_on):
if is_on:
turnOnFan()
else:
turnOffFan()
# Hàm điều khiển vòi nước
def turnOnFaucet():
# print("Bật vòi nước...")
relay_voi_nuoc.value(1) # Bật Relay để mở vòi nước
led_nuoc.value(1) # Bật LED xanh nước biển (nước đang chảy)
time.sleep(0.5) # Giữ trong 3 giây
# relay_voi_nuoc.value(0) # Tắt Relay (ngắt vòi nước)
# led_nuoc.value(0) # Tắt LED (nước đã ngừng chảy)
def turnOffTap():
# print("Tắt vòi nước...")
relay_voi_nuoc.value(0) # Tắt Relay để đóng vòi nước
led_nuoc.value(0) # Tắt LED xanh nước biển (nước không chảy)
time.sleep(0.5) # Giữ trong 3 giây
def dieu_khien_voi_nuoc(is_on):
if is_on:
turnOnFaucet()
else:
turnOffTap()
# Hàm rèm cửa
def open_curtain():
# print("Mở rèm cửa...")
relay_rem.value(1) # Bật Relay để mở rèm
led_hong.value(1)
time.sleep(3) # Giữ trong 3 giây (thời gian mở rèm)
relay_rem.value(0) # Tắt Relay
def close_curtain():
# print("Đóng rèm cửa...")
relay_rem.value(1) # Bật Relay để đóng rèm
led_hong.value(0)
time.sleep(3) # Giữ trong 3 giây (thời gian đóng rèm)
relay_rem.value(0) # Tắt Relay
def dieu_khien_rem_cua(is_on):
if is_on:
open_curtain()
else:
close_curtain()
# Bảng ánh xạ tên kênh với mã IR (mô phỏng)
channel_codes = {
"kênh 1": "IR Code 1", # Thay bằng mã IR thực tế
"kênh 2": "IR Code 2", # Thay bằng mã IR thực tế
}
def send_ir_signal(channel_name):
# print(f"Sending IR signal for {channel_name}...")
led_cam.value(1) # Bật LED để mô phỏng gửi tín hiệu
time.sleep(0.1) # Giữ LED bật trong 100ms
led_cam.value(0) # Tắt LED
# for i in range (1,len(firebase.devices)):
# firebase.get("devices/"+str(i)+"/iconOption","name")
# firebase.get("devices/"+str(i)+"/isSelected","status")
# if firebase.name == "Fan":
# isFan = firebase.status
# dieu_khien_quat(firebase.status)
# if firebase.name == "Light bulb":
# isBub = firebase.status
# dieu_khien_den(firebase.status)
# if firebase.name == "Curtain":
# isCurtain = firebase.status
# dieu_khien_rem_cua(firebase.status)
# if firebase.name == "Control signal TV":
# send_ir_signal(firebase.status)
# if firebase.name == "Tap":
# isFaucet = firebase.status
# dieu_khien_voi_nuoc(firebase.status)
isBub = False
isCurtain = False
isFaucet = False
isFan = False
def call_api():
firebase.get("devices/5/isSelected","isBubStatus")
isBub = firebase.isBubStatus
if isBub:
turnOnBlub()
else:
turnOffBlub()
firebase.get("devices/2/isSelected","isCurtainStatus")
isCurtain = firebase.isCurtainStatus
if isCurtain:
open_curtain()
else:
close_curtain()
firebase.get("devices/1/isSelected","isFaucetStatus")
isFaucet = firebase.isFaucetStatus
if isFaucet:
turnOnFaucet()
else:
turnOffTap()
firebase.get("devices/3/isSelected","isFanStatus")
isFan = firebase.isFanStatus
if isFan:
turnOnFan()
else:
turnOffFan()
while True:
call_api()
print("Get data successfull!")
# firebase.get("devices", "devices")
# print("Bub ",isBub)
# print("Curtain ",isCurtain)
# print("Faucet ",isFaucet)
# print("Fan ",isFan)
# print("Tap ", isFaucet)
# Kiểm tra nhiệt độ và độ ẩm của DHT22
sensor_dht.measure()
nhiet_do = sensor_dht.temperature()
do_am = sensor_dht.humidity()
# # Điều khiển tốc độ quạt bằng potentiometer
gia_tri_pot = chan_potentiometer.read() # Đọc giá trị từ potentiometer (0-4095)
for _ in range(10):
if button_vang.value() == 0: # Nếu nút nhấn được nhấn
if isBub:
# print("Nút vàng được nhấn -> Tắt đèn.")
# dieu_khien_den()
turnOffBlub()
isBub = False
firebase.patch("devices/5", {"isSelected": isBub})
else: # Nếu rèm đang đóng, thì mở rèm
# print("Nút vàng được nhấn -> Bật đèn.")
turnOnBlub()
isBub = True # Cập nhật trạng thái thành mở
firebase.patch("devices/5", {"isSelected": isBub})
time.sleep(1) # Giữ LED bật trong 100ms
elif button_do.value() == 0: # Nếu nút nhấn được nhấn
# print("Nút đỏ được nhấn.")
if isCurtain: # Nếu rèm đang mở, thì đóng rèm
close_curtain()
isCurtain = False # Cập nhật trạng thái thành đóng
firebase.patch("devices/2", {"isSelected": isCurtain})
else: # Nếu rèm đang đóng, thì mở rèm
open_curtain()
isCurtain = True # Cập nhật trạng thái thành mở
firebase.patch("devices/2", {"isSelected": isCurtain})
time.sleep(0.5) # Tránh phản ứng nhanh liên tục khi nút vẫn được nhấn
elif button_xanh_la.value() == 0: # Nếu nút nhấn được nhấn
# print("Nút xanh lá được nhấn.")
# Giả lập chuyển kênh
for channel in channel_codes.keys():
send_ir_signal(channel) # Gửi tín hiệu cho từng kênh
time.sleep(1) # Đợi một chút giữa các tín hiệu
elif button_xanh_duong.value() ==0:
# print("Nút xanh dương đã được nhấn")
if isFaucet:
turnOffTap()
isFaucet = False
firebase.patch("devices/1", {"isSelected": isFaucet})
else:
turnOnFaucet()
isFaucet =True
firebase.patch("devices/1", {"isSelected": isFaucet})
print("Nhiệt độ vòi nước:",nhiet_do, "°C")
time.sleep(3)
elif button_đen.value()==0:
# print("Nút đen đã được nhấn")
if isFan :
turnOffFan()
isFan =False
firebase.patch("devices/3", {"isSelected": isFaucet})
else:
turnOnFan()
isFan =True
firebase.patch("devices/3", {"isSelected": isFaucet})
print("Tốc độ quạt : ", gia_tri_pot)
time.sleep(1)