import network
import urequests
from machine import Pin, SoftI2C
from time import sleep, localtime
import ssd1306
# === Konfigurasi WiFi ===
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# === Konfigurasi Pin ===
LED_RED_PIN = 25
LED_YELLOW_PIN = 26
LED_GREEN_PIN = 27
I2C_SDA_PIN = 21
I2C_SCL_PIN = 22
# === API URL ===
JOKE_API_URL = "https://v2.jokeapi.dev/joke/Programming"
WEATHER_API_URL = "https://api.open-meteo.com/v1/forecast?latitude=-6.2&longitude=106.8¤t=temperature_2m"
# === Inisialisasi LED ===
led_red = Pin(LED_RED_PIN, Pin.OUT)
led_yellow = Pin(LED_YELLOW_PIN, Pin.OUT)
led_green = Pin(LED_GREEN_PIN, Pin.OUT)
# === Inisialisasi OLED ===
i2c = SoftI2C(sda=Pin(I2C_SDA_PIN), scl=Pin(I2C_SCL_PIN))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
def connect_wifi():
led_red.on()
oled.fill(0)
oled.text("Menghubungkan", 0, 0)
oled.text("ke WiFi...", 0, 10)
oled.show()
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
for _ in range(10):
if wlan.isconnected():
break
sleep(1)
if wlan.isconnected():
led_red.off()
return True
else:
oled.fill(0)
oled.text("Gagal WiFi!", 0, 0)
oled.show()
blink_error()
return False
def blink_error():
for _ in range(6):
led_red.on()
sleep(0.1)
led_red.off()
sleep(0.1)
def get_weather():
led_yellow.on()
oled.fill(0)
oled.text("Ambil cuaca...", 0, 0)
oled.show()
try:
res = urequests.get(WEATHER_API_URL)
data = res.json()
res.close()
temp = data["current"]["temperature_2m"]
weather_info = f"Jakarta: {temp}C"
oled.fill(0)
oled.text("Cuaca:", 0, 0)
oled.text(weather_info, 0, 16)
# Tampilkan menit
menit = localtime()[4]
oled.text(f"Menit: {menit}", 0, 56)
oled.show()
led_yellow.off()
led_green.on()
sleep(2)
led_green.off()
except Exception as e:
print("Error ambil cuaca:", e)
oled.fill(0)
oled.text("Gagal ambil", 0, 0)
oled.text("cuaca", 0, 10)
oled.show()
blink_error()
def get_joke():
led_yellow.on()
oled.fill(0)
oled.text("Ambil joke...", 0, 0)
oled.show()
try:
res = urequests.get(JOKE_API_URL)
data = res.json()
res.close()
oled.fill(0)
if data["type"] == "single":
oled.text("Joke:", 0, 0)
oled.text(data["joke"][:20], 0, 16)
oled.text(data["joke"][20:40], 0, 32)
else:
oled.text("Setup:", 0, 0)
oled.text(data["setup"][:20], 0, 16)
oled.text("Delivery:", 0, 32)
oled.text(data["delivery"][:20], 0, 48)
# Tampilkan menit
menit = localtime()[4]
oled.text(f"Menit: {menit}", 0, 56)
oled.show()
led_yellow.off()
led_green.on()
sleep(2)
led_green.off()
except Exception as e:
print("Error ambil joke:", e)
oled.fill(0)
oled.text("Gagal ambil joke", 0, 0)
oled.show()
blink_error()
# === Program Utama ===
if connect_wifi():
while True:
menit = localtime()[4]
if menit % 2 == 0:
get_weather()
else:
get_joke()
sleep(30) # tunggu 30 detik sebelum lanjut