from machine import Pin, RTC # Importa a classe Pin(pinos de entrada) da biblioteca machine, que permite controlar os pinos GPIO do ESP32.
from time import sleep_ms, localtime, time # Importa o módulo time, que fornece funções para manipulação e controle do tempo. Estas funções são amplamente utilizadas para várias tarefas relacionadas ao tempo, como criar atrasos na execução do código, medir intervalos de tempo, obter a data e hora atuais, entre outras.
import network # Pode se conectar-se a uma rede Wi-Fi, verificar o status da conexão ou configurar outros parâmetros de rede.
# Após importar o módulo network, você pode usar suas classes e funções para realizar operações relacionadas à rede
# Permitindo que você use a classe WLAN do módulo para configurar e controlar a interface Wi-Fi do dispositivo.
import ntptime # Biblioteca para sincronização de tempo com servidores NTP.
# Configuração dos pinos como saída (LED) e entrada com resistor de pull-up (botão)
led = Pin(4, Pin.OUT) # Configura o pino do LED como saída (resultando em uma alteração do led)
button = Pin(2, Pin.IN, Pin.PULL_UP) # Configura o pino do botão como entrada com resistor de pull-up
rele = Pin(5, Pin.OUT) # Configura o pino do relé como saída (resultando em uma alteração do rele)
# Variável para armazenar o estado do botão na última verificação
ultimo_estado_botao = button.value() # É uma variável que armazena o estado atual do LED/RELÉ. (0 para desligado, 1 para ligado)
# Variável para armazenar o tempo de início do LED ligado
ligado = time()
desligado=time()
# Conectar-se à rede Wi-Fi
print("Conectando-se ao Wi-Fi", end="")
sta_if = network.WLAN(network.STA_IF) # Cria um objeto WLAN no modo station (STA_IF) que permite conectar-se a uma rede Wi-Fi
sta_if.active(True) # Ativa a interface Wi-Fi para começar a procurar e se conectar a redes
sta_if.connect('Wokwi-GUEST', '') # Conecta à rede Wi-Fi com o SSID 'Wokwi-GUEST' e sem senha
while not sta_if.isconnected(): # Inicia um loop que continua até que a conexão Wi-Fi esteja estabelecida
print(".", end="") # Imprime um ponto na mesma linha para indicar que está tentando conectar
sleep_ms(200) # Aguarda 0.1 segundo antes de tentar novamente, para não sobrecarregar a CPU
print(" Conectado!")
rede = True
if rede: # Configurar o RTC com o horário obtido via NTP
ntptime.settime() # Configurando o Relógio de Tempo Real (RTC) com o horário obtido via NTP
# Loop principal
while True:
estado_botao = button.value() # Este é um loop infinito que permite que o programa execute continuamente.
if estado_botao != ultimo_estado_botao:
if estado_botao == 0:
ct = localtime()
if rele.value() == 1: # ligado
rele.value(0)
led.value(0)
desligado = time()
msg = f'Off;{ct[0]}-{ct[1]}-{ct[2]}T{ct[3]}:{ct[4]}'
else:
rele.value(1)
led.value(1)
ligado = time()
msg = f'On;{ct[0]}-{ct[1]}-{ct[2]}T{ct[3]}:{ct[4]}'
print (msg)
sleep_ms(200)
if ligado < desligado:
dt = localtime(desligado-ligado)
msg = f'Tempo:{dt[3]}:{dt[4]}:{dt[5]}'
print (f'Funcionou por {msg}')
ultimo_estado_botao = estado_botao