print("Hello, ESP32!")
from machine import Pin # Dòng này nhập lớp 'Pin' từ module 'machine'
from time import sleep # Dòng này nhập hàm 'sleep' từ module 'time'
motion = False # Theo dõi trạng thái của cảm biến chuyển động
def handle_interrupt(pin): # Hàm này được sử dụng để xử lý ngắt (interrupt).
global motion # Biến motion được tham chiếu từ phạm vi toàn cục bên ngoài hàm.
motion = True # Đặt biến motion thành True.
global interrupt_pin # biến interrupt_pin được tham chiếu từ phạm vi toàn cục bên ngoài hàm.
interrupt_pin = pin # Gán giá trị của pin cho biến interrupt_pin
led = Pin(12, Pin.OUT) # Tạo một đối tượng Pin mới được gán cho biến led
pir = Pin(14, Pin.IN) # Tạo một đối tượng Pin mới được gán cho biến pir
pir.irq(trigger=Pin.IRQ_RISING, handler=handle_interrupt) #Thiết lập một ngắt (interrupt)
#cho cổng pir Khi cổng này nhận một tín hiệu tăng (rising), hàm handle_interrupt sẽ được
# gọi.
while True: # Khai báo một vòng lặp vô hạn
if motion: # Kiểm tra xem có sự kiện chuyển động nào được phát hiện không.
print('Motion detected! Interrupt caused by:', interrupt_pin)# In ra thông báo
led.value(1) # Bật đèn LED bằng cách gán giá trị 1 cho cổng đầu ra.
sleep(20) # Dừng thực thi của chương trình trong 20 giây.
led.value(0) # Tắt đèn LED bằng cách gán giá trị 0 cho cổng đầu ra.
print('Motion stopped!') # In thông báo
motion = False # Đánh dấu rằng không còn chuyển động nào được phát hiện nữa.