1.前言
冬天很冷,买了一个锅炉,需要循环泵的。简单来说就是锅炉水热了之后循环泵自动开启,然后将热水输送走,送到暖
气,热水抽走,凉水进入锅炉,温度降低,循环泵关闭,等待下一次水烧热。因为需要取暖的房子距离烧锅炉的地方比较远,所以需要循环
泵,如果距离近的话水烧热后利用热水上流冷水回流的原理会自动完成循环。当然目前市场上有这种利用温度自动控制循环泵开启关闭的设
备:
由于我家的循环泵功率较大,小继电器启动几次就烧坏了,所以中间又接入了一层交流接触器(我的老父亲加的)。
这种市面上的设备可以大致解决水循环的问题,但是也有一些细节问题解决不了,例如:当回流管水温度也达到设定的温度值后,循环泵就
会一直开启状态,这时候就需要手动去调节旋钮温度(调高),让循环泵停下来(大功率循环泵很耗电)。又如 当炉子内部煤渐渐烧结束后
(东北话叫涝了),锅炉温度达不到设定值,这个时候就需要降低旋钮,让循环泵启动,让这些煤产生的余温不浪费掉。
由于以上的不足,就需要有人隔几个小时去调节旋钮。这部分工作都是我老父亲在做,所以我想做一个自动的东西降低一下老父亲的工作
量。
2.项目结构
我最初的构思是通过手机可以远程调节温度,这样至少不用手动去调节旋钮了,我半夜起来在被窝里用手机调节一下就可以了。基于最初的
构思设计的结构:
这一步我犯了一个错误,将ds18b20传感器和上拉电阻都放入到探头里面,测温的时候发现温度升高以后温度传感器读取温度失败,是因为
温度升高导致电阻阻值增大。后来我将其电阻放到尾部就解决了这个问题。
封装后的探头:
壳子是我用3D打印机打印的,里面放着esp8226模块。
4.软件编写
固件
esp8226 和 esp01 我都是烧录的micropython固件。
mqtt协议在micropython固件(我不知道安信可默认固件是不是也有)通信有一个很大的问题:LmacRxBlk:1 错。例如,如果你在开始的时
候订阅了一个主题,然后你使用非阻塞的方法check_msg()通过回调函数处理 订阅的主题消息,这个时候如果你订阅的主题发布的次数超过
你 check_msg()的次数,那么就会在micropython固件底层 一个错误 LmacRxBlk:1,然后通信中断,简单来说就是你订阅一个主题后进入
事件循环,来不及处理订阅主题的消息,就会导致这个错误。这个错误官方解释是tcp buffer资源没有释放导致的,因为esp8226可用资源非
常有限,但是在mqtt通信中我不可能每次循环后都去释放连接,然后每次都重新建立连接,并且这个 错恶心的地方在于,try except 是捕
获不到的,那么对于处理这个错误只能通过设计上来解决了,也就是一开始就保证其订阅的主题发布的间隔远小于其循环的间隔,保证每次
都能及时的处理订阅的消息。这个问题我解决了很久,因为try except 捕获不到,并且不常出现,无法定位,完全不知道为什么通信会中
断。
代码核心逻辑编写
最核心的控制逻辑我都写在esp8226模块中,循环采集温度,然后将温度作为一个主题发布出来,手机可以订阅主题就可以实时查看锅炉温
度了,在循环中有一个设定温度的变量 ,如果采集的温度高于 设定温度 那么就发布一个 开关主题开启的主题,如果温度低于 设定温度,那
么就发布一个 开关主题关闭,并且每次订阅 设置主题,用于修改设定温度变量。
esp01 控制继电器,每次订阅 开关主题 就可以了,然后每次再把 开关当前状态 作为一个主题发布出来。
这个代码逻辑最开始我是这样写的,手机上只需要发布设置温度主题就可以了,但是也是需要人一段时间用手机去调节一次,还是不能实现自动化,后来我又修改的 esp8226 中的代码逻辑,复杂了一些。

esp01中代码:
Python学习交流Q群:906715085### 复制代码 隐藏代码from machine import Pinfrom umqtt.simple import MQTTClientimport timedef main(): def sub_callback(topic, msg):nonlocal clientnonlocal pin"
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!