跳转到内容

PN7150 NFC

pn7150 组件允许你在 ESPHome 中使用 PN7150 NFC 控制器。此组件是一个全局 hub,通过 I²C 与 PN7150 建立连接。

要使用 PN7150,必须在你的设备 ESPHome 配置中定义一个 I²C 总线。

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

此外,Nfc 平台可以用来快速轻松地识别呈现给读取器的标签。

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

  • irq_pin (必选, Pin Schema): 连接到 PN7150 的 IRQ 线的引脚。

  • ven_pin (必选, Pin Schema): 连接到 PN7150 的 VEN 线的引脚。

  • wkup_req_pin (可选, Pin Schema): 连接到 PN7150 的 WKUP_REQ 线的引脚。可能在未来的版本中用于改进电源管理。

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

  • tag_ttl (可选, Time): 在 PN7150 无法再 “看到”某个标签之后、认为该标签已从读取器上取下之前必须经过的时长。

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

  • on_tag_removed (可选, Automation): 标签被取下后执行的自动化。参见 on_tag_removed 触发器。

  • on_emulated_tag_scan (可选, Automation): 当 PN7150 被 另一个标签读取器(如智能手机)扫描时执行的自动化。参见 on_emulated_tag_scan 触发器。

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

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

使用此操作调用”清洁模式”——下一个呈现给 PN7150 的标签将被”清洁”,移除标签上的所有数据。

on_...:
then:
- tag.set_clean_mode: my_pn7150_id

使用此操作调用”格式化模式”——下一个呈现给 PN7150 的标签将被”格式化”,只在标签上留下一个 空的 NDEF 消息结构。

on_...:
then:
- tag.set_format_mode: my_pn7150_id

使用此操作调用”读取模式”——下一个呈现给 PN7150 的标签将被读取。这是 组件运行的默认模式。

on_...:
then:
- tag.set_read_mode: my_pn7150_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。

使用此操作调用”写入模式”——下一个呈现给 PN7150 的标签的 NDEF 消息将被设置为 tag.set_write_message 操作(参见上文)定义的消息。请注意,在调用此模式之前, 必须先设置消息。

on_...:
then:
- tag.set_write_mode: my_pn7150_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。

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

on_...:
then:
- tag.emulation_off: my_pn7150_id

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

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

on_...:
then:
- tag.emulation_on: my_pn7150_id

使用此操作禁用卡(标签)读取/写入。PN7150 将不再读取或写入卡/标签。

on_...:
then:
- tag.polling_off: my_pn7150_id

使用此操作启用卡(标签)读取/写入。PN7150 将读取或写入卡/标签。

on_...:
then:
- tag.polling_on: my_pn7150_id

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

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

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

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

标签扫描事件也可以通过 homeassistant.tag_scanned 操作 发送到 Home Assistant 标签组件。

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

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

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

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

此触发器提供的参数 x 的类型为 std::string,是移除的标签 UID,格式为 74-10-37-94。下面的示例配置将把移除的标签 ID 发布到 MQTT 主题 pn7150/tag_removed。

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

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

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

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

给定一个使用 Home Assistant 配套应用格式化和写入的 NFC 标签,下面的示例将通过 homeassistant.tag_scanned 操作 将其 NDEF 消息中包含的标签 ID 发送到 Home Assistant。 如果找不到带标签 ID 的 NDEF 记录,则将改向 Home Assistant 发送标签的 UID。

tag 变量可供在 on_tag 和 on_tag_removed 触发器内运行的任何操作使用。

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

下面的示例说明了如何通过 PN7150 向卡/标签写入 NDEF 消息。请注意, button 是触发这些操作的绝佳机制。

第一个示例将向标签写入一条简单、固定的 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_pn7150_id

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

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