import network
import time
import urequests
from machine import Pin, SoftI2C
from i2c_lcd import I2cLcd
# Setup LED
led_api = Pin(2, Pin.OUT) # LED: API sukses
led_kawasan = Pin(4, Pin.OUT) # LED: jumlah kawasan > 7
# Setup I2C dan LCD
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=400000)
print("Scanning I2C devices...")
devices = i2c.scan()
if devices:
print("I2C device(s) found:", [hex(dev) for dev in devices])
else:
print("No I2C devices found!")
lcd = I2cLcd(i2c, 0x27, 2, 16)
# Koneksi WiFi
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.2)
print(" Connected!")
# Coba akses API
try:
url = "https://ws.jakarta.go.id/gateway/DataPortalSatuDataJakarta/1.0/satudata?kategori=dataset&tipe=detail&url=jumlah-kawasan-konservasi-yang-dimanfaatkan-secara-berkelanjutan"
resp = urequests.get(url)
data = resp.json()
resp.close() # penting untuk hemat memori di ESP32
# API sukses → nyalakan LED
led_api.value(1)
print("API berhasil diakses.")
# Cek isi data untuk debug
print("Data lengkap:", data)
# Ambil nilai jumlah kawasan dan keterangan secara aman
kawasan_info = data.get('data', [{}])[0]
jumlah_kawasan = int(kawasan_info.get('jumlah_kawasan', 0))
keterangan = kawasan_info.get('keterangan', 'Tanpa keterangan')
print("Jumlah Kawasan:", jumlah_kawasan)
print("Keterangan:", keterangan)
# Cek jumlah kawasan
if jumlah_kawasan > 7:
led_kawasan.value(1)
else:
led_kawasan.value(0)
# Tampilkan ke LCD
lcd.clear()
lcd.move_to(0, 0)
lcd.putstr("Kawasan: {}".format(jumlah_kawasan))
lcd.move_to(0, 1)
lcd.putstr(keterangan[:16]) # hanya 16 karakter di baris 2
except Exception as e:
print("Gagal akses API:", e)
led_api.value(0)
led_kawasan.value(0)
lcd.clear()
lcd.putstr("API GAGAL")
lcd.move_to(0, 1)
lcd.putstr("Status: ERROR")