跳转到内容

PN7160 NFC

pn7160 组件允许您在 ESPHome 中使用 PN7160 NFC 控制器。此组件是一个全局集线器,通过 SPII²C 建立与 PN7160 的连接。

在 ESPHome 中,PN7160 可以配置为使用 SPI I²C 协议进行数据通信。 请注意,每种总线类型有不同版本的 IC,每个都有不同的零件号;换句话说,总线类型不能通过跳线/开关更改,因为它是在制造时确定的。

您必须确定您拥有的 IC 版本,然后配置相应的总线——SPI 总线I²C 总线

ESPHome 支持此组件的卡片/标签读写以及卡片/标签模拟。默认情况下,仅启用读/写模式;仅当定义了 emulation_message 配置变量时,才会启用卡片/标签模拟(见下文)。无论哪种情况,都可以使用相应的动作独立启用和禁用读写器/写入器(轮询)模式和卡片/标签模拟模式(见下文)。

此外,可以使用 Nfc 平台快速轻松地识别呈送到读写器的标签。

pn7160_spi 组件允许您在 ESPHome 中使用 SPI 配备的 PN7160 NFC 控制器。

pn7160_spi:
cs_pin: GPIOXX
dwl_req_pin: GPIOXX
irq_pin: GPIOXX
ven_pin: GPIOXX
wkup_req_pin: GPIOXX
emulation_message: https://www.home-assistant.io/tag/pulse_ce
tag_ttl: 1000ms
  • cs_pin (必填, 引脚模式): 连接到 PN7160 的 NSS(片选)线的引脚。

  • dwl_req_pin (可选, 引脚模式): 连接到 PN7160 的 DWL_REQ 线的引脚。用于调用 PN7160 的固件更新模式;可能会在将来的版本中使用。

  • irq_pin (必填, 引脚模式): 连接到 PN7160 的 IRQ 线的引脚。

  • ven_pin (必填, 引脚模式): 连接到 PN7160 的 VEN 线的引脚。

  • wkup_req_pin (可选, 引脚模式): 连接到 PN7160 的 WKUP_REQ 线的引脚。可能会在将来的版本中用于改善电源管理。

  • emulation_message (可选, string): 当被另一个 NFC 卡片/标签读写器(如智能手机)扫描时,此字符串用作 NDEF 格式响应的内容。这允许 PN7160 在作为标签读写器/写入器的同时充当标签。

  • tag_ttl (可选, 时间): PN7160 无法”看到”标签后,在其被认为已从读写器移除之前必须经过的持续时间。

  • on_tag (可选, 自动化): 首次读取标签时要执行的自动化。请参阅 on_tag 触发器

  • on_tag_removed (可选, 自动化): 标签移除后要执行的自动化。请参阅 on_tag_removed 触发器

  • on_emulated_tag_scan (可选, 自动化): 当 PN7160 被另一个标签读写器(如智能手机)扫描时要执行的自动化。请参阅 on_emulated_tag_scan 触发器

  • spi_id (可选, ID): 如果要使用多个 SPI 总线,请手动指定 SPI 组件 的 ID。

  • id (可选, ID): 手动指定此组件的 ID。

pn7160_i2c 组件允许您在 ESPHome 中使用 I²C 配备的 PN7160 NFC 控制器。

pn7160_i2c:
dwl_req_pin: GPIOXX
irq_pin: GPIOXX
ven_pin: GPIOXX
wkup_req_pin: GPIOXX
emulation_message: https://www.home-assistant.io/tag/pulse_ce
tag_ttl: 1000ms
  • dwl_req_pin (可选, 引脚模式): 连接到 PN7160 的 DWL_REQ 线的引脚。用于调用 PN7160 的固件更新模式;可能会在将来的版本中使用。

  • irq_pin (必填, 引脚模式): 连接到 PN7160 的 IRQ 线的引脚。

  • ven_pin (必填, 引脚模式): 连接到 PN7160 的 VEN 线的引脚。

  • wkup_req_pin (可选, 引脚模式): 连接到 PN7160 的 WKUP_REQ 线的引脚。可能会在将来的版本中用于改善电源管理。

  • emulation_message (可选, string): 当被另一个 NFC 卡片/标签读写器(如智能手机)扫描时,此字符串用作 NDEF 格式响应的内容。这允许 PN7160 在作为标签读写器/写入器的同时充当标签。

  • tag_ttl (可选, 时间): PN7160 无法”看到”标签后,在其被认为已从读写器移除之前必须经过的持续时间。

  • on_tag (可选, 自动化): 首次读取标签时要执行的自动化。请参阅 on_tag 触发器

  • on_tag_removed (可选, 自动化): 标签移除后要执行的自动化。请参阅 on_tag_removed 触发器

  • on_emulated_tag_scan (可选, 自动化): 当 PN7160 被另一个标签读写器(如智能手机)扫描时要执行的自动化。请参阅 on_emulated_tag_scan 触发器

  • i2c_id (可选, ID): 如果需要使用多个 I²C 总线,请手动指定 I²C 组件 的 ID。

  • id (可选, ID): 手动指定此组件的 ID。

使用此动作调用”清除模式”——下一个呈送到 PN7160 的标签将被”清除”,删除标签上的所有数据。

on_...:
then:
- tag.set_clean_mode: my_pn7160_id

使用此动作调用”格式化模式”——下一个呈送到 PN7160 的标签将被”格式化”,仅保留标签上空的 NDEF 消息结构。

on_...:
then:
- tag.set_format_mode: my_pn7160_id

使用此动作调用”读取模式”——下一个呈送到 PN7160 的标签将被读取。这是组件运行的默认模式。

on_...:
then:
- tag.set_read_mode: my_pn7160_id

使用此动作设置用于”写入模式”的 NDEF 消息(见下文)。

on_...:
then:
- tag.set_write_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false
  • message (必填, string, 可模板化): 要包含在标签第一个 NDEF 记录中的字符串;通常是一个 URL,如图所示。

  • include_android_app_record (可选, boolean): 包含某些 Android 操作系统所需的第二个 NDEF 记录。默认为 true

使用此动作调用”写入模式”——下一个呈送到 PN7160 的标签将其 NDEF 消息设置为 tag.set_write_message 动作定义的消息(见上文)。注意:在调用此模式之前必须设置消息。

on_...:
then:
- tag.set_write_mode: my_pn7160_id

使用此动作设置用于卡片(标签)模拟模式的 NDEF 消息(启用时见下文)。

on_...:
then:
- tag.set_emulation_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false
  • message (必填, string, 可模板化): 要包含在(模拟)标签第一个 NDEF 记录中的字符串;通常是一个 URL,如图所示。

  • include_android_app_record (可选, boolean): 包含某些 Android 操作系统所需的第二个 NDEF 记录。默认为 true

使用此动作禁用卡片(标签)模拟模式。PN7160 将不再响应来自其他读写器(如智能手机)的请求。

on_...:
then:
- tag.emulation_off: my_pn7160_id

使用此动作启用卡片(标签)模拟模式。PN7160 将响应来自其他读写器(如智能手机)的请求。

注意: 当启用卡片/标签模拟时,轮询(检测附近的卡片/标签)频率会降低;这通常会导致检测呈送到 PN7160 的卡片/标签的速度稍慢。此行为是正常的,应该预料到;这是 PN7160 在轮询和监听模式之间切换以支持两种功能的结果。

on_...:
then:
- tag.emulation_on: my_pn7160_id

使用此动作禁用卡片(标签)读/写。PN7160 将不再读/写卡片/标签。

on_...:
then:
- tag.polling_off: my_pn7160_id

使用此动作启用卡片(标签)读/写。PN7160 将读/写卡片/标签。

on_...:
then:
- tag.polling_on: my_pn7160_id

此自动化将在 PN7160 模块识别标签并读取其 NDEF 消息(如果存在)后立即触发。

此触发器提供的参数 xstd::string 类型,格式为 74-10-37-94 的标签 UID。下面的示例配置将在 MQTT 主题 pn7160/tag 上发布标签 ID。

请参阅下文的 NDEF 读取,了解如何使用提供给此触发器的第二个 tag 参数。

pn7160_...:
# ...
on_tag:
then:
- mqtt.publish:
topic: pn7160/tag
payload: !lambda 'return x;'

标签扫描事件也可以使用 homeassistant.tag_scanned 动作发送到 Home Assistant 标签组件。

pn7160_...:
# ...
on_tag:
then:
- homeassistant.tag_scanned: !lambda 'return x;'

您还可以通过模板传感器将值发送到 Home Assistant:

pn7160_...:
# ...
on_tag:
then:
- text_sensor.template.publish:
id: nfc_tag
state: !lambda 'return x;'
text_sensor:
- platform: template
name: "NFC 标签"
id: nfc_tag

此自动化将在 tag_ttl 间隔(见上文)后触发,当 PN7160 不再”看到”先前扫描的标签时。

此触发器提供的参数 xstd::string 类型,格式为 74-10-37-94 的已移除标签 UID。下面的示例配置将在 MQTT 主题 pn7160/tag_removed 上发布已移除的标签 ID。

pn7160_...:
# ...
on_tag_removed:
then:
- mqtt.publish:
topic: pn7160/tag_removed
payload: !lambda 'return x;'

如果启用了卡片/标签模拟,当另一个读写器(如智能手机)扫描 PN7160 并读取其响应的 NDEF 消息时,将触发此自动化。此动作没有可用参数,因为数据仅 PN7160 发送扫描设备。

pn7160_...:
# ...
on_emulated_tag_scan:
then:
- rtttl.play: "alert:d=32,o=5,b=160:e6,p,e6,p,e6"

PN7160 支持从卡片/标签读取 NDEF 消息以及向卡片/标签写入 NDEF 消息。

给定一个使用 Home Assistant Companion App 格式化并写入的 NFC 标签,以下示例将使用 homeassistant.tag_scanned 动作将其 NDEF 消息中包含的标签 ID 发送到 Home Assistant。如果找不到带有标签 ID 的 NDEF 记录,则将标签的 UID 发送到 Home Assistant。

tag 变量可用于在 on_tagon_tag_removed 触发器内运行的任何动作。

pn7160_...:
# ...
on_tag:
then:
- homeassistant.tag_scanned: !lambda "return tag.has_ha_tag_id() ? tag.get_ha_tag_id() : x;"

下面的示例说明如何通过 PN7160 将 NDEF 消息写入卡片/标签。请注意,按钮是触发这些动作的好机制。

第一个示例将向标签写入一个简单的固定 NDEF 消息。

on_...
then:
- tag.set_write_message:
message: https://www.home-assistant.io/tag/pulse
include_android_app_record: false # 可选
- tag.set_write_mode: my_pn7160_id

下一个示例可用于以与 Home Assistant Companion App 相同的方式向标签写入(伪)随机 UUID。

on_...
then:
- tag.set_write_message:
message: !lambda "return nfc::get_random_ha_tag_ndef();"
- tag.set_write_mode: my_pn7160_id