大多数文章都是按照“我/我们做到了/看起来很酷!”的原则编写的。 同一出版物专门用于失败的项目。 欢迎来到猫...
这是我发表论文的续篇,以ESP8266加热地板控制器为例开发智能设备
让我们从远处开始
我住在一间根据我的项目建造的小房子里。 布局-欧式格栅,走廊,一楼的厨房客厅,第二个浴室,儿童房和卧室。 从非标准-锚固墙,UShP基础,仅加热TP。 同时,地板是木制的,在第二层是GVL板中的浮动地板TP。 在一楼有3个TP管道回路(实际上是一个房间),在第二层-也有3个回路,但每个回路负责一个房间(卧室,浴室,儿童房),壁挂式燃气锅炉14 kW负责热量。 锅炉由中文每周可编程的无线恒温器控制。 在一周的每一天都有四个时段,您可以在每个时段中设置所需的温度。 电池上的大脑,继电器是隐藏的。 效果很好。 但是我经常需要的比我更多。 我想要室温控制。 我看着提出的解决方案,我什么都不喜欢。 “ Arduino”一词引起了我的注意。 从职业上来说,我是一名程序员。 走开...
铁
我铁不强。 焊接开发板是我的专长。 但是我意识到Arduino是一件很简单的事情-即使凭我的电子学知识,我仍然能够在适合自己的房屋中制造温度控制器。
温度传感器
我不喜欢室内的电线。 如果无法排除它们,我会尝试排除或隐藏它们。 在某种程度上,我开始使用中国气象站的无线传感器作为室温传感器。 这些传感器可以在电池上长时间工作,并以433 MHz的频率广播。 很好,您可以选择有无屏幕的不同颜色。 展望未来,我要说的是,气象站的每个制造商都发明了自己的协议,用于通过传感器传输数据。 在实验过程中,我分析了5种类型的传感器的协议-它们都有不同的数据传输格式。 我开发了一个可从4种类型的传感器接收数据的库。 我没有联系第五个协议-由于缺少数据包边界,其协议与其他协议不相似。 数据分析的主要工具已成为中文逻辑分析仪。 没有这种工具,协议分析实际上是不可能的。 它花费很多,而且易于使用-我建议您将其应用于所有arduins。
我根据采样原理(频率为10kHz)实现了该库。 与在接收器引脚上的电平发生变化时会中断的方法相比,这种方法使我们能够消除空气中的噪音并减少处理器的负载。 为了进行调试,使用了逻辑分析器:
调试信号
3 ... 6通道-调试数据
我将举例说明传感器及其功能。
- 类型1:每35秒传输一次数据。 周期没有变化,这在使用3个或更多传感器时会出现问题-传感器中的小时数会有所不同,信号有时会重叠,一个或两个传感器会掉电一个小时,一周或两次,两次或三次。 0.8秒内6个数据包 传感器ID每次打开都会更改。 没有电池状态数据。
资料
顶部-接收器数据,箭头表示干扰
以下是发射机数据。
- 类型2:数据传输时间-40 ... 80秒,取决于通道。 我认为最好的协议是在0.6秒内15个数据包,并有一个校验和。 传感器ID开启后会发生变化,并传输电池状态数据。 最弱的发射器-将接收器放在盒子中时,接收质量明显变差。 接收器可能用外部天线处理过。
资料
无干扰
- 类型3:数据传输周期为50..55秒,具体取决于通道。 0.6秒内7包。 开启时ID会更改,电池状态数据会传输出去。 不错的选择。
- 类型4:数据传输周期56 ... 76秒,取决于通道。 没有屏幕。 未检测到启用时的可更改ID。 不同实例之间的ID是否有所不同?我不知道,我有一个这样的传感器。 电池状态数据-是。 强大的信号,传输跳跃几乎从未观察到。
- 类型5:我没有测量传输周期,没有通道切换,我没有深入分析协议。
结果,接收器单元在Arduino Pro Mini上实现,并通过i2c从站进行了数据传输。
Arduino的兆
这是我制作控制器的第一个平台。 我的控制器具有一个命令界面,该界面由通过UART输入的命令控制。 在那个阶段,我计划在ESP8266上建立一个WEB接口,并通过UART与Mega进行通信。 我有一个与ESP8266结合在一起的Robotdyn Mega开发板,我正计划在此开发板上开发此开发。 该板的一个特殊优势是大量的外部端口。 但是在了解ESP8266的过程中,我意识到这个小巧的芯片非常有能力组合控制器和接口的功能。
ESP8266
我使用了WeMos D1迷你板选件,它具有较小的尺寸和足够的插针数量-考虑到使用端口扩展器。 该板有大量的库。 例如,me-no-dev / ESPAsyncWebServer是一个很棒的Web服务器库,支持Web套接字。 我将控制器组装在板上。 开发了Web界面。 一切正常。 但是出于我无法理解的原因-正常运行时间不超过一天。 我要么歪曲了,要么所使用的某些库歪了。 另外,同时连接数限制为5个。 如果超出限制,则重新启动甚至冻结(尽管存在现有的看门狗。我使用外部看门狗来解决挂起问题)。 考虑到我的Web界面几乎包含十二个文件,并且浏览器以5个并行流加载页面,因此很容易实现重新启动。 我自己决定-该董事会只能作为客户使用。 我开始寻找其他解决方案。
ESP32
有点像ESP8266的继承人。 ESP32具有最多的-频率,内存,支路... ...但问题是-就网络套接字而言,me-no-dev / ESPAsyncWebServer库无法在其上工作。 绝对是 崩溃。 与多线程相关的东西。 我没有找到另一个支持Web套接字的Web服务器库。
SOC
在这个阶段,我决定在Linux上使用该板-我没有提出任何更合适的方案。
我的董事会要求。 似乎其中没有很多:
- 我不需要屏幕。
- 由于缺少用于初始设置的屏幕,因此开发板必须能够在接入点模式下工作。
- 我需要最低限度的操作系统功能。
橙皮i96
该板适用于所有方面-没有视频输出,WiFi,内置闪存,SD卡插槽。 您可以将Ubuntu或DietPi放在内部存储器上。 但是此板的麻烦在于其软件。 您无法建立接入点。 好吧,最大的问题是-重新启动时,MAC地址发生了变化,对此一无所获。 在炉中。 (在撰写本文时,在w3bsit3-dns.com上,专用于该板模拟(2g IOT)的线程中,出现一条消息,说有可能战胜MAC偏移。
洋葱欧米茄2+
精美的文档。 固件开箱即用,一切都启动了,不需要屏幕,不需要UART。 默认情况下启用SSH。 Node.js已交付(4.x版,但对我而言无关紧要)。 已交付Node.js的sqlite和i2c库(使用铃鼓)
除了i2c,我不再需要任何硬件接口。 与我的开发版本相比,ESP8266添加了一个单独的Arduino Pro Mini控制器来分析温度传感器数据接收器的数据。 接收器控制器作为i2c从设备连接到Omega。 具有1wire接口的有线传感器通过1wire <-> i2c桥(DS2482-100)连接。 该桥有一个用于node.js的库,但对我来说,搜索传感器不起作用。 我不明白,我移植到了在ESP8266上运行的DS2482库的js。
但问题在于Omega-2上的WiFi不稳定,重启路由器后它无法重新连接。 此问题已通过固件版本2解决,它不是处于发行状态,但可以工作。 它变得更好了。 但问题出在外面-有时板子从Zyxel路由器上掉下来,并在重启路由器后或一两个小时或三个小时后重新连接,而无需重启路由器。 或者它开始变得非常沉闷-更改电源方案(板子确实喜欢3.3v或更高的电压)并添加外部天线后,这个问题消失了-欧米茄对此非常满意。 因此,原则上,我对开发板感到满意-有时没有访问权限的事实并不会给我带来太大麻烦-作为主要接口,我在连接至Omega访问点的扩展坞中使用了旧的智能手机。 而且远程访问将非常必要-我可以远程重启路由器。 这会引起误解-Omega-2具有两个RST引脚-必须提交+,据我了解,这是通过程序处理的。 第二秒钟要提交什么文件,以及如何连接外部的看门狗-我还不知道。
控制器逻辑
我已经描述了控制器软件架构-尚未更改(即管理通过Web套接字传输的文本命令)。 随着ESP8266的外观变化,Web界面已迁移。 控制器代码的许多过程/功能都简单地从C ++转换为JS。 另一件事是,Linux(OpenWRT)的出现使我有机会使用SQL数据库-sqlite。 因此,我组织了所有关于SQL查询的逻辑。 这实际上是我第一次使用sqlite。 我特别喜欢使用内存数据库的可能性-我将所有临时数据和当前数据(例如,传感器数据,当前所需温度上的数据等)放置在该数据库中。
源代码我通常会分享想法,而不是源代码。 在我看来,这激发了人们,我和读者的智力活动。 想要获取来源-写个人。
组装方式
我把所有东西都收集在铁盒中,装在一个盒子里。 进一步-资源测试。 一周的正常运行时间后,我决定测试通过了。 可以安装。
安装方式
这个阶段非常成功。 我将盒子挂在集热器旁边,安装并连接了热敏头。 我对将所有数据,设置和参数存储在数据库中的想法感到非常满意-在运行过程中,我能够以非计划的方式配置继电器和区域,即每个区域三个继电器,并移动所有其他继电器(原始这个想法是一个区域-一个中继)。 该项目包括使用一组服务传感器DS18B20,用于监测供暖介质的温度,在暖地板的每个回路的返回位置以及总返回温度-这些传感器也已成功连接和配置(所有设置-表示传感器的可理解名称)。
我连接了锅炉继电器。
发射
控制器按计划工作。
为了进行测试,我决定稍微提高二楼其中一个房间的温度。
锅炉开始过热并关闭。
然后,服务传感器派上了用场。 事实证明,这个房间环路出口的水温仅比入口处的水温低十分之几度! 水不凉! 这意味着它不会散发热量。 整个房子在任何温度下都很温暖(目标是稍微降低二楼的温度)。 因此,第一层提供所有热量,第二层的TP几乎不加热地板。 结果,在这样的条件下不可能逐房间调节加热。
结论
因此,我房屋的物理特性和设计特征的影响终止了我的发展。 尽管控制器本身可以正常工作,但我不能在我家的供暖系统中使用它。 也许我会降级他,以便他像中国的恒温器一样控制房屋的气候-根据一位传感器的说法,但到目前为止,我还没有明白这一点。
但是,整个项目并没有成功,在开发过程中,我熟悉了许多以前几乎不熟悉的技术:
- 控制器编程
- 我了解了数据总线1wire,i2c,uart,...
- 在Web服务器设备中获得了一些知识
- 似乎对Web前端开发有很好的理解:html,JavaScript,vue.js
- 他精通Web后端开发:node.js
因此,我在失败的项目中获得了很多经验,这可能对其他项目很有用。
那些读过这个地方的人可以看看发生了什么。
(最后三个设置被阻止)
PS理想的DIY板
在撰写本文的过程中,发现了Omega-2的另一个问题-模块开始冻结。 很难,重置无济于事,只需关闭电源即可。 有什么问题-我还不知道。 也许他不喜欢增加的功率-现在给他供电3.8V。 我将尝试更换电源模块。 尽管该项目无法完成其功能,但现在我将其保留在温度计模式下(正如他们所说,不要在Arduino上执行任何操作-您将获得一个气象站)。 但是无论如何,该主题对我来说都很有趣,我想实现24/7的100%系统可用性。 如果更换电源无济于事,我将尝试使用LinkIt Smart 7688系统,该系统似乎与Omega硬件相同。 可能会更稳定。
另外:用脉冲替换线性稳定器5-> 3.3v后,洋葱Omega 2+的WiFi没有问题-稳定运行了一周。 然后他写了这份补编。
基于此-我还没有为自己找到自制产品的理想选择板:(
作为下一个项目的大脑,我将尝试在android上使用智能手机-您将必须通过wifi将传感器连接到智能手机,但品牌手机的稳定性几乎没有问题。 而node.js似乎已经在电话上。
如果您分享自己选择DIY董事会的愿景,我将不胜感激。