import network
import urequests
import machine
import time
# ─── WiFi ─────────────────────────────────────────────
SSID = "Wokwi-GUEST"
PASSWORD = ""
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)
print("Connecting to WiFi...")
while not wifi.isconnected():
time.sleep(0.5)
print("WiFi Connected!")
print(wifi.ifconfig())
# ─── Telegram ─────────────────────────────────────────
BOT_TOKEN = "8740683356:AAF7H149GQE_6chQF-yyuxP3VcjdhrAhUz8"
CHAT_ID = 7585756130
def send_telegram(msg):
try:
msg_encoded = msg.replace(" ", "%20").replace("\n", "%0A")
url = (
"https://api.telegram.org/bot"
+ BOT_TOKEN
+ "/sendMessage?chat_id="
+ str(CHAT_ID)
+ "&text="
+ msg_encoded
)
r = urequests.get(url)
print("Telegram:", r.text[:50])
r.close()
except Exception as e:
print("Telegram error:", e)
# ─── Time đơn giản (KHÔNG dùng localtime) ─────────────
start_time = time.ticks_ms()
def get_uptime():
sec = time.ticks_diff(time.ticks_ms(), start_time) // 1000
return str(sec) + "s"
def build_msg(event):
return (
"ESP32 IR\n"
"Event: " + event + "\n"
"Uptime: " + get_uptime()
)
# ─── Pins ─────────────────────────────────────────────
ir_entry = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_UP)
ir_exit = machine.Pin(27, machine.Pin.IN, machine.Pin.PULL_UP)
red_led = machine.Pin(26, machine.Pin.OUT)
green_led = machine.Pin(25, machine.Pin.OUT)
red_led.value(0)
green_led.value(0)
print("System Ready!")
# 🚀 Gửi khi khởi động (delay nhẹ để chắc WiFi ổn định)
time.sleep(1)
send_telegram(build_msg("SYSTEM START"))
# ─── State + debounce ─────────────────────────────────
entry_triggered = False
exit_triggered = False
last_trigger_time = 0
def can_trigger(delay=800):
global last_trigger_time
now = time.ticks_ms()
if time.ticks_diff(now, last_trigger_time) > delay:
last_trigger_time = now
return True
return False
# ─── Main Loop ────────────────────────────────────────
while True:
entry_val = ir_entry.value()
exit_val = ir_exit.value()
# ENTRY
if entry_val == 0 and not entry_triggered and can_trigger():
entry_triggered = True
exit_triggered = False
red_led.value(1)
green_led.value(0)
print("Object Entered!")
send_telegram(build_msg("ENTER"))
# EXIT
if exit_val == 0 and entry_triggered and not exit_triggered and can_trigger():
exit_triggered = True
entry_triggered = False
red_led.value(0)
green_led.value(1)
print("Object Gone!")
send_telegram(build_msg("EXIT"))
time.sleep(2)
green_led.value(0)
time.sleep(0.05)