PN7150 NFC
组件/Hub
Section titled “组件/Hub”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触发器。 -
id (可选, ID): 手动指定此组件的 ID。
tag.set_clean_mode 操作
Section titled “tag.set_clean_mode 操作”使用此操作调用”清洁模式”——下一个呈现给 PN7150 的标签将被”清洁”,移除标签上的所有数据。
on_...: then: - tag.set_clean_mode: my_pn7150_idtag.set_format_mode 操作
Section titled “tag.set_format_mode 操作”使用此操作调用”格式化模式”——下一个呈现给 PN7150 的标签将被”格式化”,只在标签上留下一个 空的 NDEF 消息结构。
on_...: then: - tag.set_format_mode: my_pn7150_idtag.set_read_mode 操作
Section titled “tag.set_read_mode 操作”使用此操作调用”读取模式”——下一个呈现给 PN7150 的标签将被读取。这是 组件运行的默认模式。
on_...: then: - tag.set_read_mode: my_pn7150_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 操作”使用此操作调用”写入模式”——下一个呈现给 PN7150 的标签的 NDEF 消息将被设置为
tag.set_write_message 操作(参见上文)定义的消息。请注意,在调用此模式之前,
必须先设置消息。
on_...: then: - tag.set_write_mode: my_pn7150_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 操作”使用此操作禁用卡(标签)模拟模式。PN7150 将不再响应来自其他读取器(如智能手机)的请求。
on_...: then: - tag.emulation_off: my_pn7150_idtag.emulation_on 操作
Section titled “tag.emulation_on 操作”使用此操作启用卡(标签)模拟模式。PN7150 将响应来自其他读取器(如智能手机)的请求。
注意: 启用卡/标签模拟后,轮询(检测附近的卡/标签)频率会降低;这 通常会导致 PN7150 检测所呈现的卡/标签的速度稍慢。此行为是正常的,应当 预期;这是 PN7150 在轮询和监听模式之间切换以同时支持两种功能的结果。
on_...: then: - tag.emulation_on: my_pn7150_idtag.polling_off 操作
Section titled “tag.polling_off 操作”使用此操作禁用卡(标签)读取/写入。PN7150 将不再读取或写入卡/标签。
on_...: then: - tag.polling_off: my_pn7150_idtag.polling_on 操作
Section titled “tag.polling_on 操作”使用此操作启用卡(标签)读取/写入。PN7150 将读取或写入卡/标签。
on_...: then: - tag.polling_on: my_pn7150_idon_tag 触发器
Section titled “on_tag 触发器”在 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_tagon_tag_removed 触发器
Section titled “on_tag_removed 触发器”当 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;'on_emulated_tag_scan 触发器
Section titled “on_emulated_tag_scan 触发器”如果启用了卡/标签模拟,当另一个读取器(如智能手机)扫描 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 消息。
NDEF 读取
Section titled “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;"NDEF 写入
Section titled “NDEF 写入”下面的示例说明了如何通过 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