from machine import Pin, time_pulse_us
import network
import urequests
import time
# ===== WIFI =====
ssid = "Wokwi-GUEST"
password = ""
# ===== TELEGRAM =====
BOT_TOKEN = "8704765478:AAG_p8IAwQ0X4_0halBv9S9xZnRButVGW2I"
CHAT_ID = "7695590319"
# ===== PIN =====
TRIG = Pin(5, Pin.OUT)
ECHO = Pin(18, Pin.IN)
LED = Pin(2, Pin.OUT)
batasAir = 20
histeresis = 3 # biar tidak kedip
mode = "AUTO"
status_lama = ""
last_update_id = 0
# ===== WIFI CONNECT =====
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(ssid, password)
print("Connecting WiFi...")
while not wifi.isconnected():
time.sleep(1)
print("WiFi Connected!")
# ===== TELEGRAM SEND =====
def kirim_pesan(pesan):
url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
data = {"chat_id": CHAT_ID, "text": pesan}
try:
urequests.post(url, json=data)
except:
print("Gagal kirim pesan")
# ===== TELEGRAM READ =====
def baca_pesan():
global last_update_id
url = f"https://api.telegram.org/bot{BOT_TOKEN}/getUpdates?offset={last_update_id+1}"
try:
res = urequests.get(url)
data = res.json()
for item in data["result"]:
last_update_id = item["update_id"]
return item["message"]["text"].upper()
except:
return None
# ===== SENSOR =====
def baca_jarak():
TRIG.off()
time.sleep_us(2)
TRIG.on()
time.sleep_us(10)
TRIG.off()
try:
durasi = time_pulse_us(ECHO, 1, 30000)
except:
return 0
return (durasi * 0.034) / 2
# ===== LOOP =====
while True:
jarak = baca_jarak()
if jarak == 0:
print("Sensor error")
time.sleep(1)
continue
print("Jarak:", jarak)
# ===== BACA TELEGRAM =====
pesan = baca_pesan()
if pesan:
print("Pesan:", pesan)
if pesan == "ON":
mode = "MANUAL"
LED.on()
kirim_pesan("Pompa NYALA (Manual)")
elif pesan == "OFF":
mode = "MANUAL"
LED.off()
kirim_pesan("Pompa MATI (Manual)")
elif pesan == "AUTO":
mode = "AUTO"
kirim_pesan("Mode AUTO aktif")
elif pesan == "STATUS":
kirim_pesan(f"Jarak: {jarak} cm | Mode: {mode}")
# ===== MODE AUTO (STABIL) =====
if mode == "AUTO":
status = status_lama
if jarak <= batasAir:
LED.on()
status = "AIR PENUH"
elif jarak > batasAir + histeresis:
LED.off()
status = "AIR RENDAH"
# kirim hanya jika berubah
if status != status_lama:
kirim_pesan(f"{status} | Jarak: {jarak} cm")
status_lama = status
time.sleep(2)