You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32水银倾斜传感器内置LED控制问题及代码适配需求

解决ESP32水银倾斜传感器控制LED常亮问题

问题背景

我将水银倾斜传感器连接到ESP32,期望传感器处于ON状态时内置LED点亮,OFF状态时LED熄灭。当前编写的ESPHome YAML配置能正确检测传感器的ON/OFF状态,但LED始终保持常亮。需要实现与以下Arduino代码功能完全等效的ESPHome配置:

参考Arduino代码

#include <Arduino.h>

// 定义引脚
const int mercurySwitchPin = 4;
const int ledPin = 13;         

void setup() {
  // 配置引脚
  pinMode(mercurySwitchPin, INPUT_PULLUP); 
  pinMode(ledPin, OUTPUT);                
}

void loop() {
  int switchState = digitalRead(mercurySwitchPin);
  if (switchState == LOW) {
    digitalWrite(ledPin, HIGH); 
  } else {
    digitalWrite(ledPin, LOW); 
  }
}

原ESPHome配置(存在LED常亮问题)

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO4
      mode: INPUT_PULLUP
      inverted: true
    name: "Mercury Switch"
    on_press:
      then:
        - logger.log: "Mercury Switch Turned On!"
        - output.turn_on: builtin_led
    on_release:
      then:
        - logger.log: "Mercury Switch Turned Off!"
        - output.turn_off: builtin_led

output:
  - platform: gpio
    pin: GPIO13
    id: builtin_led

问题分析

原配置中binary_sensor添加了inverted: true,虽能正确检测状态,但与Arduino代码的直接电平映射逻辑不一致;同时仅依赖on_press/on_release触发动作,缺少初始化时的状态同步,可能导致LED初始状态异常。

修正后的等效ESPHome配置

以下配置完全复刻Arduino代码的逻辑:传感器引脚读为LOW时点亮LED,读为HIGH时熄灭LED,同时添加启动时的状态初始化,避免LED初始状态异常。

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO4
      mode: INPUT_PULLUP
      # 不设置inverted,保持引脚电平与传感器状态直接对应:HIGH=传感器OFF,LOW=传感器ON
    name: "Mercury Switch"
    id: mercury_switch

output:
  - platform: gpio
    pin: GPIO13
    id: builtin_led

automation:
  - alias: "LED跟随水银传感器状态"
    trigger:
      # 传感器状态变化时触发
      - platform: state
        entity_id: binary_sensor.mercury_switch
      # 设备启动时初始化LED状态
      - platform: homeassistant
        event: start
      - platform: esphome
        event: system_ready
    action:
      - if:
          condition:
            # 传感器引脚为LOW(传感器ON),对应binary_sensor状态为OFF
            - binary_sensor.is_off: mercury_switch
          then:
            - output.turn_on: builtin_led
            - logger.log: "水银传感器已触发 - LED点亮"
          else:
            - output.turn_off: builtin_led
            - logger.log: "水银传感器已断开 - LED熄灭"

关键说明

  • 移除binary_sensor的inverted: true,保持与Arduino代码一致的电平映射逻辑。
  • 使用automation监听传感器状态变化及设备启动事件,确保LED状态始终与传感器同步。
  • 通过binary_sensor.is_off判断传感器引脚是否为LOW(即传感器导通状态),对应点亮LED。

内容的提问来源于stack exchange,提问作者kilerin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:27:04