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    

NOCOMNCVCCGNDINLED1PWRRelay Module