本帖最后由 zld_555 于 2020-6-12 23:24 编辑
先来几个图
HA端控制面板
水箱(水泵+水"位"传感器)(花盆里还有土壤湿度传感器 )
光照(灯带+光传感器)
透明塑料外壳 (动手能力差)
概述 学了micropython后一直想做个东西练练手,家里正好有一盆幸福树,就做个玩具照顾下花花草草吧。 起初是打算使用esp8266设备(因为便宜呗),esp8266设备只有一个ADC接口,所以把这个宝贵的接口留给了水位传感器,土壤湿度传感器就没有使用ADC。后来因为8266的内存实在是太弱了,总是莫名重启优化调试了几天仍然无果,咬咬牙心一横多花了10来块钱上了esp32。 功能主体由esp设备独立完成,HA方便的提供一个接入控制方式。如果依靠HA进行自动化,实现起来应该会更简便。 功能 自动浇水:由土壤湿度传感器检测干湿度,在水箱有水的情况下启动水泵抽水。 自动补光:由光照传感器检测光照强度,并定时采样累计。在允许补光的窗口时间(设定窗口时间是因为怕光污染)进行补光,提升光照强度,直到满足设定的每日光照期望值。光照每天累计,次日清零。 HA接入:配置好主题,使用mqtt自动发现。可以看到各个传感器的状态值。并可以手动控制水泵和补光灯(会退出自动模式)。 物料准备 物料 | 数量 | 单价 | 总价 | Esp32NodeMCU | 1 | 26 | 26 | BH1750FVI数字光照传感器模块 | 1 | 10.5 | 10.5 | 土壤湿度计检测模块 湿度传感器 | 1 | 1.55 | 1.55 | 水位传感器 Water Sensor | 1 | 0.7 | 0.7 | 电源模块12V输入3.3V 5V 12V多路输出 | 1 | 1.2 | 1.2 | 12V 5A电源适配器 | 1 | 14 | 14 | LED补光灯12V | 2 | 9.5 | 19 | 直流电机3V 卧式小潜水泵DC3W | 1 | 2.25 | 2.25 | 水泵导水管 | 1米 | 0.8 | 0.8 | 2路5V继电器 | 1 | 3.25 | 3.25 | DC接口母头 | 1 | 0.45 | 0.45 | F型透明防水盒 | 1 | 5.5 | 5.5 | 发光二极管 | 2 |
|
| 600Ω电阻 | 1 |
|
| 网线 | 2米 |
|
| 电源线双芯12V | 2米 |
|
| |
|
| 85.2 |
网线分成了两部分,其一实现浇水相关功能(两个传感器+水泵至少需要6芯),其二实现补光功能(光照传感器需要4芯,剩下4芯拧成两股为LED供电)。 发光二极管一个用于显示电机工作状态,一个用于显示水箱是否有水,可选用。 接入设计
对于电路知识,我完全是萌新,画的图仅限于能看懂,包括后面的焊接/接线都是乱七八糟,各位看官见笑 因为咱这是HA论坛,所以只对HA相关的内容做出说明,完成代码请 移步github。 通讯完全使用mqtt实现,并且在代码里进行MQTT自动注册,所以HA里只需要开启自动发现即可。
HA的MQTT自动发现配置:
‘homeassistant/{switch}/{dev_id}/{object_id}/config’
由控制台发布,设备端订阅的主题:‘{dev_id}/+/command’
由控制台订阅,设备端发布的主题:‘{dev_id}/devstate’
自动发现:
1.土壤湿度传感器(binary_sensor) topic:homeassistant/binary_sensor/{dev_id}/moisture/config
{"device_class": "moisture", "name": "Temperature", "state_topic": "{dev_id}/state", "payload_on": "wet","payload_off":"dry", "value_template": "{{value_json.moisture_status}}" }
2.水位传感器(sensor) topic:homeassistant/sensor/{dev_id}/water/config
{"device_class": "illuminance", "name": "light_accumulation", "state_topic": "{dev_id}/state", "unit_of_measurement": "lx", "value_template": "{{ value_json.light_accumulation}}" }
4.LED补光灯(switch) topic:homeassistant/switch/{dev_id}/led/config
{"name": "plant_led", "command_topic": "{dev_id}/led/command","payload_on":"on","payload_off":"off", "state_topic": "{dev_id}/state", "value_template": "{{value_json.led}}"}
5.水泵(switch) topic:homeassistant/switch/{dev_id}/water/config
{"name": "plant_waterpump", "command_topic": "{dev_id}/water/command","payload_on":"on","payload_off":"off", "state_topic": "{dev_id}/state", "value_template": "{{value_json.water_pump}}"}
6.手工/自动模式切换(switch) topic:homeassistant/switch/{dev_id}/mode/config
{"name": "plant_devmode", "command_topic": "{dev_id}/mode/command","payload_on":"auto","payload_off":"manual", "state_topic": "{dev_id}/state", "value_template": "{{value_json.mode}}"}
命令主题: 1.控制水泵 topic:{dev_id}/water/command
2.控制补光灯 topic:{dev_id}/led/command
3.控制设备工作模式 topic:{dev_id}/dev/command
设备状态:
- moisture_status:土壤湿度,true为”干/缺水“,false为”湿润/不缺水“
- water_level:水位值浸入水后数值基本在500-600.400以下不敏感(esp8266)0-4095(esp32)
- light_level:读取值0-54613light_accum: 当天光照量统计,每10分钟记录一次
- light_levelled:补光灯是否工作water_pump:水泵是否工作
1.设备传感器状态 topic:{dev_id}/devstate
{"dev_id":"9","dev_state":"on","mode":"atuo","moisture_status":"dry","water_level":400,"light_level":1000,"light_accum":1930,"led":"on","water_pump":"off"}
{"dev_id":"9","dev_state":"on","mode":"manual","moisture_status":"wet","water_level":400,"light_level":1000,"light_accum":1930,"led":"on","water_pump":"off"}
|