from time import localtime, time, sleep_ms
from ntptime import settime
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
from framebuf import FrameBuffer, MONO_HLSB
from rede import Rede
'''
Cria um objeto que gerencia a conexão de rede WiFi
'''
r = Rede("Wokwi-GUEST", "", conecta=False)
'''
Tenta até 40 vezes realizar a conexão, com intervalo de 500ms entre tentativa
É importante verificar, depois, se a conexão de fato se estabeleceu
Está em um bloco try...except, pois podem ocorrer diversos erros de sistema
'''
try:
r.conectar(tentativas=40, intervalo=500)
if r.conectado:
settime() # Função que busca data/hora atualizado usando o protocolo NTP (de ntptime)
except OSError as e:
print ("Deu ruim")
print (e)
'''
Cria um objeto que gerencia a comunicação utilizando o protocolo i2c
O objeto é utilizado para criar outro, que permite utilizar o display OLED
Este display tem largura de 128 pixels, e uma altura de 64 pixels, monocromático
O objeto i2c é usado para enviar bytes ao display,
mas o objeto oled é que os emite, com base nas funções utilizadas para desenhar na tela
'''
i2c = I2C(0, scl=Pin(9), sda=Pin(8), freq=400000) # I2C no ESP32
oled_width = 128
oled_height = 64
oled = SSD1306_I2C(oled_width, oled_height, i2c)
'''
Função para mostrar data e hora no display (apenas para modularizar)
Recebe o objeto que representa o display OLED
'''
def mostrarTimestamp(dsp):
t = localtime()
d = f'{t[0]}-{t[1]:02d}-{t[2]:02d}'
h = f'{t[3]:02d}:{t[4]:02d}:{t[5]:02d}UTC'
dsp.fill(0) # Limpa o display
dsp.text(d, 10, 10) # Escreve no display nas coordenadas x e y
dsp.text(h, 10, 30) # Escreve no display nas coordenadas x e y
dsp.show()
'''
Igual à função anterior
Recebe o objeto que representa o display OLED
'''
def mostrarTimestampTZ(dsp, tz=-3):
t = localtime(time()+3600*tz)
d = f'{t[0]}-{t[1]:02d}-{t[2]:02d}'
h = f'{t[3]:02d}:{t[4]:02d}:{t[5]:02d}GMT{tz:+d}'
dsp.fill(0) # Limpa o display
dsp.text(d, 10, 10) # Escreve no display nas coordenadas x e y
dsp.text(h, 10, 30) # Escreve no display nas coordenadas x e y
dsp.show()
while True:
mostrarTimestampTZ(oled)
sleep_ms(500)Loading
aitewinrobot-esp32c3-supermini
aitewinrobot-esp32c3-supermini