传感器

硬件和软件准备

开发板 OLED 屏 红外感应传感器 超声波距离传感器 固件
NodeMCU ESP8266 0.96 寸 I2C IIC 通信 128*64 OLED 显示屏 HC-SR501 红外感应传感器 HC-SR04 超声波距离传感器 ESPHome

连接传感器和 OLED 屏

HC-SR501 红外感应传感器

引脚 说明
VCC 5V 电源,实际测试,也可以接 3.3V
OUT 输出高电平信号
GND

SR501

SR501 有两个旋钮,分别是感应距离和感应时间,感应距离是 3-7 米,感应时间是 0.3-300 秒。

SR501

拆下 SR501 的透明外壳,可以看到 PCB 板上的元件,PCB 板上预留了光敏电阻的焊位。

SR501

背面有跳线帽,H 是连续感应,L 是单次感应。

配置文件:

binary_sensor:
  - platform: gpio
    pin: D6
    name: "SR501 Sensor"
    id: sr501_sensor
    device_class: motion

OUT 输出信号连接到 NodeMCU ESP8266 的 D6 引脚。

HC-SR04 超声波距离传感器

引脚 说明
VCC 5V 电源,实际测试,也可以接 3.3V
TRIG 触发信号
ECHO 回波信号
GND

SR04

SR04

配置文件:

sensor:
  - platform: ultrasonic
    trigger_pin: D3
    echo_pin: D4
    name: "Ultrasonic Sensor"
    id: ultrasonic_sensor
    update_interval: 1s

触发信号和回波信号分别连接到 NodeMCU ESP8266 的 D3 和 D4 引脚。

OLED 屏幕

引脚 说明
VCC 3.3V 电源
GND
SCL 时钟线
SDA 数据线

OLED

OLED

配置文件:

i2c:
  sda: D2
  scl: D1
  scan: True

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    reset_pin: D0
    address: 0x3C
    id: my_display
    lambda: |-
      it.print(0, 0, id(my_font), "Hello World!");

font:
  - file: "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
    id: my_font
    size: 14

使用 I2C 通信,SDA 连接到 D2,SCL 连接到 D1 。

完整配置文件

esphome:
  name: nodemcu-sensor-display

esp8266:
  board: nodemcuv2

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "otapass"

ota:
  password: "otapass"

wifi:
  ssid: "ly1_iot"
  password: "songwifi"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Nodemcu-Sensor-Display Fallback Hotspot"
    password: "bRh4QzLSf6He"

captive_portal:

i2c:
  sda: D2
  scl: D1
  scan: True

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    reset_pin: D0
    address: 0x3C
    id: my_display
    lambda: |-
      it.printf(0, 0, id(my_font), "Distance: %.2f m", id(ultrasonic_sensor).state);
      it.printf(0, 14, id(my_font), "SR501: %s", id(sr501_sensor).state ? "Motion detected" : "No motion");

font:
  - file: "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"
    id: my_font
    size: 14

binary_sensor:
  - platform: gpio
    pin: D6
    name: "SR501 Sensor"
    id: sr501_sensor
    device_class: motion

sensor:
  - platform: ultrasonic
    trigger_pin: D3
    echo_pin: D4
    name: "Ultrasonic Sensor"
    id: ultrasonic_sensor
    update_interval: 1s

interval:
  - interval: 1s
    then:
      - component.update: my_display

应用场景

检测人与电脑屏幕的距离

场景