脉冲计数传感器
脉冲计数传感器允许您计算任何引脚上信号的脉冲数和频率。
在 ESP32 上,此传感器甚至非常精确,因为它使用 ESP32 上的硬件 脉冲计数外设。但是,由于使用脉冲计数外设,最多只能使用 8 个通道!
# 示例配置条目sensor: - platform: pulse_counter pin: GPIOXX name: "脉冲计数器"-
pin (必需, 引脚): 用于计算脉冲的引脚。
-
count_mode (可选): 配置计数器在检测到上升沿/下降沿时的行为。
-
rising_edge (可选): 检测到上升沿时要执行的操作。可选值为
DISABLE、INCREMENT和DECREMENT。默认为INCREMENT。 -
falling_edge (可选): 检测到下降沿时要执行的操作。可选值为
DISABLE、INCREMENT和DECREMENT。默认为DISABLE。
-
-
use_pcnt (可选, 布尔值): 使用硬件
PCNT脉冲计数器。仅 ESP32 支持。默认为true。 -
internal_filter (可选, 时间): 如果检测到短于此时间的脉冲,则将其丢弃且不计入脉冲。默认为
13us。在 ESP32 上使用硬件脉冲计数器时,此值不能高于13us,对于 ESP8266 或使用use_pcnt: false时,您也可以使用更大的间隔。如果启用此功能,请将count_mode设置为在下降沿而不是前沿增加。对于用于计量功耗的 S0 脉冲表,50-100 ms 是一个合理的值。 -
update_interval (可选, 时间): 检查传感器的时间间隔。默认为
60s。 -
total (可选): 报告脉冲总数。
-
传感器的所有其他选项。
NOTE
请参阅 积分传感器 以了解如何随时间累计脉冲计数值。
传感器默认使用”pulses/min”(脉冲/分钟)作为测量单位。您可以使用 传感器过滤器 来更改此单位。例如,如果您使用脉冲计数器和光电二极管来计算功率表上的光脉冲,可以执行以下操作:
# 示例配置条目sensor: - platform: pulse_counter pin: GPIOXX unit_of_measurement: 'kW' name: '家庭功率表' filters: - multiply: 0.06 # (60s/1000 每千瓦时脉冲数)计算总脉冲数
Section titled “计算总脉冲数”当配置了 total 传感器时,pulse_counter 还会报告测量的总脉冲数。在功率表上使用时,这可用于测量总消耗能量(以 kWh 为单位)。
# 示例配置条目sensor: - platform: pulse_counter pin: GPIOXX unit_of_measurement: 'kW' name: '家庭功率表' filters: - multiply: 0.06 # (60s/1000 每千瓦时脉冲数)
total: unit_of_measurement: 'kWh' name: '家庭电能表' filters: - multiply: 0.001 # (1/1000 每千瓦时脉冲数)pulse_counter.set_total_pulses 动作
Section titled “pulse_counter.set_total_pulses 动作”使用此动作,您可以重置/设置总脉冲计数。如果您希望 total 传感器与您尝试匹配的仪表上的读数一致,这会很有用。
# 使用此动作从 home assistant 设置脉冲计数器总数:api: actions: - action: set_pulse_total variables: new_pulse_total: int then: - pulse_counter.set_total_pulses: id: pulse_counter_id value: !lambda 'return new_pulse_total;'NOTE
此值是原始脉冲计数,而不是应用过滤器后看到的值。
如果您想计算来自简单干簧管的脉冲,最简单的方法是利用内部上拉/下拉电阻。
您可以将开关连接在 GPIO 引脚和 GND 之间;在这种情况下,将引脚设置为 input、pullup 和 inverted:
# 干簧管连接在 GPIO 和 GND 之间sensor: - platform: pulse_counter pin: number: 12 inverted: true mode: input: true pullup: true name: "脉冲计数器"如果将其连接在 GPIO 引脚和 +3.3V 之间,将引脚设置为 input、pulldown:
# 干簧管连接在 GPIO 和 +3.3V 之间sensor: - platform: pulse_counter pin: number: 12 mode: input: true pulldown: true name: "脉冲计数器"最安全的方法是使用 GPIO + GND,因为这样可以避免意外短路导线的可能性。