Crear tu propio lector NFC

Crear tu propio lector NFC

En esta entrada te enseño a crear tu propio lector NFC integrable con Home Assistant, para lanzar automatizaciones.

El poder de las etiquetas NFC

No hace mucho que te hablé de las etiquetas NFC y de cómo podías sacarle todo el partido a esta tecnología creando automatizaciones dinámicas. Como siempre digo, estoy convencido de que es una tecnología totalmente infravalorada, a pesar de su bajísimo coste, su reducido tamaño y no requerir alimentación externa alguna.

Entonces, ¿por qué no la utilizamos? Tengo la teoría de que el problema se encuentra en que la mayor parte de los dispositivos con NFC que manejamos son elementos pasivos (es decir pueden ser leídos, pero no son «lectores»). En la práctica esto limita nuestro margen de acción, ya que en la mayoría de hogares el único lector NFC que tenemos es nuestro dispositivo móvil.

La cuestión es que crear tu propio lector NFC integrable con Home Assistant es muy sencillo, y vas a poder montarlos en cualquier parte de tu casa para lanzar automatizaciones (por ejemplo, escaneando tu reloj con NFC).

Requisitos previos

Para poder crear tu propio lector NFC necesitas lo siguiente:

ESP8266 Wemos D1 Mini
4,0

Placa microcontroladora ideal para proyectos DIY. Conectividad WiFi y Bluetooth para control local, compatible con Arduino y Home Assistant mediante ESPHome. Formato mini y versátil para crear tus sensores.Placa microcontroladora ideal para proyectos DIY. Conectividad WiFi y Bluetooth ...

Módulo PN532
GENERICO

Módulo PN532

4,0

Lector NFC y RFID ideal para proyectos DIY. Permite la comunicación de campo cercano mediante WiFi, integrándose de forma local en Home Assistant a través de ESPHome para automatizaciones rápidas.Lector NFC y RFID ideal para proyectos DIY. Permite la comunicación de campo cer...

*Algún precio puede haber cambiado desde la ultima revision

Esquema de conexiones

Para crear tu propio lector NFC lo primero que vamos a hacer es conectar todos los componentes con nuestra placa. Como siempre lo primero que te recomiendo es que consultes el ‘pinout’ (o distribución de pines) de la placa. En este caso, usaremos la ESP8266 (WeMos D1 Mini) cuyo ‘pinout’ es el siguiente.

Pinout ESP8266
Pinout ESP8266

Por otro lado, nuestro módulo PN532 tiene el siguiente aspecto.

Antes de nada quiero que te fijes en la parte que he resaltado con un círculo verde. Puesto que el módulo puede comunicarse mediante 3 protocolos diferentes (UART, I2C y SPI), primero tenemos que seleccionar el que vamos a utilizar en nuestro lector (I2C). Para ello tienes que retirar el protector y verificar que la primera palanquita (1) está «encendida» (hacia arriba) y la segunda (2) está «apagada» (hacia abajo). Generalmente recibirás el módulo en posición 0:0, por lo que sólo necesitarías subir la primera (1).

Hecho esto, seguiremos el siguiente esquema de conexiones:

  • GND irá conectado al pin GND (‘ground’ o tierra) de la placa (en mi caso, el cable negro).
  • VCC irá conectado al pin de alimentación 5v de la placa (en mi caso, el cable rojo).
  • SDA irá conectado al pin D2 de la placa, que se corresponde con el GPIO4 (en mi caso, el cable amarillo).
  • SCL irá conectado al pin D1 de la placa, que se corresponde con el GPIO5 (en mi caso, el cable azul).

Al final del proceso deberías obtener algo como esto:

Configuración de ESPHome

Ahora tenemos que ‘flashear’ la placa con ESPHome y la configuración correspondiente, que vamos a extraer directamente de la documentación ESPHome sobre el componente PN532. Para ello sigue estos pasos:

Ahora tenemos que ‘flashear’ la placa con ESPHome y la configuración correspondiente, siguiendo estos pasos:

  1. Conecta la placa a tu ordenador a través del puerto USB-C.
  2. En Home Assistant, accede al complemento de ESPHome desde el menú lateral y pulsa en “New device”. Pulsa en “Continue” y dale un nombre (por ejemplo, “Tag Reader”).
  3. Pulsa en “Next” y a continuación selecciona la opción “ESP8266” como tipo de dispositivo. Verás que en el fondo se ha creado un nuevo dispositivo.
  4. Pulsa en “Skip” y haz clic en el enlace “Edit” del bloque correspondiente al dispositivo que acabas de crear.
  5. Añade las siguientes líneas al final del código.
captive_portal:
i2c:
  sda: GPIO4  # D2 en ESP8266
  scl: GPIO5  # D1 en ESP8266
  scan: true
pn532_i2c:
  update_interval: 1s
  1. Cuando hayas terminado de editar el código pulsa en “Save” e “Install”. Selecciona la opción “Manual download” y espera a que el código se compile.
  2. Cuando termine, selecciona la opción “Modern format” para descargar el fichero ‘.bin’ correspondiente.
  3. Ve a la página de ESPHome y pulsa en “Connect”. En la ventana emergente selecciona tu placa y pulsa en “Conectar”.
  4. Ahora pulsa en “Install” y selecciona el fichero ‘.bin’ obtenido en el paso 7. De nuevo, pulsa en “Install”.

Lectura de etiquetas

Así de fácil, acabas de crear tu propio lector NFC. Ahora vamos a ver cómo interactuar con tus etiquetas o dispositivos NFC para generar automatizaciones.

  1. En el complemento de ESPHome, pulsa sobre «Logs» en el bloque de tu dispositivo. Esto abrirá la consola en una ventana emergente.
  2. Desde aquí, si acercas una etiqueta a tu lector, observarás una serie de mensajes entre los que se encuentra el identificador de la etiqueta (con el formato ‘XX-XX-XX-XX’). Copia y conserva este código.
  1. Cierra la consola, pulsa en «Edit» para acceder al código de tu lector NFC y añade las siguientes líneas al final del código, reemplazando el identificador de tu etiqueta.
binary_sensor:
  - platform: pn532
    uid: 03-55-E5-13
    name: "NFC Tag"
  1. Pulsa en «Save» e «Install» para flashear de nuevo tu placa (recuerda que ya puedes hacerlo vía WiFi).
  2. Vuelve a Home Assistant y ve a Configuración > Dispositivos y servicios. Lo normal es que tu dispositivo haya sido descubierto y aparezca en la parte superior, esperando únicamente a que pulses el botón de “Configurar”. De lo contrario pulsa en el botón de “Añadir integración”, busca “ESPHome” e introduce la IP de tu placa en el campo ‘Host’. Como siempre, te recomiendo que asignes una IP fija en tu router para evitar fallos en el futuro si esta cambia.
  3. Accede a Configuración > Dispositivos y servicios > Integraciones > ESPHome > Dispositivos y pulsa sobre tu lector NFC. Observarás que tiene un sensor con el nombre que has dado a tu etiqueta (en el ejemplo «NFC Tag»). Este sensor se enciende cuando escaneas tu etiqueta, por lo que ya puedes utilizar en tus automatizaciones (para abrir una puerta, encender una luz o lo que tú quieras!).

Obtener respuesta del lector

Como has comprobado, tu lector NFC ya es plenamente funcional. No obstante, lo habitual es conectar a tu placa algún otro componente que te confirme que ha leído correctamente la etiqueta (por ejemplo, un zumbador si quieres respuesta sonora o unos LED si quieres respuesta visual). En mi caso voy a utilizar un par de LEDs de una tira LED direccionable W2812B que uso en algunos proyectos.

Lo primero es conectarla físicamente a la placa. En mi caso, el esquema de conexiones con la ESP8266 (WeMos D1 Mini) es el siguiente:

  • El cable rojo proporciona la alimentación a 5 voltios, por lo que irá al pin correspondiente (5V)
  • El cable blanco es el de la conexión de tierra o ‘ground’, e irá conectado a uno de los respectivos pines (GND)
  • El cable verde proporciona los datos e irá conectado al al D4/GPIO2

Luego sólo tienes que editar el código de la placa de la siguiente forma, y volver a instalarlo.

captive_portal:
i2c:
  sda: GPIO4  # D2 en ESP8266
  scl: GPIO5  # D1 en ESP8266
  scan: true
pn532_i2c:
  update_interval: 1s
light:
  - platform: neopixelbus
    type: GRB
    variant: ws2812x
    pin: GPIO2
    num_leds: 2
    name: "LED"
    id: tira_led
    restore_mode: ALWAYS_OFF
binary_sensor:
  - platform: pn532
    uid: 03-55-E5-13
    name: "NFC Tag"
    on_press:
    - light.turn_on:
        id: tira_led
        brightness: 100%
        red: 0%
        green: 100%
        blue: 0%
    - delay: 1s
    - light.turn_off:
        id: tira_led