[DefiDIY25] Lecteur NFC ESPHome

Lecteur NFC ESPHome avec buzzer : interaction ludique pour les enfants

:bullseye: Contexte

À la maison, mes enfants utilisent désormais des tags NFC pour interagir avec la domotique (Home Assistant).

L’idée était de rendre accessible la domotique sans avoir besoin d’écran. Avec les tags NFC, les interactions sont plus ludiques et visuelles : lorsqu’un tag est scanné, un buzzer joue un son.

Les tags ont été collés sur des petites cartes plastifiées plus facile d’accès pour les enfants.
Des couleurs et des vignettes permettent de les différencier.

En fonction de la carte utilisée, différentes actions peuvent être envisagées dépendant des équipements du logements.

Dans la chambre de mon petit dernier, chaque tag correspond à une action : allumer la lumière, changer la couleur de l’éclairage de nuit, fermer ou ouvrir les volets. Mais tout est envisageable (musique, … ).

:toolbox: Matériel

  • ESP32 (ou ESP8266)

  • Module NFC PN532

  • Buzzer actif

  • Quelques câbles Dupont

  • Alimentation 5V

:electric_plug: Schéma de câblage

Le buzzer est simplement relié à D2 et une pin Ground.

:movie_camera: Démo !

Dans cette démo, on peut voir les tags NFC interagir avec home assistant pour ouvrir des volets et pour modifier la couleur d’un bandeau led. (Le volet et le bandeau led interagissent en zigbee avec HA)

https://youtube.com/shorts/HFXtXEr4aAw?feature=share

:electric_plug: Code ESPHOME

Le code complet est dans le repo git.

Quelques explications sur certains bloc de code yaml:

:puzzle_piece: Connexion du module PN532 (SPI)

Le lecteur NFC PN532 est relié à l’ESP8266 en SPI.
À chaque badge scanné, le code :

  • vérifie si le buzzer est activé via Home Assistant,
  • exécute un bip,
  • envoie le tag scanné à Home Assistant.
spi:
  clk_pin: D5
  mosi_pin: D7
  miso_pin: D6

pn532_spi:
  cs_pin: D1
  update_interval: 1s
  on_tag:
    then:
      - lambda: |-
          if (id(buzzer_enabled_sensor).state) {
            id(bip_tag).execute();
          }
      - text_sensor.template.publish:
          id: last_tag
          state: !lambda 'return x;'
      - homeassistant.tag_scanned: !lambda 'return x;'

:light_bulb: Explication :

Le on_tag se déclenche à chaque badge détecté.

homeassistant.tag_scanned permet à HA d’utiliser nativement les tags dans ses automatisations.

Le son n’est joué que si le booléen nfc_buzzer_actif est sur on.

:brick: Intégration avec Home Assistant

Une entité Home Assistant est importée pour piloter le comportement de l’ESP :

binary_sensor:
  - platform: homeassistant
    id: buzzer_enabled_sensor
    entity_id: input_boolean.nfc_buzzer_actif
    internal: true
# → active/désactive le son du buzzer

:bell: Buzzer activable depuis Home Assistant

Le buzzer est branché sur D2 (GPIO4) et contrôlé par un switch.
Le son est joué via un petit script bip_tag.

output:
  - platform: gpio
    pin: D2
    id: buzzer_output

switch:
  - platform: output
    name: "Buzzer"
    output: buzzer_output
    id: buzzer_switch

script:
  - id: bip_tag
    then:
      - switch.turn_on: buzzer_switch
      - delay: 300ms
      - switch.turn_off: buzzer_switch

Dashboard HA

On peut y voir:

  • Etats des volets et lumière

  • Etat de l’ESP

  • Bouton pour activer manuellement le buzzer

  • ID et nom du Dernier tag NFC

  • Deux toggles pour activer/désactiver le buzzer ou tout l’ESP

  • Des compteurs d’utilisation des tags

  • Des seuils max d’utilisation journalière pour éviter de trop jouer avec les volets :smiley: (Des routines journalières permettent le reset des compteurs)

Merci d’avoir lu jusque là !
Je suis preneur de vos différents retours :slight_smile:

11 « J'aime »

Superbe idée !
J’ai hâte de trouver du temps pour mettre ça en place pour mon petit.