ESP01 + Relay + ESPHome switch(GPIO0 OUTPUT) + binary_sensor(GPIO2 INPUT)

Olá Pessoal

Estou com ideia de utilizar o ESP01+Relay para acoplar em um interruptor tipo campainha criando dessa forma um sensor de botão + switch, mas estou com dúvidas como ligar o GPIO2 e configurar o botão no ESPHome.

Na prática quero utilizar as portas GPIO0 como saída OUTPUT controlando o ralay e GPIO2 entrada INPUT controlando o botão, tudo com o ESP01.
Dessa forma terei o controle de lâmpada :bulb: tanto no Home-Assistant como no botão físico tudo em um só dispositivo.
Como se trata de um teste de bancada ignore o projeto estar rústico :smiley:

Tenho montado o projeto dessa forma.

Esse o código que estou tentando utilizar, aceito dicas, normalmente eu usava o C++ pela IDE do Arduino mas estou agora focado em usar o pseudo código no YML.
Aceitos dicas de como melhorar, mas ele funciona parcialmente para o controle da GPIO0 pelo através do bloco de “switch:”

Eu quero entender como ligar o esquema elétrico do botão + GPIO2 e como utilizar de forma eficiente no código.

Meu código:

esphome:
name: esp01-ligth-quarto

esp8266:
  board: esp01_1m

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
key: "5/u3u8KuA29dY2KMhgj+W5+5pidlWsPYawUMjNXXXX="

ota:
  password: "6f9754719f521f2e626864a07c47ecd45dfc"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
ssid: "Esp01-Ligth-Quarto"
password: "ltdgNDOIhq21"

  manual_ip:
# Set this to the IP of the ESP
static_ip: 192.168.2.86
# Set this to the IP address of the router. Often ends with .1
gateway: 192.168.2.1
# The subnet of the network. 255.255.255.0 works for most home networks.
subnet: 255.255.255.0
dns1: 192.168.2.1
dns2: 8.8.8.8    

captive_portal:

mqtt:
  broker: 192.168.2.75
  port: 1883
  username: mqtt-xxxxxx
  password: xxxxxxx
  
  discovery: true
  discovery_retain: true

  birth_message:
topic: esp01-ligth-quarto/status
payload: online
  will_message:
topic: esp01-ligth-quarto/status
payload: offline" 
  log_topic: 
topic: esp01-ligth-quarto/log 
level: ERROR
qos: 0

switch:
  - platform: gpio
pin:
  number: 0
  mode:
    output: True
  inverted: True
name: "luz"
id: luz 
icon: "mdi:light"
on_turn_on:
- logger.log: "Light Turned On!"
on_turn_off:
- logger.log: "Light Turned Off!"

binary_sensor:
  - platform: gpio
pin: 
  number: 2
  mode: 
    input: True
    pullup: True
  #inverted: True   
name: "toggle"
on_click:
#- min_length: 50ms
  #max_length: 350ms
  then:
    switch.toggle: luz
    #- lambda: 
        #id(luz).toggle().state;
    #- switch.toggle: luz
on_state: 
  then:
    - logger.log: "Light Turned state"

Mais fotos:




Descomenta a linha pullup e
Liga um contato da “campainha” na gpio2 e o outro no gnd do esp.

1 Like

Opa, vou tentar hoje.
Te dou um Feedback depois. Obrigado :smiley:

Deu certo Walber, Fiz tantas tentativas que não estava mais vendo óbvio. Achei muitos tutoriais porém nenhum prevê o circuito com a placa do Relay que ja tem os seus respectivos resistores para PULL.
Agradeço a atenção.

O que falta ver agora é quando dou RESET a placa volta com a GPIO2 em flutando(acho eu) ai resolver se der reset segurando o GPIO2 no Negativo.

Estou pesquisando se tem algum evento equivalente ao Setup(){} onde força a GPIO2 ficar pullup na inicialização.

Vc quer dizer que ela está pulsando (flutuando) quando da reset ou a placa não inicia?

Vc pode fazer um pullup físico, colocando um resistor entre a gpio e a saída 3,3v.
Um resistor de 5k ou 10k já deve resolver.

Segundo esse site que uso como referência, a gpio2 em geral é ligada no led e caso ela esteja ligada direto ao gnd a placa não inicializa, o que não seria o seu caso, pois o interruptor que vc esta usando é do tipo campainha.

Eu faria um teste com a GPIO 3

Perfeito :ok_hand:
Usei o GPIO3 e deu tudo certo, sem problemas de inicialização devido o uso da GPIO2

O Site indicado é muito bom!

Acredito que agora o projeto de interruptor inteligente de baixo custo está pronto.

  • Fonte alimentação um carregador de celular.
  • KIT ESP01 + Relay.
  • Caixa de “Luz”.
  • Interruptor tipo companhia normalmente aberto.

Quero fazer um vídeo Maker para difundir a ideia :bulb:, pois não vi muitos semelhantes.

Saudações Walber.

1 Like

Ótima idéia, gostei do aproveitamento do esp01s, tenho visto até outras possibilidades, como adicionar mais 1 interruptor físico pra ser virtual paralelo de alguma lampada inteligente ou para executar automações… com ações de 1 click, 2 clicks e 3 clicks
Abriu um leque de possibilidades, vou marca esse artigo para brincar com reles e interruptores NA