Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Presença Inteligente com ESP32 + Alexa

Sensor de movimento PIR HC-SR501 que liga a lâmpada inteligente Avant Neo quando você chega, mantém acesa enquanto você está no ambiente e desliga sozinha quando você sai — em tempo real, via SinricPro e Alexa.

ESP32 ESP-IDF Arduino as component Alexa MIT

Conjunto montado


O que faz

  • Detecta presença com o sensor PIR e liga a luz na hora.
  • Mantém acesa enquanto houver movimento (o timer reinicia a cada detecção).
  • Desliga sozinha após alguns segundos sem movimento (tempo configurável).
  • Tempo real via WebSocket do SinricPro — sem cota mensal de requisições.
  • Autônomo: roda em qualquer fonte 5V/USB, sem PC. Reconecta o Wi-Fi sozinho.
  • Reutilizável: pinos, tempos e credenciais ficam isolados em 2 arquivos.

Como funciona

flowchart LR
    PIR[" PIR HC-SR501"] -->|GPIO4 HIGH| ESP[" ESP32 (C3/S3)"]
    ESP -->|WebSocket| SP[" SinricPro"]
    SP -->|Sensor de movimento| AL[" Alexa"]
    AL -->|Rotina liga/desliga| LUZ[" Luz Avant Neo"]
Loading

O ESP envia motion=detected ao detectar movimento e motion=notDetected após LIGHT_ON_SECONDS parado. A Alexa reage a esses estados com duas Rotinas (ligar / desligar a lâmpada).

Filtro anti-falso-disparo

O HC-SR501 (jumper em H, tempo no mínimo) estica qualquer gatilho — inclusive um pico de ruído RF/térmico — num pulso HIGH de ~1,2 s. Por isso confirmar movimento só pela presença do sinal (ou pela sua duração) deixa a luz acender sozinha. A confirmação exige um de dois critérios, que o ruído não satisfaz:

  1. Retrigger real — um HIGH contínuo por PIR_RETRIGGER_MS (presença de verdade segura o OUT alto por vários segundos; o ruído fica em ~1,2 s); ou
  2. Dois pulsos na janelaPIR_PULSES_TO_CONFIRM pulsos válidos (cada um ≥ PIR_MIN_PULSE_MS) dentro de PIR_PULSE_WINDOW_MS.

Um pulso isolado de ~1,2 s é registrado como PULSO isolado e ignorado. Um resumo periódico ([STATS]) conta ruídos × confirmações para calibrar.

Hardware

Componente Detalhe
Placa ESP32-C3 Super Mini (testado) · ESP32-S3 (compatível)
Sensor Módulo PIR HC-SR501
Lâmpada Avant Neo (Tuya/Smart Life) já integrada à Alexa
Extra Mini protoboard e jumpers

ESP32-C3 Super Mini    HC-SR501

Ligações

Esquemático de ligação

HC-SR501 ESP32 Observação
VCC 5V (VBUS/VIN) No 3V3 o sensor não dispara direito
GND GND
OUT GPIO4 Saída já é 3,3V, segura para o GPIO

Montagem real

Ajuste do sensor (trimpots + jumper)

Ajuste Posição Por quê
Tempo (Tx) Mínimo (anti-horário) Quem conta o tempo é o firmware
Sensibilidade (Sx) ~2/3 do curso Pega bem sem disparo falso
Jumper H (repetível) Mantém OUT alto enquanto há movimento

Posição real dos trimpots e do jumper

Foto do meu sensor como referência da posição real dos 2 trimpots e do jumper.

Dependências

  • ESP-IDF v5.5 (guia de instalação)
  • arduino-esp32 3.3.10 — baixado automaticamente (main/idf_component.yml)
  • SinricPro 4.1.0, WebSockets 2.6.1, ArduinoJson 7.4.2 — já incluídos em components/ como componentes ESP-IDF (cada um com sua licença).

O core Arduino entra como componente do ESP-IDF: você usa o fluxo idf.py normal, mas com as APIs do Arduino (WiFi, SinricPro) por dentro.

Configuração

1. Credenciais — copie o template e preencha com os seus dados:

cp main/secrets.h.example main/secrets.h
#define WIFI_SSID        "SEU_WIFI"
#define WIFI_PASS        "SUA_SENHA"
#define APP_KEY          "..."   // SinricPro
#define APP_SECRET       "..."
#define MOTIONSENSOR_ID  "..."

2. Parâmetros (opcional) — em main/app_config.h:

#define PIR_GPIO              4      // pino do sensor (mude p/ outra placa)
#define LIGHT_ON_SECONDS      30     // tempo aceso após o último movimento
#define PIR_WARMUP_SECONDS    30     // aquecimento do PIR no boot

#define PIR_RETRIGGER_MS      1800   // HIGH contínuo que confirma sozinho
#define PIR_PULSES_TO_CONFIRM 2      // nº de pulsos válidos p/ confirmar
#define PIR_MIN_PULSE_MS      200    // duração mínima de um pulso válido
#define PIR_PULSE_WINDOW_MS   10000  // janela p/ os pulsos acima

3. SinricPro + Alexa

  1. Em sinric.pro, crie um dispositivo Motion Sensor e copie APP_KEY, APP_SECRET e o Device ID.
  2. No app da Alexa, ative a skill SinricPro e faça Discover Devices.
  3. Crie 2 Rotinas: quando detectar movimento → ligar a Avant; quando não detectar → desligar.

Compilar e gravar

# ESP32-C3
idf.py set-target esp32c3
idf.py build
idf.py -p PORTA flash monitor

# ESP32-S3
idf.py set-target esp32s3
idf.py -p PORTA flash monitor

No Windows, use o ESP-IDF PowerShell e a porta tipo COM5. Sair do monitor: Ctrl + ].

Evidência (log serial)

I app: Wi-Fi OK em 1799 ms | IP: 192.168.1.104 | RSSI: -51 dBm
I app: [NUVEM] Conectado ao SinricPro!
I app: Sensor pronto. Monitorando movimento no GPIO4.
W app: PULSO isolado: 1245 ms (gap de 10745 ms desde o pulso anterior).
I app: [STATS] ultimos 60 s: 0 glitch(es), 1 pulso(s) isolado(s), 0 confirmacao(oes).
I app: Movimento CONFIRMADO (HIGH retriggerado). Enviando motion=detected (ligar)...
I app: Sem movimento por 30 s. Enviando motion=notDetected (desligar)...

Nota técnica (NOSSL)

O WebSocket roda sem TLS (porta 80) — definido por SINRICPRO_NOSSL em components/SinricPro/CMakeLists.txt — porque o WiFiClientSecure do arduino-esp32 trava o handshake TLS neste build. As mensagens continuam assinadas por HMAC (o APP_SECRET nunca trafega e há proteção anti-replay), então o controle continua autenticado.

Referências e datasheets

Estrutura

.
├── main/
│   ├── main.cpp              # lógica (setup/loop)
│   ├── app_config.h          # pino e tempos
│   ├── secrets.h.example     # modelo de credenciais
│   └── idf_component.yml      # dependência arduino-esp32
├── components/                # SinricPro, WebSockets, ArduinoJson
├── docs/                      # imagens e esquemático
├── partitions.csv             # app de 3 MB
└── sdkconfig.defaults         # configs (PSK, cert bundle, Arduino...)

Licença

MIT — use, modifique e compartilhe à vontade. As bibliotecas em components/ mantêm suas licenças originais.

About

Sensor de presenca PIR HC-SR501 que liga/desliga a lampada Avant Neo via ESP32, SinricPro e Alexa (ESP-IDF + Arduino as component).

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages