Nó perimetral ultra-confiável alimentado por mini painel solar e bateria 18650 com recarga inteligente CN3065. Comunicação P2P ESP-NOW de latência sub-50ms com Gateway ESP32 conectado ao Home Assistant, MQTT e Telegram.
Como o nó solar e o gateway residencial garantem confiabilidade militar e zero perda de eventos.
[PORTÃO EXTERNO - NÓ SOLAR IP66] [RESIDÊNCIA - GATEWAY ESP32]
┌───────────────────────────────────────────────┐ ┌────────────────────────────────────────────────┐
│ Painel Solar 6V 1.5W ──► CN3065 (4.2V Carga) │ │ ESP32 WROOM-32 / 32U (Antena Externa) │
│ Bateria 18650 3000mAh ──► XIAO ESP32-C3 │ │ ├── GPIO 25 ──► Transistor BC547 + Buzzer 5V │
│ PIR AM312 Mini (15µA) ──► D1 (GPIO 3 Wakeup) │ ESP-NOW │ ├── GPIO 2 ──► LED Onboard Telemetria │
│ Reed Switch Portão ──► D2 (GPIO 4 Wakeup) ├─────────►│ ├── Wi-Fi ──► Roteador (Canal Sincronizado)│
│ Divisor 1M/1M Bateria ──► D0 (GPIO 2 ADC) │ 2.4 GHz │ ├── MQTT ──► Home Assistant (Discovery) │
│ Consumo Deep Sleep: ~60 µA (Autonomia >1 ano) │ │ └── HTTPS ──► Bot de Alertas Telegram │
└───────────────────────────────────────────────┘ └────────────────────────────────────────────────┘
Diagrama eletrônico completo e conexões detalhadas com código de cores para o nó do portão e o gateway.
Painel Solar 6V (+) ──► CN3065 IN+ CN3065 BAT+ ──► 18650 (+) ──► XIAO pad BAT+ (Inferior)
Painel Solar 6V (−) ──► CN3065 IN− CN3065 BAT− ──► 18650 (−) ──► XIAO pad BAT− / GND
XIAO 3V3 ──► AM312 VCC (Alimentação 3.3V)
XIAO GND ──► AM312 GND
XIAO D1 (GPIO3) ◄── AM312 OUT (Sinal Digital de Presença)
XIAO 3V3 ──[ Resistor 1 MΩ (Pull-Up) ]──┬── XIAO D2 (GPIO4 - Reed Portão)
└── Reed Switch ──► GND (Fechado = LOW / Aberto = HIGH)
18650 (+) ──[ Resistor 1 MΩ ]──┬──[ Resistor 1 MΩ ]──► GND (Divisor 1:2 de Tensão)
├── XIAO D0 (GPIO2 - ADC Leitura VBAT)
└──[ Capacitor 100 nF ]──► GND (Filtro Anti-Ruído ADC)
| Pino / Pad | Função | Destino / Conexão |
|---|---|---|
| BAT+ | Entrada Li-ion 3.7-4.2V | CN3065 BAT+ / Polo (+) 18650 |
| BAT- / GND | Terra Comum | CN3065 BAT- / Polo (-) 18650 |
| 3V3 | Saída Regulada 3.3V | AM312 VCC + Pull-up Reed 1MΩ |
| D1 (GPIO 3) | Wakeup PIR (EXT0) | PIR AM312 OUT |
| D2 (GPIO 4) | Wakeup Reed (EXT1) | Sensor Magnético Reed (-> GND) |
| D0 (GPIO 2) | ADC Tensão Bateria | Divisor 1MΩ/1MΩ + 100nF |
| IPEX U.FL | RF 2.4GHz ESP-NOW | Antena FPC adesiva na parede da caixa |
| Pino ESP32 | Função | Destino / Conexão |
|---|---|---|
| GPIO 25 | Saída de Alarme Buzzer | Resistor 1kΩ -> Base BC547 |
| GPIO 2 | LED de Telemetria | LED Onboard (Pisca no RX de pacote) |
| VIN / 5V | Alimentação 5V DC | Fonte USB 5V 1A / Nobreak |
| GND | Terra Comum | Emissor BC547 + Terra da Fonte |
| SMA / IPEX | Antena Rádio Externa | Antena Dipolo 2.4GHz 3dBi/5dBi |
| Wi-Fi + IP | Interface de Rede | Broker MQTT HA + API Telegram |
Todos os componentes com links de busca direta em 4 marketplaces com envio para o Brasil.
Simulador interativo de autonomia e dimensionamento solar para verificar a longevidade do sistema.
Firmwares completos para Arduino IDE (ESP32 core 3.x) e configuração de MQTT Auto-Discovery.
#include <WiFi.h>
#include <esp_now.h>
#include <esp_wifi.h>
#include <esp_sleep.h>
// MAC do gateway (o gateway imprime no Serial Monitor ao ligar)
uint8_t GATEWAY_MAC[6] = {0x24, 0x6F, 0x28, 0x00, 0x00, 0x00};
#define NODE_ID 1 // ID deste sensor (1..255)
#define PIN_PIR 3 // D1 - saída do AM312 (HIGH = movimento)
#define PIN_REED 4 // D2 - reed: LOW = fechado, HIGH = aberto
#define PIN_VBAT 2 // D0 - divisor 1:2 da bateria
#define USE_REED true // false se não instalar reed switch
#define HEARTBEAT_MIN 30 // intervalo do status periódico (min)
#define PIR_HOLD_MS 8000 // máx. espera pelo PIR voltar a LOW
#define SEND_RETRIES 3
enum EventType : uint8_t {
EV_MOTION = 1, EV_GATE_OPEN = 2, EV_GATE_CLOSED = 3,
EV_HEARTBEAT = 4, EV_BOOT = 5
};
typedef struct __attribute__((packed)) {
uint16_t magic; // 0xA55A — descarta pacotes estranhos
uint8_t version; // formato do pacote
uint8_t nodeId;
uint8_t event;
uint8_t gateOpen; // estado do portão (0/1, 255 = sem reed)
uint32_t seq;
uint16_t vbat_mV;
uint8_t channel;
uint8_t retries; // qualidade do link
} Packet;
RTC_DATA_ATTR uint8_t savedChannel = 0;
RTC_DATA_ATTR uint32_t seqCounter = 0;
RTC_DATA_ATTR uint8_t lastRetries = 0;
volatile bool sendDone = false;
volatile bool sendOk = false;
// Callbacks e rotina de deep sleep otimizada para ~44uA no Seeed XIAO ESP32-C3...
#include <WiFi.h>
#include <esp_now.h>
#include <esp_wifi.h>
#include <PubSubClient.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
const char *WIFI_SSID = "SUA_REDE_WIFI";
const char *WIFI_PASS = "SUA_SENHA";
// Broker MQTT (Home Assistant)
const char *MQTT_HOST = "192.168.1.10";
const uint16_t MQTT_PORT = 1883;
const char *MQTT_USER = "homeassistant";
const char *MQTT_PASS = "sua_senha_mqtt";
// Telegram Bot (Opcional)
const char *TG_TOKEN = ""; // Token do @BotFather
const char *TG_CHAT_ID = ""; // Seu ID numérico de chat
#define PIN_BUZZER 25 // Transistor BC547 -> Buzzer 5V
#define PIN_LED 2 // LED de status
#define HEARTBEAT_MIN 30 // Intervalo do sensor
# Automação de Alerta de Presença no Portão com Câmera e Notificação
alias: "Portão: Alerta de Presença e Gravação"
trigger:
- platform: state
entity_id: binary_sensor.sensor_portao_1_movimento
to: "on"
action:
- service: light.turn_on
target:
entity_id: light.luz_garagem
data:
brightness: 255
- service: camera.snapshot
target:
entity_id: camera.camera_portao
data:
filename: "/config/www/portao_snapshot.jpg"
- service: notify.telegram_admin
data:
title: "🚨 Movimento Detectado no Portão!"
message: "Sensor solar disparou às {{ now().strftime('%H:%M:%S') }}."
data:
photo:
- file: "/config/www/portao_snapshot.jpg"
mode: single
Instruções fundamentais para garantir operação contínua por mais de 5 anos sob sol, chuva e maresia.