import network
import utime
import ntptime
from machine import Pin, I2C, PWM
import ssd1306
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASS = ""
ALARM_HOUR = 17
ALARM_MINUTE = 21
ALARM_DURATION = 10 # не використовується, але залишимо
TIMEZONE = 2
# PWM buzzer
buzzer = PWM(Pin(14))
buzzer.duty(0)
# OLED
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASS)
oled.fill(0)
oled.text("WiFi...", 0, 0)
oled.show()
while not wlan.isconnected():
utime.sleep(0.5)
def sync_time():
oled.fill(0)
oled.text("Sync time...", 0, 0)
oled.show()
ntptime.settime()
# 🎼 Ноти
C4 = 262
D4 = 294
E4 = 330
F4 = 349
G4 = 392
A4 = 440
B4 = 494
C5 = 523
REST = 0
# 🎶 Jingle Bells (частина)
melody = [
E4, E4, E4,
E4, E4, E4,
E4, G4, C4, D4, E4,
F4, F4, F4, F4,
F4, E4, E4, E4,
E4, D4, D4, E4, D4, G4
]
durations = [
0.3, 0.3, 0.6,
0.3, 0.3, 0.6,
0.3, 0.3, 0.3, 0.3, 0.6,
0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.3,
0.3, 0.3, 0.3, 0.3, 0.6
]
def play_melody():
for i in range(len(melody)):
note = melody[i]
duration = durations[i]
if note == REST:
buzzer.duty(0)
else:
buzzer.freq(note)
buzzer.duty(512)
utime.sleep(duration)
buzzer.duty(0)
utime.sleep(0.05)
connect_wifi()
sync_time()
alarm_triggered = False
while True:
t = utime.localtime(utime.time() + TIMEZONE * 3600)
h, m, s = t[3], t[4], t[5]
oled.fill(0)
oled.text("CLOCK", 40, 0)
oled.text("{:02d}:{:02d}:{:02d}".format(h, m, s), 25, 25)
oled.text("Alarm {:02d}:{:02d}".format(ALARM_HOUR, ALARM_MINUTE), 10, 50)
oled.show()
# 🔔 Будильник з мелодією
if (h == ALARM_HOUR and
m == ALARM_MINUTE and
s < 2 and
not alarm_triggered):
play_melody()
alarm_triggered = True
if m != ALARM_MINUTE:
alarm_triggered = False
utime.sleep(1)