ESPHome入门03-温湿度传感器(小白入门:让房间温度湿度实时显示在手机上)


🎯 本文目标

  • ✅ 了解常见温湿度传感器型号及区别
  • ✅ 完成传感器与 ESP32 的硬件接线
  • ✅ 编写 ESPHome YAML 配置
  • ✅ 烧录固件并在 Home Assistant 中查看数据
  • ✅ 学会数据校准和滤波技巧

🛒 硬件准备

硬件 型号推荐 参考价格 说明
开发板 ESP32-DevKitC ¥15-25 推荐 ESP32-WROOM-32
温湿度传感器 AHT20 / DHT22 ¥5-10 AHT20 更精准
杜邦线 母对母 ¥3 3-4根
USB数据线 Type-C / Micro-USB ¥5 注意要数据线不是充电线

🔍 传感器型号对比

型号 协议 精度(温度) 精度(湿度) 价格 推荐度
AHT20 I2C ±0.3°C ±2% ¥5 ⭐⭐⭐⭐⭐
DHT22 单总线 ±0.5°C ±2% ¥8 ⭐⭐⭐⭐
DHT11 单总线 ±2°C ±5% ¥3 ⭐⭐
SHT30 I2C ±0.2°C ±2% ¥15 ⭐⭐⭐⭐⭐
BME280 I2C ±1°C ±3% ¥12 ⭐⭐⭐⭐

💡 新手推荐:AHT20,便宜、精准、I2C 接口只需要4根线。


🔌 硬件接线

AHT20 接线(I2C 协议)

复制代码
AHT20 传感器          ESP32 开发板
┌─────────┐          ┌──────────┐
│  VCC    │──────────│  3.3V    │  (红线)
│  GND    │──────────│  GND     │  (黑线)
│  SDA    │──────────│  GPIO21  │  (蓝线)
│  SCL    │──────────│  GPIO22  │  (黄线)
└─────────┘          └──────────┘

⚠️ 注意 :AHT20 供电用 3.3V,不要接 5V!

DHT22 接线(单总线协议)

复制代码
DHT22 传感器          ESP32 开发板
┌─────────┐          ┌──────────┐
│  VCC    │──────────│  3.3V    │  (红线)
│  DATA   │──────────│  GPIO4   │  (绿线)
│  NC     │          │          │  (空脚不接)
│  GND    │──────────│  GND     │  (黑线)
└─────────┘          └──────────┘

⚠️ DATA 和 VCC 之间需要接一个 10KΩ 上拉电阻
(有些 DHT22 模块已内置,可以先不接试试)

📝 ESPHome YAML 配置

方案一:AHT20 传感器(推荐)

yaml 复制代码
# aht20-sensor.yaml
esphome:
  name: bedroom-sensor
  friendly_name: "卧室环境传感器"

esp32:
  board: esp32dev

# WiFi 配置
wifi:
  ssid: "你的WiFi名称"
  password: "你的WiFi密码"

  # 连接失败时启动热点
  ap:
    ssid: "Bedroom-Sensor"
    password: "12345678"

# 启用日志
logger:

# Home Assistant API
api:
  encryption:
    key: "自动生成的密钥"

# OTA 无线更新
ota:
  - platform: esphome

# I2C 总线配置(AHT20 需要)
i2c:
  sda: GPIO21
  scl: GPIO22
  scan: true  # 启动时扫描 I2C 设备

# 传感器配置
sensor:
  # AHT20 温湿度传感器
  - platform: aht10  # AHT20 兼容 aht10 平台
    variant: AHT20
    temperature:
      name: "卧室温度"
      unit_of_measurement: "°C"
      accuracy_decimals: 1
      filters:
        - offset: -0.5  # 校准偏移(根据实际调整)
    humidity:
      name: "卧室湿度"
      unit_of_measurement: "%"
      accuracy_decimals: 0
    update_interval: 30s  # 每30秒更新一次

  # ESP32 内部温度(可选,用于监控设备状态)
  - platform: internal_temperature
    name: "ESP32 芯片温度"
    update_interval: 60s

  # WiFi 信号强度(可选)
  - platform: wifi_signal
    name: "WiFi 信号强度"
    update_interval: 60s

方案二:DHT22 传感器

yaml 复制代码
# dht22-sensor.yaml
esphome:
  name: living-room-sensor
  friendly_name: "客厅环境传感器"

esp32:
  board: esp32dev

wifi:
  ssid: "你的WiFi名称"
  password: "你的WiFi密码"
  ap:
    ssid: "LivingRoom-Sensor"
    password: "12345678"

logger:

api:
  encryption:
    key: "自动生成的密钥"

ota:
  - platform: esphome

# DHT22 传感器配置
sensor:
  - platform: dht
    pin: GPIO4
    model: DHT22
    temperature:
      name: "客厅温度"
      accuracy_decimals: 1
      filters:
        - sliding_window_moving_average:
            window_size: 5
            send_every: 3
    humidity:
      name: "客厅湿度"
      accuracy_decimals: 0
      filters:
        - sliding_window_moving_average:
            window_size: 5
            send_every: 3
    update_interval: 10s  # DHT22 最小间隔 2 秒

🔧 配置详解

update_interval(更新间隔)

yaml 复制代码
update_interval: 30s   # 每30秒读取一次(推荐)
update_interval: 60s   # 每1分钟(省电)
update_interval: 10s   # 每10秒(实时性高)
update_interval: 5min  # 每5分钟(极省电)

💡 一般场景 30s-60s 就够了,温度变化不会那么快。

filters(数据滤波)

yaml 复制代码
filters:
  # 方式一:偏移校准(传感器读数偏高/偏低时用)
  - offset: -1.2  # 温度偏移 -1.2°C

  # 方式二:滑动平均(消除毛刺波动)
  - sliding_window_moving_average:
      window_size: 5   # 取最近5次读数
      send_every: 3    # 每3次发送一次

  # 方式三:指数移动平均(更平滑)
  - exponential_moving_average:
      alpha: 0.1
      send_every: 3

  # 方式四:限制范围(过滤异常值)
  - filter_out: nan
  - clamp:
      min_value: -20
      max_value: 60

📱 烧录与查看

第一步:首次烧录(USB)

  1. 在 ESPHome Dashboard 点击 Install
  2. 选择 "Plug into this computer"(USB 直连)
  3. 选择对应的 COM 端口
  4. 等待编译和烧录完成(首次约2-3分钟)

第二步:查看日志

烧录完成后,点击 Logs 查看实时输出:

复制代码
[I][app:029]: Running through setup()...
[C][wifi:037]: Setting up WiFi...
[I][wifi:263]: WiFi Connected!
  IP Address: 192.168.1.105
[I][aht10:040]: AHT20 found at address 0x38
[I][sensor:094]: '卧室温度': Sending state 24.3 °C
[I][sensor:094]: '卧室湿度': Sending state 58 %

第三步:Home Assistant 自动发现

  1. 打开 Home Assistant → 设置设备与服务
  2. 你会看到 "已发现新设备" 的提示
  3. 点击 配置 → 输入 API 密钥 → 完成
  4. 概览 页面就能看到温度和湿度卡片了!

🌡️ 添加温度预警

在 YAML 中添加自动化,温度超标自动报警:

yaml 复制代码
# 在 sensor 下方添加
binary_sensor:
  - platform: template
    name: "卧室高温预警"
    lambda: |-
      if (id(bedroom_temp).state > 30.0) {
        return true;
      } else {
        return false;
      }

sensor:
  - platform: aht10
    variant: AHT20
    temperature:
      name: "卧室温度"
      id: bedroom_temp  # 添加 id 供上方引用
    humidity:
      name: "卧室湿度"
    update_interval: 30s

🛠️ 常见问题排查

问题1:I2C 设备找不到

复制代码
[E][aht10:015]: Communication with AHT20 failed!

排查步骤

  1. 检查接线是否牢固
  2. 确认 SDA/SCL 引脚对应正确(GPIO21/22)
  3. i2c: 下添加 scan: true,查看扫描到的地址
  4. 尝试换一根杜邦线

问题2:温度数据不准

解决

  1. 传感器远离 ESP32 芯片(芯片发热会影响读数)
  2. 使用 offset 滤波器校准
  3. 传感器不要放在阳光直射处

问题3:DHT22 读取失败

复制代码
[W][dht:048]: Requesting data from DHT failed!

解决

  1. 确认上拉电阻已接好(10KΩ)
  2. update_interval 不要低于 2s
  3. 换一个 GPIO 引脚试试

📊 进阶:多传感器配置

一块 ESP32 可以同时接多个传感器:

yaml 复制代码
i2c:
  sda: GPIO21
  scl: GPIO22

sensor:
  # 卧室传感器
  - platform: aht10
    variant: AHT20
    temperature:
      name: "卧室温度"
    humidity:
      name: "卧室湿度"
    address: 0x38  # AHT20 默认地址

  # 阳台传感器(BME280)
  - platform: bme280_i2c
    temperature:
      name: "阳台温度"
    humidity:
      name: "阳台湿度"
    pressure:
      name: "大气压力"
    address: 0x76  # BME280 默认地址
    update_interval: 60s

✅ 本文总结

步骤 操作
1. 选传感器 AHT20(新手首选)
2. 接线 4根线:VCC/GND/SDA/SCL
3. 写 YAML platform: aht10, variant: AHT20
4. 烧录 ESPHome Dashboard → Install
5. 查看 Home Assistant 自动发现
6. 校准 filters → offset 微调

📢 下一篇预告

ESPHome入门04 --- LED灯带:用 WS2812B 灯带打造炫酷的 RGB 氛围灯!


相关推荐
seanliu2 小时前
ESP32 变身 WiFi 智能灯控制器
物联网
皮皮虾12344 小时前
诛仙手游多开最多几开?用什么云手机比较好?
游戏·智能手机
wanhengidc5 小时前
BGP服务器的功能是什么
运维·服务器·安全·web安全·智能手机
泓博5 小时前
Raspberry Camera
物联网
威联通网络存储5 小时前
QNAP 边缘计算底座:车间 IoT 容器化部署方案
人工智能·python·物联网·边缘计算
AIoT科技物语7 小时前
包邮168元!无须编程,AI 驱动,ESP-Claw 物联网 OpenClaw 智能体套件,打通智能家居本地「感知、推理、决策」完整闭环
人工智能·物联网·智能家居
The Shio7 小时前
OptiByte 操练场:面向 IoT/嵌入式的协议可视化调试工具
网络·嵌入式硬件·物联网·c#·.net·业界资讯·iot
GIS数据转换器7 小时前
农业物联网可视化管理系统
人工智能·物联网·3d·无人机·知识图谱·旅游
动物园猫8 小时前
频繁使用手机检测数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·yolo·智能手机