脉冲计数传感器
脉冲计数传感器允许您在任意引脚上对脉冲数量和信号频率进行计数。
在 ESP32 上,该传感器精度非常高,因为它使用的是 ESP32 上的硬件脉冲计数外设。不过,由于使用了脉冲计数外设,最多只能使用 8 个通道!
# 示例配置条目sensor: - platform: pulse_counter pin: GPIOXX name: "Pulse Counter"-
pin (必选, Pin): 用于计数脉冲的引脚。
-
count_mode (可选): 配置检测到时脉冲计数器在上升沿/下降沿时的行为。
-
rising_edge (必选): 检测到上升沿时要执行的操作。可选值为
DISABLE、INCREMENT和DECREMENT。 -
falling_edge (必选): 检测到下降沿时要执行的操作。可选值为
DISABLE、INCREMENT和DECREMENT。
-
-
use_pcnt (可选, boolean): 使用硬件
PCNT脉冲计数器。仅在 ESP32 上支持。默认为true。 -
internal_filter (可选, Time): 如果检测到的脉冲长度短于该时间,则将其丢弃,不计数。默认为
13us。在 ESP32 上使用硬件脉冲计时器时,该值不能高于13us;在 ESP8266 上或使用use_pcnt: false时,可以使用更大的间隔。如果启用此功能,请将count_mode设置为在下降沿而非上升沿进行计数。对于用于计量功耗的 S0 脉冲表,50–100 ms 是合理的取值。 -
update_interval (可选, Time): 检查传感器的间隔。默认为
60s。 -
total (可选): 报告脉冲总数。
-
Sensor 的所有其他选项。
NOTE
请参阅积分传感器以随时间累加脉冲计数值。
传感器默认以”pulses/min”(脉冲/分钟)为测量单位。您可以通过使用传感器过滤器来更改它。例如,如果您使用脉冲计数器和光电二极管来计量电表上的光脉冲,可以这样做:
# 示例配置条目sensor: - platform: pulse_counter pin: GPIOXX unit_of_measurement: 'kW' name: 'Power Meter House' filters: - multiply: 0.06 # (60s/1000 每 kWh 脉冲)计数总脉冲数
Section titled “计数总脉冲数”当配置了 total 传感器时,pulse_counter 还会报告所测得的脉冲总数。在电表上使用此功能可以测量累计消耗的电量(kWh)。
# 示例配置条目sensor: - platform: pulse_counter pin: GPIOXX unit_of_measurement: 'kW' name: 'Power Meter House' filters: - multiply: 0.06 # (60s/1000 每 kWh 脉冲)
total: unit_of_measurement: 'kWh' name: 'Energy Meter House' filters: - multiply: 0.001 # (1/1000 每 kWh 脉冲)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 之间;此时应将引脚设置为输入、上拉、反转:
# 干簧片开关接在 GPIO 与 GND 之间sensor: - platform: pulse_counter pin: number: 12 inverted: true mode: input: true pullup: true name: "Pulse Counter"如果您将其接在 GPIO 引脚与 +3.3V 之间,则将引脚设置为输入、下拉:
# 干簧片开关接在 GPIO 与 +3.3V 之间sensor: - platform: pulse_counter pin: number: 12 mode: input: true pulldown: true name: "Pulse Counter"最安全的方式是使用 GPIO + GND,这样可以避免误将导线短路。