PN7160 NFC
组件/集线器
Section titled “组件/集线器”pn7160 组件允许您在 ESPHome 中使用 PN7160 NFC 控制器。此组件是一个全局集线器,通过 SPI 或 I²C 建立与 PN7160 的连接。
在 ESPHome 中,PN7160 可以配置为使用 SPI 或 I²C 协议进行数据通信。 请注意,每种总线类型有不同版本的 IC,每个都有不同的零件号;换句话说,总线类型不能通过跳线/开关更改,因为它是在制造时确定的。
您必须确定您拥有的 IC 版本,然后配置相应的总线——SPI 总线 或 I²C 总线。
ESPHome 支持此组件的卡片/标签读写以及卡片/标签模拟。默认情况下,仅启用读/写模式;仅当定义了 emulation_message 配置变量时,才会启用卡片/标签模拟(见下文)。无论哪种情况,都可以使用相应的动作独立启用和禁用读写器/写入器(轮询)模式和卡片/标签模拟模式(见下文)。
此外,可以使用 Nfc 平台快速轻松地识别呈送到读写器的标签。
通过 SPI
Section titled “通过 SPI”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触发器。 -
id (可选, ID): 手动指定此组件的 ID。
通过 I²C
Section titled “通过 I²C”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触发器。 -
id (可选, ID): 手动指定此组件的 ID。
tag.set_clean_mode 动作
Section titled “tag.set_clean_mode 动作”使用此动作调用”清除模式”——下一个呈送到 PN7160 的标签将被”清除”,删除标签上的所有数据。
on_...: then: - tag.set_clean_mode: my_pn7160_idtag.set_format_mode 动作
Section titled “tag.set_format_mode 动作”使用此动作调用”格式化模式”——下一个呈送到 PN7160 的标签将被”格式化”,仅保留标签上空的 NDEF 消息结构。
on_...: then: - tag.set_format_mode: my_pn7160_idtag.set_read_mode 动作
Section titled “tag.set_read_mode 动作”使用此动作调用”读取模式”——下一个呈送到 PN7160 的标签将被读取。这是组件运行的默认模式。
on_...: then: - tag.set_read_mode: my_pn7160_idtag.set_write_message 动作
Section titled “tag.set_write_message 动作”使用此动作设置用于”写入模式”的 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。
tag.set_write_mode 动作
Section titled “tag.set_write_mode 动作”使用此动作调用”写入模式”——下一个呈送到 PN7160 的标签将其 NDEF 消息设置为 tag.set_write_message 动作定义的消息(见上文)。注意:在调用此模式之前必须设置消息。
on_...: then: - tag.set_write_mode: my_pn7160_idtag.set_emulation_message 动作
Section titled “tag.set_emulation_message 动作”使用此动作设置用于卡片(标签)模拟模式的 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。
tag.emulation_off 动作
Section titled “tag.emulation_off 动作”使用此动作禁用卡片(标签)模拟模式。PN7160 将不再响应来自其他读写器(如智能手机)的请求。
on_...: then: - tag.emulation_off: my_pn7160_idtag.emulation_on 动作
Section titled “tag.emulation_on 动作”使用此动作启用卡片(标签)模拟模式。PN7160 将响应来自其他读写器(如智能手机)的请求。
注意: 当启用卡片/标签模拟时,轮询(检测附近的卡片/标签)频率会降低;这通常会导致检测呈送到 PN7160 的卡片/标签的速度稍慢。此行为是正常的,应该预料到;这是 PN7160 在轮询和监听模式之间切换以支持两种功能的结果。
on_...: then: - tag.emulation_on: my_pn7160_idtag.polling_off 动作
Section titled “tag.polling_off 动作”使用此动作禁用卡片(标签)读/写。PN7160 将不再读/写卡片/标签。
on_...: then: - tag.polling_off: my_pn7160_idtag.polling_on 动作
Section titled “tag.polling_on 动作”使用此动作启用卡片(标签)读/写。PN7160 将读/写卡片/标签。
on_...: then: - tag.polling_on: my_pn7160_idon_tag 触发器
Section titled “on_tag 触发器”此自动化将在 PN7160 模块识别标签并读取其 NDEF 消息(如果存在)后立即触发。
此触发器提供的参数 x 是 std::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_tagon_tag_removed 触发器
Section titled “on_tag_removed 触发器”此自动化将在 tag_ttl 间隔(见上文)后触发,当 PN7160 不再”看到”先前扫描的标签时。
此触发器提供的参数 x 是 std::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;'on_emulated_tag_scan 触发器
Section titled “on_emulated_tag_scan 触发器”如果启用了卡片/标签模拟,当另一个读写器(如智能手机)扫描 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 消息。
NDEF 读取
Section titled “NDEF 读取”给定一个使用 Home Assistant Companion App 格式化并写入的 NFC 标签,以下示例将使用 homeassistant.tag_scanned 动作将其 NDEF 消息中包含的标签 ID 发送到 Home Assistant。如果找不到带有标签 ID 的 NDEF 记录,则将标签的 UID 发送到 Home Assistant。
tag 变量可用于在 on_tag 和 on_tag_removed 触发器内运行的任何动作。
pn7160_...: # ... on_tag: then: - homeassistant.tag_scanned: !lambda "return tag.has_ha_tag_id() ? tag.get_ha_tag_id() : x;"NDEF 写入
Section titled “NDEF 写入”下面的示例说明如何通过 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