from machine import Pin, I2C
from time import localtime, sleep_ms, ticks_ms, time
from ntptime import settime
from network import WLAN, STA_IF
import urequests as requests
import ujson
import ssd1306
import framebuf
from framebuf import FrameBuffer, MONO_HLSB
botaoestado = Pin(5, Pin.IN, Pin.PULL_DOWN)
botaoaumento = Pin(16, Pin.IN, Pin.PULL_DOWN)
botaomenos = Pin(17, Pin.IN, Pin.PULL_DOWN)
BVE = BNE = botaoestado.value()
BVA = BNA = botaoaumento.value()
BVM = BNM = botaomenos.value()
URL = 'https://api.open-meteo.com/v1/forecast?latitude=-32.035&longitude=-52.0986¤t=temperature_2m,is_day,weather_code&temperature_unit=celsius&timezone=America/Sao_Paulo'
imagens = (
b'\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x81\x848\x08\xc0\x8c`\x08`\x88\xc0\x0c0\x01\x80\x06\x03\xe1\x00\x01\x8f\xf8\x00\x00\x1f\xfc\x1c\x03?\xfe \x0e?\xfe\x00\x00\x7f\xff\x00\x00\x7f\xff\x10<\x7f\xff?\x00\x7f\xff\x06\x00\x7f\xff\x00\x00?\xfe\x00\x0f?\xfe@\x00\x1f\xfcp\x00\x0f\xf8\x18\x00\x03\xe0\x0e\x00@\x00\x02\x00\xc0\x00\x80\x03\x88\x08`\x06\x08\x8c \x04\x18\x84\x18\x00\x10\x80\x0c\x00\x00\x80\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00A\x06\x04\x00A\x84\x0c0@\x84\x18\x08 \x88 \x0c\x00\x08\xc0\x07\xcf\x81\x80\x00?\xe0\x00\x00\x7f\xf8\x00\x00\x7f\xf8<^\xff\xfe`0\xff\xfe\x00\x00\xff\xfe\x00\x00\x00\xfe\x00\x00\x00\x00\x00\x07\x80\x03\x00\x1f\xe0\x7f\x00?\xff\xff\x80?\xff\xff\x80?\xff\xff\xc0?\xff\xff\xf0?\xff\xff\xf0?\xff\xff\xf0\x1f\xff\xff\xf0\x07\xff\xff\xe0\x01\xff\xff\xe0\x01\xff\x87\x00\x00\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|\x00\x00\x01\xfe\x00\x01\xf9\xfe\x80\x01\xf9\xff\x00\x03\xff\xff\x00\x03\xff\xff\x00\x03\xff\xff\x80\x03\xff\xff\xc0\x03\xff\xff\xf0\x07\xff\xff\xf0\x1f\xff\xff\xf0\x1f\xff\xff\xf4?\xff\xff\xf8?\xff\xff\xf8?\xff\xff\xf8?\xff\xff\xf0\x1f\xff\xff\xe0\x0f\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
)
sol = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00@\x00\x02\x00@\x00\x01\x00@\x00\x00\x80\x00\x08\x00@\x008\x003\xf0@\x00\x17\xf8\x00\x00\x1f\xfe\x00\x00\x1f\xff\x00\x00?\xff\x00\x00\x7f?\x80\x00~\x1f\x80\x1f|\x0f\x8c0|\x0f\x98\x00~\x1f\x80\x00\x7f?\x80\x00?\xff\x00\x00\x1f\xff\x00\x00\x1f\xfe\x00\x00\x0f\xfc\x00\x00c\xf0\xe0\x00\xc0\x000\x03\x00@\x18\x02\x00@\x08\x00\x00`\x08\x00\x00 \x00\x00\x00 \x00\x00\x00 \x00')
solarado = FrameBuffer(sol, 32, 32, MONO_HLSB)
imagem1 = bytearray(b'\x00A\x06\x04\x00A\x84\x0c0@\x84\x18\x08 \x88 \x0c\x00\x08\xc0\x07\xcf\x81\x80\x00?\xe0\x00\x00\x7f\xf8\x00\x00\x7f\xf8<^\xff\xfe`0\xff\xfe\x00\x00\xff\xfe\x00\x00\x00\xfe\x00\x00\x00\x00\x00\x07\x80\x03\x00\x1f\xe0\x7f\x00?\xff\xff\x80?\xff\xff\x80?\xff\xff\xc0?\xff\xff\xf0?\xff\xff\xf0?\xff\xff\xf0\x1f\xff\xff\xf0\x07\xff\xff\xe0\x01\xff\xff\xe0\x01\xff\x87\x00\x00\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
nuvemNoProjetinho = FrameBuffer(imagem1, 32, 32, MONO_HLSB)
imagem2 = bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00|\x00\x00\x01\xfe\x00\x01\xf9\xfe\x80\x01\xf9\xff\x00\x03\xff\xff\x00\x03\xff\xff\x00\x03\xff\xff\x80\x03\xff\xff\xc0\x03\xff\xff\xf0\x07\xff\xff\xf0\x1f\xff\xff\xf0\x1f\xff\xff\xf4?\xff\xff\xf8?\xff\xff\xf8?\xff\xff\xf8?\xff\xff\xf0\x1f\xff\xff\xe0\x0f\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
nuvemFermentada = FrameBuffer(imagem2, 32, 32, MONO_HLSB)
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
rede = WLAN(STA_IF)
rede.active(True)
rede.connect('WOKWI-GUEST', '')
tentativa = 0
while not rede.isconnected() and tentativa <= 100:
sleep_ms(500)
tentativa += 1
if rede.isconnected():
settime()
dados = {}
DouN = 'dia'
try:
resposta = requests.get(URL)
if resposta.status_code == 200:
dados = ujson.loads(resposta.text)
DouN = 'dia' if dados["current"]["is_day"] == 1 else 'noite'
except:
print("Erro API")
estado = 0
atualizahorario = ticks_ms()
despertador = [7, 0]
alterando = 0
Papagajo = False # 3 segundos
local = time() - 10800
while True:
agora = localtime(local)
if estado == 0:
oled.fill(0)
oled.text(f"{agora[3]:02d}:{agora[4]:02d}", 5, 10)
oled.text(f"{agora[2]:02d}/{agora[1]:02d}/{agora[0]}", 5, 25)
oled.text(f"{dados.get('current', {}).get('temperature_2m', 0):.1f}C", 5, 40)
oled.text(DouN, 5, 50)
if '{dados["current"]["weather_code"]}' == 0:
m = f"{sol[3]:02d}:{sol[4]:02d}:{sol[5]:02d}"
pos_x = (oled_width - len(m) * 6) // 2 # Cada caractere tem 6 pixels de largura
oled.blit(s, 70, 32)
oled.show()
if '{dados["current"]["weather_code"]}' == 1:
m = f"{imagem1[3]:02d}:{imagem1[4]:02d}:{imagem1[5]:02d}"
pos_x = (oled_width - len(m) * 6) // 2 # Cada caractere tem 6 pixels de largura
oled.blit(imagem1, 70, 32)
oled.show()
if '{dados["current"]["weather_code"]}' == 2:
m = f"{imagem1[3]:02d}:{imagem1[4]:02d}:{imagem1[5]:02d}"
pos_x = (oled_width - len(m) * 6) // 2 # Cada caractere tem 6 pixels de largura
oled.blit(imagem1, 70, 32)
oled.show()
if '{dados["current"]["weather_code"]}' == 3:
m = f"{imagem2[3]:02d}:{imagem2[4]:02d}:{imagem2[5]:02d}"
pos_x = (oled_width - len(m) * 6) // 2 # Cada caractere tem 6 pixels de largura
oled.blit(imagem2, 70, 32)
oled.show()
if Papagajo:
oled.text(f"({despertador[0]:02d}:{despertador[1]:02d})", 75, 10)
oled.show()
BNA = botaoaumento.value()
if BNA != BVA and BNA == 1:
quarta += 1
sleep_ms(50)
BVA = BNA
BNM = botaomenos.value()
if BNM != BVM and BNM == 1:
feira += 1
sleep_ms(50)
BVM = BNM
BNE = botaoestado.value()
if BNE != BVE and BNE == 1:
estado = 1
sleep_ms(100)
BVE = BNE
if ticks_ms() >= atualizahorario:
local = time() - 10800
atualizahorario = ticks_ms() + 5000
agora = localtime(local)
if agora[3] == despertador[0] and agora[4] == despertador[1]:
estado = 2
elif estado == 1:
oled.fill(0)
oled.text("QUANDO VAI", 25, 10)
oled.text("DESPERTAR?", 25, 20)
if alterando == 0:
oled.text(f'[{despertador[0]:02d}]:{despertador[1]:02d}', 28, 35)
else:
oled.text(f'{despertador[0]:02d}:[{despertador[1]:02d}]', 28, 35)
oled.show()
BNA = botaoaumento.value()
if BNA != BVA and BNA == 1:
despertador[alterando] = (despertador[alterando] + 1) % (24 if alterando == 0 else 60)
sleep_ms(50)
BVA = BNA
BNM = botaomenos.value()
if BNM != BVM and BNM == 1:
despertador[alterando] = (despertador[alterando] - 1) % (24 if alterando == 0 else 60)
sleep_ms(50)
BVM = BNM
BNE = botaoestado.value()
if BNE != BVE and BNE == 1:
alterando = (alterando + 1) % 2
if alterando == 0:
estado = 0
Papagajo = True
sleep_ms(200)
BVE = BNE
elif estado == 2:
oled.fill(0)
oled.text("ACORDA!!!", 40, 20)
oled.show()
sleep_ms(500)
oled.invert(1)
sleep_ms(500)
oled.invert(0)
BNE = botaoestado.value()
if BNE != BVE and BNE == 1:
estado = 0
despertador = [0, 0]
Papagajo = False
BVE = BNE