Voici donc toutes les fonctions que j'ai imaginé pour ce module avec quelques détails techniques pour chacun d'entre eux.
-
La détection du courrier grâce à un capteur infrarouge.
J'avais d'abord pensé créer une barrière infrarouge d'environ 30cm entre le plancher et le plafond de la B.A.L. mais avec des diodes IR ordinaires on
ne dépasse pas les 10 /12 cm et l'alignement très précis est impossible à faire. J'ai donc trouvé ce module de détection :
Il est fin et s'intégrera bien dans le plancher de la B.A.L. Il fonctionne en 5v et il faudra adapter le signal de sortie avec une résistance et une diode
zener de 3,3v. Un autre modèle existe qui fonctionne en 3,3v mais il est plus (trop) épais.
-
Un bouton de sonnette pour déclencher mon vénérable carillon par le biais d'un autre ESP situé dans la maison. Voir en bas de page.
Il commandera un relais placé sur un autre module situé dans la maison. Une LED intégrée permet de l'allumer la nuit.
-
Deux détecteurs de présence; l'un vers la rue et l'autre vers la maison.
J'ai pris des HC-SR501 qui s'alimentent en 5v mais avec une sortie en 3,3v. Deux mini potentiomètres permettent de règler
la durée de l'impulsion de sortie et la sensibilté du capteur. Après le retour à l'état bas de la sortie, le capteur reste
inactif pendant 3s J'ai réglé la durée du signal sur environ 5s.
Le capteur coté rue allume l'éclairage à LED du clavier et du bouton de sonnette. Le capteur coté maison allume l'éclairage 220v via un module relais.
Il détecte l'ouverture de la porte d'entrée et la sortie d'une personne.
Le module relais est alimenté en 5v mais est commandé par le 3,3v d'un GPIO. J'ai dessoudé les borniers du module relais pour l'installer sur mon C.I.
-
Deux LEDs blanches pour éclairer le clavier. La LED du poussoir de sonnette est connectée en parallèle avec une résistance additionnelle.
Le nombre de LEDs pouvant augmenter à l'avenir il fallait les alimenter à partir du 5v car le courant de sortie du GPIO est insuffisant.
Un ensemble de 2 transistors (Voir schéma) pilote le 5v à partir de la sortie du GPIO.
-
La commande du système d'alarme. (Alarmo)
Pour cela j'ai :
- Un clavier à matrice de 3 x 4 qui sera géré par le composant ESPHome «key_collector».
-
Un lecteur de tags RFID connecté en I²C. Le modèle choisi NFC-RC522 permettra aussi des fonctions NFC et l'interaction avec un smartphone.
Attention en commandant sur Ali. aux tags 125Khz qui ressemblent aux 13,56Mhz mais ne fonctionnent pas avec ce module.
Pour passer le module en I²C pousser le micro dip-switch N°1 vers ON (La loupe n'est pas fournie !)
- 2 LEDs verte et rouge pour indiquer l'état du système d'alarme.
- Un système de mesure de la luminosité basé sur une L.D.R. et une résistance. Impossible de faire plus simple !
- Un capteur météo pour la température, l'humidité et la pression atmosphérique. C'est un module BME280 connecté en I²C et alimenté en 3,3v
- Un buzzer. C'est un modèle passif ce qui permettra de personnaliser les tonalités.
Je vais brancher tout ça sur un ESP32-WROOM-32D installé sur un «devkit» de 30 pins. Un petit module 220v Hi-link délivrera du 5v avec une puissance de 5w.
La carte devkit, alimentée en 5v possède un régulateur fournissant du 3,3v.
Les périphériques seront reliés au C.I. par des connecteurs RJ9 (4P4C), c'est pratique pour monter et démonter le module. Il faudra soigneusement les numéroter pour éviter toute interversion.
Le schéma est un peu désordonné mais reste assez simple.
Le dessin du C.I. en cours de réalisation.
La maquette du bidule !
Les fichiers KiCad et PDF sont disponibles sous licence

Plusieurs fonctionnalités nécessitent de valider une autorisation dans HA sous Appareil --> Options
Reste à écrire le fichier YAML de l'appareil dans ESPHome builder; quelques comentaires avant de plonger dans le code.
- api : Quelques actions appelables par HA vont permettre de signaler l'état du système d'alarme.
-
binary_sensor: --> Bouton sonnette
- filters : élimine les rebonds
- on_press: et on_release: commandent un relais situé sur un autre appareil, voir "récepteur_sonnette" en bas de page.
-
binary_sensor: --> Détecteur de présence
- on_press: Evalue la luminosité (voir plus bas) et allume la lumière si besoin
-
key_collector:
- on_progress: execute le script d'émission d'un bip (Voir script plus bas)
- on_result: envoie le code pin au text_sensor, HA va ensuite s'en occuper
- on_timeout: triple bip d'erreur
-
output: --> Buzzer
Le buzzer passif utilise la plateforme LEDC pour produire un son
-
pn532_i2c: --> Capteur NFC
- on_tag: Emet un bip et envoie la valeur du tag au text_sensor "pincode"
-
script: --> bipbip
Un seul paramètre pour le nombre de bip (pour l'instant !) mais on pourra jouer avec les durées et fréquences !
-
sensor: --> LDR
Un filtre "sliding_window_moving_average" envoie une moyenne toute les 10min
-
switch: --> relais d'éclairage et LEDs d'éclairage
- on_turn_on: Minuterie de 2min
-
text_sensor: --> Pincode
Permet de reporter dans HA les codes tapés au clavier et les badges RFID lus
update_interval : never évite de surcharger le réseau inutilement.
esphome:
name: portier-2eae50
friendly_name: Portier
min_version: 2025.11.0
esp32:
variant: esp32
framework:
type: esp-idf
logger:
ota:
- platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Portier Hotspot"
captive_portal:
api:
actions:
- action: alarm_armed
then:
- switch.turn_off: LED_verte
- switch.turn_on: LED_rouge
- delay: 500ms
- script.execute:
id: bipbip
nombre_bip: 2
- script.execute:
id: reset_pincode
- action: alarm_disarmed
then:
- switch.turn_off: LED_rouge
- switch.turn_on: LED_verte
- delay: 500ms
- script.execute:
id: bipbip
nombre_bip: 2
- script.execute:
id: reset_pincode
- action: alarm_arm_error
then:
- script.execute:
id: bipbip
nombre_bip: 4
- repeat:
count: 5
then:
- switch.turn_on: LED_rouge
- switch.turn_off: LED_verte
- delay: 250ms
- switch.turn_off: LED_rouge
- switch.turn_on: LED_verte
- delay: 250ms
- text_sensor.template.publish:
id: pincode
state: ""
- action: bipbip
variables:
nombre_bip: int
then:
- script.execute:
id: bipbip
nombre_bip: !lambda 'return nombre_bip;'
# Dans l'odre alphabétique des composants
binary_sensor:
# Bouton sonnette
- platform: gpio
id: bouton_sonnette
name: "bouton_sonnette"
icon: mdi:button-pointer
pin:
number: GPIO34
mode:
input: true
filters:
- delayed_on: 20ms
- delayed_off: 20ms
on_press:
- homeassistant.action:
action: switch.turn_on
data:
entity_id: switch.relais_sonnette_relais
on_release:
- homeassistant.action:
action: switch.turn_off
data:
entity_id: switch.relais_sonnette_relais
# Détecteur de courier dans la B.A.L.
- platform: gpio
id: courrier
name: "courrier"
pin:
number: GPIO33
mode:
input: true
on_press:
- script.execute:
id: bipbip
nombre_bip: 3
# Détecteur de présence coté rue
- platform: gpio
id: presence_rue
name: "presence_rue"
device_class: "motion"
pin:
number: GPIO35
mode:
input: true
on_press:
- if:
condition:
lambda: 'return id(luminosite).state < 1.5;'
then:
- switch.turn_on: LEDs
# Détecteur de présence coté maison
- platform: gpio
id: presence_maison
name: "presence_maison"
device_class: "motion"
pin:
number: GPIO36
mode:
input: true
on_press:
- if:
condition:
lambda: 'return id(luminosite).state < 1.5;'
then:
- switch.turn_on: relais
# Bus des capteurs NFC et météo
i2c:
- id: bus_PN532
sda: GPIO4
scl: GPIO5
- id: bus_BME280
sda: GPIO26
scl: GPIO27
key_collector:
- id: pincode_reader
source_id: clavier
min_length: 4
max_length: 4
allowed_keys: "0123456789"
timeout: 8s
on_progress:
- script.execute:
id: bipbip
nombre_bip: 1
on_result:
- text_sensor.template.publish:
id: pincode
state: !lambda "return x.c_str();"
- script.execute:
id: reset_pincode
on_timeout:
- script.execute:
id: bipbip
nombre_bip: 3
# Clavier numérique
matrix_keypad:
id: clavier
rows:
- pin: 12
- pin: 13
- pin: 14
- pin: 15
columns:
- pin: 16
- pin: 17
- pin: 18
keys: "123456789*0#"
# Buzzer
output:
- platform: ledc
pin: GPIO25
id: buzzer
# Capteur NFC
pn532_i2c:
i2c_id: bus_PN532
on_tag:
- script.execute:
id: bipbip
nombre_bip: 1
- text_sensor.template.publish:
id: pincode
state: !lambda "return x;"
- script.execute:
id: reset_pincode
script:
- id: bipbip
parameters:
nombre_bip: int
then:
- repeat:
count: !lambda return nombre_bip;
then:
- output.turn_on: buzzer
- output.ledc.set_frequency:
id: buzzer
frequency: "1kHz"
- output.set_level:
id: buzzer
level: 90%
- delay: 200ms
- output.turn_off: buzzer
- delay: 200ms
- id: reset_pincode
then:
- delay: 3s
- text_sensor.template.publish:
id: pincode
state: ""
sensor:
# LDR de mesure de la luminosité
- platform: adc
pin: GPIO39
id: luminosite
name: "luminosite"
attenuation: auto
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
# Capteur météo
- platform: bme280_i2c
i2c_id: bus_BME280
address: 0x76
temperature:
name: "Temperature rue"
pressure:
name: "Pression rue"
filters:
- offset: 25 # Pour altitude = 206m
humidity:
name: "Humidité rue"
update_interval: 1min
switch:
# Relais lumière 220v
- platform: gpio
id: relais
name: relais
pin: GPIO19
on_turn_on:
- delay: 30s
- switch.turn_off: relais
# LEDs d'éclairage
- platform: gpio
id: LEDs
name: LEDs
pin: GPIO21
on_turn_on:
- delay: 30s
- switch.turn_off: LEDs
# LEDs de signalisation clavier
- platform: gpio
id: LED_rouge
name: LED_rouge
pin: GPIO22
- platform: gpio
id: LED_verte
name: LED_verte
pin: GPIO23
text_sensor:
- platform: template
name: pincode
id: pincode
update_interval: never
En bonus voyons maintenant le module "Récepteur_sonnette" qui, placé dans la maison, actionne ma sonnette vintage.
C'est aussi un bon exemple de deux modules qui communiquent entre eux via HA.
La maquette connectée à la sonnette : rien ne va plus, l'ESP perd le WIFI et le relais reste collé ! Ma vénérable sonnette est composée d'un électro-aimant
qui frappe une cloche : very simple mais c'est une mtrailleuse à parasites ! Mais je veux la garder car je l'entend dans toute la maison, y compris le
sous-sol. En l'alimentant à travers un filtre antiparasite tout rentre dans l'ordre et elle ne perturbe plus mon ESP.
Liste des composants :
- Un ESP8266-01
- Un module relais pour cet ESP
- Un bloc d'alimentation Hi-link 3w de 5v
- Des borniers
J'ai dessoudé les borniers du module relais pour l'installer sur mon C.I.. Je ressort aussi sur un bornier le GPIO2 et GND afin de
brancher un bouton qui commandera le relais de lumière du module "portier".
Ci dessous le schéma et le dessin du C.I. Attention a bien souder un fil sur GPIO2 AVANT de placer le module relais sur le C.I. (Petit fil bleu sur la photo)
Les fichiers KiCad et PDF sont disponibles sous licence
Voici le code YAML de l'appareil ; attention il faudra aussi activer l'autorisation d'effectuer des actions dans HA afin de pouvoir commander le relais de lumière.
Une temporisation de 5s coupe la sonnette au cas ou un dysfonctionnement empêcherait le relais de retomber.
Pour commander la lumière j'ai actuellement un interrupteur; donc j'utilise "on_state_change" mais il faudrait un poussoir type télérupteur et utiliser "on_press" ...
esphome:
name: relais-sonnette
friendly_name: Relais sonnette
esp8266:
board: esp01_1m
logger:
esp8266_store_log_strings_in_flash: false
api:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Relais-sonnette Hotspot"
captive_portal:
ota:
- platform: esphome
binary_sensor:
- platform: gpio
id: switch_lumiere
name: switch_lumiere
pin:
number: GPIO2
mode:
input: true
pullup: true
filters:
- delayed_on: 20ms
- delayed_off: 20ms
on_state_change:
- homeassistant.action:
action: switch.turn_on
data:
entity_id: switch.portier_relais
switch:
- platform: gpio
id: relais
name: relais
pin: GPIO0
inverted: true
on_turn_on:
- delay: 5s
- switch.turn_off: relais