智能家居最重要的是对周围环境的感知,在这个基础上才好用HA根据环境条件编写自动化程序。本文用合宙的9块9神板做一个温湿度计,顺带加上压力计和照度计。

本来想直接买小米的蓝牙温湿度计,但翻了下吃灰的零件发觉自己组一个,便宜性能还更好。

小米用的是SHTV3,没找到太多资料,但同厂的SHTC3和DHT22精度差不多。手头上的DHT11精度太差,于是买了个I2C总线的DHT20,指标类似DHT22,且比单线的后者在数据传输上要稳定。BMP085的温度精度不高,可以用DHT20的温度,除了测气压外还可计算出等效海平面气压,为以后的项目提供参考数据。TEMT6000做照度计,为光照相关的自动化提供参考,顺便看看C3的ADC怎么样。

硬件准备

Parts # 备注
合宙ESP32C3-CORE开发板简版 1
DHT20温湿度计 1
BMP085气压传感器 1
TEMT6000环境光传感器 1
万能板 1 可用面包板代替
飞线 若干 可用跳线代替

合宙ESP32C3-CORE开发板简版介绍

20220215114919363

👍性价比极高。价格是WROOM的一半,比很多上代的ESP8266还便宜。

👍功耗低。深度睡眠模式下仅5µA,轻度睡眠模式下为130µA。

👍支持蓝牙5.0。相比之下廉价的ESP32-S2砍了蓝牙。

👎GPIO数量缩水。但量产设备一般不会接太多设备,是够用的。

👎SDK,文档支持不足。刚推出,而且又是RISC-V架构,资料不足可以理解,就当是战未来了。

使用前先看看使用注意事项

接线

2022-10-18_11-42

ESP32-C3 DHT20 BMP085 TEMT6000
GPIO04 SDA SDA
GPIO05 SCL SCL
GPIO00 S

注意:焊接DHT20时接触时间不要超过5秒,焊接完成后在室内未加湿环境下至少放置5天以便传感器重新水和。

IMG_20221018_122922

固件

接上一篇ESPHome的Hello World程序,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
substitutions:
devicename: livingroom
upper_devicename: Livingroom

esphome:
name: livingroom-htp
platformio_options:
board_build.flash_mode: dio

esp32:
board: esp32-c3-devkitm-1
variant: ESP32C3
framework:
type: esp-idf

# Enable logging
logger:

# Enable Home Assistant API
api:
encryption:
key: !secret api_key

ota:
password: !secret ota_password

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

i2c:
sda: GPIO04
scl: GPIO05
scan: false

sensor:
- platform: bmp085
pressure:
name: "${upper_devicename} Pressure"
id: bmp085_pressure
address: 0x77
update_interval: 60s

- platform: template
name: "Equivalent Sea Level Pressure"
lambda: |-
const float STANDARD_ALTITUDE = 28; // in meters, see note
return id(bmp085_pressure).state / powf(1 - ((0.0065 * STANDARD_ALTITUDE) /
(id(dht20_temperature).state + (0.0065 * STANDARD_ALTITUDE) + 273.15)), 5.257); // in hPa
update_interval: 60s
unit_of_measurement: 'hPa'

- platform: aht10
temperature:
name: "${upper_devicename} Temperature"
id: dht20_temperature
humidity:
name: "${upper_devicename} Humidity"
address: 0x38
update_interval: 60s

- platform: adc
pin: GPIO0
name: "${upper_devicename} Illuminance"
update_interval: 60s
unit_of_measurement: lx
filters:
- lambda: |-
return x * 200.0;

如果不知道设备地址则第一次运行要将i2c:scan:改成true,通过串口调试获取设备地址,修改配置中的address然后在线更新固件。

注意合宙ESP32C3-CORE开发板简版的刷flash方式是DIO,板子名称用esp32-c3-devkitm-1,sdk框架用esp-idf(arduino框架下spi无法正常工作)。

2022-10-18_11-45

参考资料

ESP32C3-CORE开发板 管脚定义

AHT10 Temperature+Humidity Sensor

BMP085 Temperature+Pressure Sensor

TEMT6000

Sensor Filters