from machine import Pin, ADC
import time
import dht
'''
Đè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
'''
'''
Quạt thông minh
- 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
-PIR
D nối với chân GPIO27 của ESP32
VCC nối với 3v3 của ESP32
GND nối với GND của ESP32
-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
'''
'''
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
'''
from machine import Pin, ADC
import time
import dht
# ================== Định nghĩa chân kết nối ==================
# Đèn thông minh
led_xanh_duong_pin = 13 # Chân kết nối đèn LED xanh dương
button_vang_pin = 26 # 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 = 2 # Chân LED xanh nước biển
# Quạt thông minh
chan_pir = 27 # Chân cảm biến PIR
chan_potentiometer = ADC(Pin(34)) # Chân potentiometer
chan_led_do = 14 # Chân LED đỏ (cho chuyển động)
chan_led_xanh_la = 12 # Chân LED xanh lá (cho quạt)
chan_relay_quat = 2 # Chân relay quạt
# Rèm cửa thông minh
relay_rem_pin = 4 # Chân kết nối Relay cho rèm cửa
button_do_pin = 15 # Chân kết nối nút nhấn đóng/mở rèm
# Chuyển kênh TV
led_cam_pin = 17 # Chân kết nối đèn LED cam
button_xanh_la_pin = 14 # Chân kết nối nút nhấn chuyển kênh
# ================== Khởi tạo các chân GPIO ==================
# Đèn thông minh
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
# Rèm cửa thông minh
relay_rem = Pin(relay_rem_pin, Pin.OUT)
button1 = Pin(button_do_pin, Pin.IN, Pin.PULL_UP) # Sử dụng pull-up resistor
# Chuyển kênh TV
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
# Vòi nước
sensor_dht = dht.DHT22(Pin(chan_dht)) # Khởi tạo cảm biến DHT22
relay_voi_nuoc = Pin(chan_relay_voi_nuoc, Pin.OUT)
led_nuoc = Pin(chan_led_nuoc, Pin.OUT)
# Quạt thông minh
pir_sensor = Pin(chan_pir, Pin.IN)
led_do = Pin(chan_led_do, Pin.OUT)
led_xanh_la = Pin(chan_led_xanh_la, Pin.OUT)
relay_quat = Pin(chan_relay_quat, Pin.OUT)
# ================== Chức năng điều khiển ==================
# Hàm điều khiển vòi nước
def dieu_khien_voi_nuoc(is_on):
if is_on: # Nếu bật vòi nước
print("Vòi nước đang bật...")
relay_voi_nuoc.value(1) # Bật relay
led_nuoc.value(1) # Bật LED xanh nước biển
else: # Nếu tắt vòi nước
print("Vòi nước đã tắt...")
relay_voi_nuoc.value(0) # Tắt relay
led_nuoc.value(0) # Tắt LED xanh nước biển
# Hàm điều khiển quạt thông minh
def dieu_khien_quat(is_on):
if is_on:
relay_quat.value(1) # Bật relay quạt
led_xanh_la.value(1) # Bật LED xanh lá (quạt bật)
led_do.value(0) # Tắt LED đỏ
else:
relay_quat.value(0) # Tắt relay quạt
led_xanh_la.value(0) # Tắt LED xanh lá (quạt tắt)
led_do.value(1) # Bật LED đỏ (quạt tắt)
# Hàm mở rèm
def open_curtain():
print("Mở rèm cửa...")
relay_rem.value(1) # Bật Relay để mở rèm
time.sleep(3) # Giữ trong 3 giây (thời gian mở rèm)
relay_rem.value(0) # Tắt Relay
# Hàm đóng rèm
def close_curtain():
print("Đóng rèm cửa...")
relay_rem.value(1) # Bật Relay để đóng rèm
time.sleep(3) # Giữ trong 3 giây (thời gian đóng rèm)
relay_rem.value(0) # Tắt Relay
# Hàm gửi tín hiệu IR cho chuyển kênh
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
# ================== Chương trình chính ==================
try:
quat_da_bat = False # Trạng thái quạt đã bật chưa?
thoi_gian_khong_chuyen_dong = 0 # Thời gian không có chuyển động (giây)
while True:
# Kiểm tra nhiệt độ và độ ẩm của DHT22
sensor_dht.measure()
nhiet_do = sensor_dht.temperature()
do_am = sensor_dht.humidity()
print("Nhiệt độ: {}°C, Độ ẩm: {}%".format(nhiet_do, do_am))
# Điều kiện để bật vòi nước (khi độ ẩm < 50%)
if do_am < 50:
dieu_khien_voi_nuoc(True) # Bật vòi nước
else:
dieu_khien_voi_nuoc(False) # Tắt vòi nước
# Kiểm tra cảm biến PIR (quạt thông minh)
if pir_sensor.value() == 1: # Nếu phát hiện chuyển động
print("Phát hiện chuyển động, bật quạt.")
thoi_gian_khong_chuyen_dong = 0 # Reset thời gian không có chuyển động
if not quat_da_bat: # Nếu quạt chưa bật, bật quạt
dieu_khien_quat(True)
quat_da_bat = True
else:
thoi_gian_khong_chuyen_dong += 1 # Nếu không có chuyển động, tăng thời gian không chuyển động
print("Không phát hiện chuyển động, thời gian không có chuyển động:", thoi_gian_khong_chuyen_dong)
# Nếu không có chuyển động trong 5 giây, tắt quạt
if thoi_gian_khong_chuyen_dong > 5 and quat_da_bat:
print("Không phát hiện chuyển động trong 5 giây, tắt quạt.")
dieu_khien_quat(False)
quat_da_bat = False
thoi_gian_khong_chuyen_dong = 0 # Reset lại thời gian không chuyển động
# Điều khiển tốc độ quạt bằng potentiometer
gia_tri_pot = chan_potentiometer.read() # Đọc giá trị từ potentiometer (0-4095)
print("Giá trị Potentiometer: ", gia_tri_pot)
# Sử dụng giá trị potentiometer để điều khiển tốc độ quạt
if gia_tri_pot > 2048: # Nếu giá trị lớn hơn 2048 (quạt sẽ chạy nhanh hơn)
dieu_khien_quat(True) # Bật quạt
else:
dieu_khien_quat(False) # Tắt quạt
# Kiểm tra các nút nhấn và điều khiển các thiết bị
if button_vang.value() == 0: # Nếu nút nhấn được nhấn
print("Nút vàng được nhấn.")
led_xanh_duong.value(1) # Bật LED để mô phỏng gửi tín hiệu
time.sleep(1) # Giữ LED bật trong 100ms
led_xanh_duong.value(0) # Tắt LED
time.sleep(1)
elif button1.value() == 0: # Nếu nút nhấn được nhấn
print("Nút đỏ được nhấn.")
if curtain_open: # Nếu rèm đang mở, thì đóng rèm
close_curtain()
curtain_open = False # Cập nhật trạng thái thành đóng
else: # Nếu rèm đang đóng, thì mở rèm
open_curtain()
curtain_open = True # Cập nhật trạng thái thành mở
time.sleep(3) # 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
else:
print("Chưa có button nào được nhấn.")
time.sleep(5) # Delay một chút trước khi lặp lại
print()
print()
print()
except KeyboardInterrupt:
print("Đã dừng chương trình.")