本帖最后由 zbsyouran 于 2022-11-25 19:48 编辑
前段时间逛论坛看到一个网友问怎么用ESPHOME获取太阳能热水器的温度和水位,正好我也刚给家里的太阳能热水器加了个控制器,索性做一个吧。
我为了节省成本,用的合宙的ESP32C3的板子,12.9包邮确实不错,但是有坑,ESPHOM编译起来太坑了,而且某宝店铺配的pinout示意图竟然都是错的,最后在官网资料里找到正确的,害得我来回改了好几次,真是天坑。这个板子,就是便宜,搞LuatOS还不错。
目前基本完美,使用原控制器自带的4线传感器,跟原控制器同步显示水温、水位、上水反馈、加热反馈,同时能控制自动上水、自动加热且互不影响
功能。水温显示与原控制器相差±2℃,追求完美的话可以在代码里细调。水位显示的话,我这个传感器跟市面上的好像不太一样,阻值跟网上的资料
不一致,但用在我的代码里是正确的,目前看显示准确,后期在代码里加上温度补偿会更精准。
如果需要同时测量浴室的温湿度显示的话,直接接一个DHT11就好了,空闲许多IO可用,我接了个BMP280集成AHT20,能同时显示浴室温度、湿度和
大气压,虽然没什么卵用...
成品演示:【ESP32太阳能热水器接入HomeAssistant成品演示】https://www.bilibili.com/video/B ... 62a51ae934524bc0475
2022.11.25更新:V1.2版打板文件,更新了个小BUG,I2C接口可以用默认的4,5接口了, 之前修改到了RX,TX,有BUG。
Gerber_PCB_太阳能热水器ESP32C3接入HA_V1.2.zip
(167.88 KB, 下载次数: 52)
这是HA显示页面,可控制同时有反馈。
组装后与控制器相连。这里需要注意下接线位置,我在代码里和原理图里都详细说明了接线位置,同时要测量控制器的
单片机引脚输出电压,我这个控制器输出4V左右,控制引脚、LED指示和反馈引脚都加了限流电阻,但也需要根据不同
的控制器输出电压更换限流电阻。
(注意!!!控制器内有220V强电!谨慎操作!一切操作在断电后执行!!!)
(注意!!!控制器内有220V强电!谨慎操作!一切操作在断电后执行!!!)
(注意!!!控制器内有220V强电!谨慎操作!一切操作在断电后执行!!!)
测量和接线需要基本电路知识方可操作,安全起见,在测量时可用闲置路由器等12V电源接出2跟正负极连接到控制器内12V接线处,
这样可以不用接220V就能让控制器开机,方便我们接线和实验。(不同控制器的变压器输出电压不一定是12V,以实物测量为准。)
固定在右侧刚好放下,我这个控制器内部空间不小。为了布线整齐,ESP32C3和转接板之间没有用排母,直接焊接的。
三个接线端子,其中两个接传感器的是2X2P圆排针和圆排母,某宝找了一圈就几家卖双排弯针且很贵,立创商城也很
贵,我索性就用普通的了,好在控制器空间够大也不影响接线。我用的是第二版,第三版已经改成正确的端子了,(
下面3D图中的就是)。
转接板的立创EDA的3D图。
原理图,很简单,2个ADC分压电路,1个模拟开关切换传感器输入设备,画的简陋望大神轻拍。
打板文件可以在下面链接里的立创开源广场下载,BOM表也在,推荐有动手能力的可以试试。
V1.1 ESP32太阳能热水器接入Homeassistant - 嘉立创EDA开源硬件平台 (oshwhub.com)
ESPHOME代码:
esphome:
name: "esp32c3-solar"
platformio_options:
board_build.flash_mode: dio
board_build.mcu: esp32c3
esp32:
board: esp32-c3-devkitm-1
framework:
type: esp-idf
version: recommended
# Custom sdkconfig options
sdkconfig_options:
CONFIG_COMPILER_OPTIMIZATION_SIZE: y
# Advanced tweaking options
advanced:
ignore_efuse_mac_crc: false
logger:
hardware_uart: USB_SERIAL_JTAG
level: DEBUG # defaults to DEBUG, NONE ERROR WARN INFO DEBUG VERBOSE VERY_VERBOSE# Enable Home Assistant API
api:
encryption:
key: "QOzVYQ5D0uTaxu+rGfVmG9HgJ55oiatKDFythKbXyg4="
ota:
password: "0efa16a5fd81d0596ef310af99fd0d8a"
wifi:
ssid: XGBB
password: xgbb2325158
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp32C3 Fallback Hotspot"
password: "Wm2xW9axwnZU"
i2c:
sda: 20
scl: 21
scan: true
id: bus_a
switch:
- platform: gpio
pin: 3 ##接自动上水按键触发端
name: "1上水开关"
id: water
on_turn_on: ##创建瞬时开关
- delay: 200ms
- switch.turn_off: water
inverted: true
- platform: gpio
pin: 5 ##接自动加热按键触发端
name: "2加热开关"
id: heating
on_turn_on: ##创建瞬时开关
- delay: 200ms
- switch.turn_off: heating
inverted: true
- platform: gpio
pin: 6 ##CH440G模拟开关SET端
name: "3CH440G_SET"
id: CH440G_SET
#inverted: true
binary_sensor: #二进制传感器,获取状态
- platform: gpio
name: "4上水反馈" #接单片机上水控制脚
pin:
number: 18
mode:
input: true
pulldown: true
device_class: opening
- platform: gpio
name: "5加热反馈" #接单片机加热控制脚
pin:
number: 10
mode:
input: true
pulldown: true
device_class: opening
sensor:
- platform: bmp280
temperature:
name: "1 BMP280 temperature"
oversampling: 16x
pressure:
name: "2 BMP280 pressure"
update_interval: 5s
- platform: aht10
temperature:
name: "1 AHT20 temperature"
humidity:
name: "1 AHT20 humidity"
update_interval: 10s
- platform: ntc # 》水温检测参数《
sensor: resistance_sensor #
calibration:
b_constant: 3435 #NTC的B值
reference_temperature: 25°C #NTC标称温度参数
reference_resistance: 10kOhm #NTC标称温度阻值
name: "6solar_水温"
#device_class: "battery" #更改设备类型
accuracy_decimals: 1 #更改小数点位数
# Example source sensors:
- platform: resistance
id: resistance_sensor
sensor: source_sensor
configuration: DOWNSTREAM
resistor: 5.024kOhm #分压电阻阻值
#name: "9solar_水温阻值"
- platform: adc
id: source_sensor
pin: GPIO4
#name: "10ADC水温_采样电压"
update_interval: never # never update
#accuracy_decimals: 0 #更改小数点位数
attenuation: 11db
- platform: adc # 》水位检测参数《
id: solar_level
pin: GPIO0
name: "7solar_水位"
unit_of_measurement: "%" #更改测量单位
accuracy_decimals: 0 #更改小数点位数
attenuation: 6db #ADC衰减值
update_interval: never # never update
filters:
- multiply: 66.13 #ADC电压比例设置(66.13为合宙ESP32C3放大比例,合宙ESP32C3的ADC默认衰减0DB满量程电压为0.83V,(ESP32理应为1.1V,不知为何我这个合宙ESP32是0.8V))
- lambda: |- #水位逻辑判断
if ( x <= 49 ) {
return x = 100;
} else if (x <= 62.5) {
return x = 80;
} else if (x <= 76.3) {
return x = 50;
} else if (x <= 88.68) {
return x = 25;
} else {
return x = 0;
}
interval:
- interval: 60s
then:
- switch.turn_on: CH440G_SET
- component.update: source_sensor
- component.update: solar_level
- switch.turn_off: CH440G_SET
##水温检测串联电阻阻值设置为5.1kohm,10k_b3435传感器在-10℃时阻值为43.12kohm,在110℃时阻值为0.761kohm,
#此时采样电压在-10℃时为2.957v,在110℃时为0.435v。#(此参数为ESP32设计,ADC采样电压范围在未设置衰减时
#为0-1.1V;使用ESP8266核心板时需更改分压电阻以匹配其0-1V#采样电压范围;nodemcu则为0-3.3V(A0引脚已有分压电阻。)
##水位检测串联电阻阻值设置为150kohm,水位传感器在0%时阻值大约在45kohm-∞ohm浮动,此时采样电压为0.76V-1.1V;
#20%时阻值大约在25kohm-45kohm浮动,此时采样电压为0.47V-0.76V;50%时阻值大约在15kohm-25kohm浮动,此时采样
#电压为0.3V-0.47V;80%时阻值大约在5kohm-15kohm浮动,此时采样电压为0.1V-0.3V;100%时阻值大约在0.5kohm-5kohm
#浮动,此时采样电压为0.01V-0.1V;(实际显示时根据multiply参数等比放大并计算后显示为百分比)
|