import network
import time
from machine import Pin
import json
import urequests
# ======================
# WiFi Configuration
# ======================
SSID = "Wokwi-GUEST"
PASSWORD = ""
# ======================
# Firebase Configuration
# ======================
API_KEY = "YourApiKey"
DATABASE_URL = "https://yourdatabase.firebaseio.com"
DATA_PATH = "iot/led_json"
EMAIL = "youremail"
PASSWORD_AUTH = "yourpassword"
# ======================
# Hardware Setup
# ======================
led = Pin(5, Pin.OUT)
button = Pin(4, Pin.IN, Pin.PULL_UP)
# ======================
# Connect to WiFi
# ======================
print("Connecting WiFi", end="")
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect(SSID, PASSWORD)
while not sta.isconnected():
print(".", end="")
time.sleep(0.2)
print("\nConnected!")
print("IP:", sta.ifconfig()[0])
# ======================
# Firebase Authentication
# ======================
def firebase_login():
url = "https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=" + API_KEY
payload = {
"email": EMAIL,
"password": PASSWORD_AUTH,
"returnSecureToken": True
}
try:
r = urequests.post(url, data=json.dumps(payload))
data = r.json()
r.close()
print("Login berhasil.")
return data["idToken"]
except Exception as e:
print("Login error:", e)
return None
ID_TOKEN = firebase_login()
# ======================
# Update LED Status to Firebase
# ======================
def update_led_status(state):
url = f"{DATABASE_URL}/{DATA_PATH}.json?auth={ID_TOKEN}"
payload = {"led": state}
try:
r = urequests.put(url, data=json.dumps(payload))
print("Upload Firebase:", r.text)
r.close()
except:
print("Gagal mengirim ke Firebase")
# ======================
# Read LED Status From Firebase
# ======================
def read_led_status():
url = f"{DATABASE_URL}/{DATA_PATH}.json?auth={ID_TOKEN}"
try:
r = urequests.get(url)
data = r.json()
r.close()
return data
except:
print("Gagal membaca Firebase")
return None
# ======================
# Main Loop
# ======================
last_fb_state = ""
last_button_state = 1
while True:
# Cek tombol
btn = button.value()
if btn == 0 and last_button_state == 1:
print("Button pressed!")
if led.value() == 1:
led.value(0)
update_led_status("OFF")
print("LED -> OFF via button")
else:
led.value(1)
update_led_status("ON")
print("LED -> ON via button")
time.sleep(0.3)
last_button_state = btn
# Cek update data dari Firebase
fb = read_led_status()
if fb:
fb_state = fb.get("led", "OFF")
if fb_state != last_fb_state:
print("Firebase:", fb_state)
if fb_state == "ON":
led.value(1)
else:
led.value(0)
last_fb_state = fb_state
time.sleep(0.2)