智能家居最重要的是对周围环境的感知,在这个基础上才好用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开发板简版介绍
👍性价比极高。价格是WROOM的一半,比很多上代的ESP8266还便宜。
👍功耗低。深度睡眠模式下仅5µA,轻度睡眠模式下为130µA。
👍支持蓝牙5.0。相比之下廉价的ESP32-S2砍了蓝牙。
👎GPIO数量缩水。但量产设备一般不会接太多设备,是够用的。
👎SDK,文档支持不足。刚推出,而且又是RISC-V架构,资料不足可以理解,就当是战未来了。
使用前先看看使用注意事项。
接线
ESP32-C3 |
DHT20 |
BMP085 |
TEMT6000 |
GPIO04 |
SDA |
SDA |
|
GPIO05 |
SCL |
SCL |
|
GPIO00 |
|
|
S |
注意:焊接DHT20时接触时间不要超过5秒,焊接完成后在室内未加湿环境下至少放置5天以便传感器重新水和。
固件
接上一篇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
logger:
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无法正常工作)。
参考资料
ESP32C3-CORE开发板 管脚定义
AHT10 Temperature+Humidity Sensor
BMP085 Temperature+Pressure Sensor
TEMT6000
Sensor Filters