本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于ESP8266的恒温器

发布时间:2022-08-27
分享到:

基于ESP8266的恒温器

发布时间:2022-08-27
分享到:

你是否厌倦了普通的 Junkers/Bosch 室内恒温器?是时候升级了!

介绍
忙碌了一天,回到温暖舒适的家,这种感觉确实让人心往神驰!多年来,我的家里一直使用的是一台 Junkers (Bosch) 燃气锅炉,为壁挂式散热器面板提供热水。

得益于 ESP8266 和 Amazon Alexa,现在可以从任何地方甚至通过语音控制中央供暖系统!

一些现代燃气锅炉对燃气锅炉和房间控制单元之间的接口采用了开放标准(OpenTherm),但在我的安装中,该接口是制造商专有的。此处显示的解决方案取代了 Junkers (Bosch) TW2 房间控制单元或任何兼容的单元。

背景
燃气加热器是一种具有天气补偿功能的调节燃气锅炉,由基本房间控制单元控制。与开/关恒温器相反,加热控制是通过精确控制循环回路中的水温来实现的,从而通过散热器面板释放到房屋中的热能。水温受 TW2 房间控制单元的影响,室外温度由温度传感器测量。

图为锅炉用户手册中的加热曲线。室外温度 (AT) 越低,水温设定点 (VT) 就越高,以补偿通过房屋外壳的更大热量损失。

燃气锅炉的控制系统试图通过调制以尽可能少的燃气使用量来达到和保持要求的水温。这是制造商的专有技术,我们不会干涉。

现有的房间控制单元由一个选择恒温器模式的开关、一个用于增加/减少水温设定点的旋钮(电位器)和一些电阻器组成。现在的情况主要是:电位器磨损了,并向燃气锅炉产生了异常的控制信号。所以会突然感觉到莫名其妙变热了!

概念
控制单元有一个简单的 2 线制燃气锅炉接口,没有有源组件或处理器。它本质上是一个可变电阻。逆向工程非常简单:燃气锅炉通过电线发送固定电流,并测量控制单元电阻产生的输出电压。所以我们需要的是一个精确控制的电压源。

我没有使用数模转换器 (DAC),而是选择使用 esp8266 的内部 sigma-delta 源,据报道这是一个隐藏的功能,但在 arduino-esp8266 平台内核中尚不支持。它是一个高频 PWM 信号,具有 256 个离散占空比步长,对于此应用来说绰绰有余。使用 RC 低通滤波器,PWM 信号被平滑为 DC 信号。Arduino AnalogWrite 不适合,它的频率太低,然后 RC 滤波器会在输出信号上留下相当大的纹波。

通过射极跟随器配置中的电阻分压器网络和 PNP 晶体管电路,我们获得了适用于该应用的有效范围 (0.6V ..1.02V) 的输出信号。

构建
电子电路可以很容易地构建在一块单面穿孔板上,非常适合 100x60x25mm 的项目盒。

Wemos 板使用2.54mm 母头;这样模块可以在必要时轻松插入和拔出。

对于电源,我使用了一个可调 DC/DC 转换器(降压),因为我可以在恒温器电缆中的 2 根备用电线上使用 24 VDC 电源,但任何其他稳定的 3.3V 电源都可以。

将 Wemos 板插入其接头之前调整 DC/DC 模块的输出电压

使用约 15 厘米长的电线将 OLED 显示屏、电容式触摸按钮和温度/湿度传感器连接到电路板:这些组件必须在构建结束时粘在项目盒的前壳上几滴热胶。因此,请确保将所有电线焊接到这些组件的背面。

注意:OLED 模块带有一个预焊接的接头,小心地拆焊它,不要损坏 oled 的玻璃。

接下来是电容式触摸按钮,效果很好,它们粘在项目盒的内部,通过塑料外壳检测触摸。它们可以在一系列电压下工作,但这里是 3.3V,因为 ESP8266 I/O 是 3.3V。

模块上有 2 个焊盘可将行为更改为低/高电平有效,或开关模式与切换模式;我使用了标准配置中的模块:高电平有效和开关。

为了避免重影,我在模块电源输入附近添加了一个额外的 1uF 电容器。这里提供的草图不仅会检测按钮触摸,还会检测滑动手势。

接下来是项目框,它需要几个孔:背板上的一个用于穿过四根墙线(电源和恒温器控制),一个用于温度/湿度传感器的孔,以及一个用于显示器的方孔。一个基本的钻头、一把切割刀和对坚韧塑料的耐心就可以完成这项工作。

然后是构建中最有趣的部分:油漆工作。

油漆工作完成后,是时候用几滴热胶将 OLED 显示屏、触摸按钮和传感器粘合到位。

完成的项目盒足够轻,可以用两个蓝色大头钉固定在墙上,无需螺丝。

Arduino软件
请先安装 arduino-esp8266 平台https://github.com/esp8266/Arduino

对于显示图形,我使用了 Daniel Eichhorn 为 esp8266 气象站所做的出色工作。该库实现了漂亮的帧动画,并支持位图。

https://github.com/ThingPulse/esp8266-oled-ssd1306

NessieGraphics.h 文件包含草图使用的所有位图。位图采用 xbm (X-Bitmap) 格式,一种基于文本的格式,可以将其剪切和粘贴到头文件中,并与您的代码一起编译。如果您打算创建自己的自定义 xbm 位图,GIMP 是 goto 工具:在 GIMP 中打开任何图像文件,调整到预期的像素数,然后保存为 xbm 格式。

arduino 草图将连接到 Amazon AWS IOT 服务。亚马逊提供了一些设置此连接的选项,请参阅此链接:https ://docs.aws.amazon.com/iot/latest/developerguide/protocols.html

我选择使用客户端证书作为身份验证的 MQTT 协议,在端口 443 上。要使此连接正常工作,必须另外安装 Pubsubclient MQTT 库(转到https://github.com/knolleary/pubsubclient,或直接从在 Arduino IDE 中)。用于设置 TLS 1.2 连接的所有其他库已经是 arduino-esp8266 平台的一部分。

在正常工作之前,还有一些事情要做:

  • 在 .ino 文件中填写您的 WiFi 凭据。
  • 应用一些库修复:文件位于 bitbucket 存储库中;按照自述文件的说明进行操作。

软件构建不需要任何特定参数。作为参考,我使用了 80MHz,1M+3M spiffs,没有调试。

亚马逊网络服务设置
如果您像我一样没有使用过亚马逊云服务的经验,那么这一步可能会花费大部分时间。这是一个复杂的设置,尽管逻辑布局合理,并且存在许多好的指南,亚马逊和其他人都有。

学习需要时间,但完全免费!亚马逊为其服务提供免费套餐,这在很大程度上足以建立这种 DIY 项目。IOT 服务在前 12 个月是免费的,只要您不从您的设备发送数百万条 mqtt 消息。

首先创建一个亚马逊账户和一个亚马逊开发者账户。您将需要开发者帐户来创建您的 Alexa 技能。

AWS - 第 1 部分:在 Amazon AWS IOT 上创建您的事 things
按照这些说明https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html

创建您的事项,创建设备证书,设置策略,将策略附加到设备证书,并将证书附加到您的事项。无需在此处进一步配置您的设备,或配置规则。我们不会在我们的应用程序中使用这些。

从截图中可以看出,我将我的东西命名为“stefaan_wemos”。该名称必须在 arduino 草图中进行硬编码。

创建设备证书后,将文件下载到您的 PC。

我们将使用 openssl 将客户端证书和私钥转换为二进制格式。在 Windows 上,您可能需要安装 openssl:https://wiki.openssl.org/index.php/Binaries。在命令行类型:

> openssl x509 -in c7ddc08d09.cert.pem-out cert.der -outform DER
> openssl rsa -in c7ddc08d09.private.key -out key.der-outform DER

用您的证书和私钥的确切名称替换输入文件名。将输出文件名保留为“cert.der”和“key.der” :这些文件必须存储在 SPIFFS 中,并且草图代码正在引用这些确切的文件名。

我没有使用 AWS IOT 的公钥和根 CA;我的代码没有验证 AWS IOT 服务器的身份。

在“交互”选项卡下,您将找到将您的 esp8266 硬件连接到亚马逊云所需的最后一个参数。将屏幕截图中红色显示的字符串复制到您的草图中,就可以编译和上传了。

如果一切顺利,esp8266 将向 AWS IOT 设备影子报告其状态。串行输出将帮助您识别潜在错误。

AWS IOT MQTT 客户端控制台可用于向 esp8266 设备发送 mqtt 测试消息。

在$aws/things/<yourthingname>/update上发布任何内容,您应该会看到消息在串行输出中回显。

或订阅$aws/things/<yourthingname>/update/accepted以接收来自 esp8266 的任何消息。

如果您没有收到来自 AWS IOT 的回调,那么很可能您忘记应用库修复,尤其是#define MQTT_MAX_PACKET_SIZE 768在PubSubClient.h.

如果 Serial 未显示“MQTT connection ok”,请查看串行输出以获取线索。设置 TLS 连接可能存在问题:检查硬编码的 AWS 参数和证书/私钥文件。

AWS - 第 2 部分:设置 AWS Lambda 函数
按照本指南设置您的 lambda 函数:

https://docs.aws.amazon.com/lambda/latest/dg/get-started-create-function.html

确保在N. Virginia地区创建函数。该功能需要访问AWS IOT 和 CloudWatch 日志;确保相应地设置策略。检查您的视图是否类似于下面的屏幕截图。

注意您的 lambda 函数的 ARN;稍后在设置您的 Alexa Skill时,您将需要它。

将我的 bitbucket 存储库中的 javascript 代码index.js复制到代码窗口中。不要忘记使用您自己的事物名称和端点修改对象“iotData”和“thingName”。

var iotData = new AWS.IotData({endpoint: "aaaaaaaaaaaaaa.iot.eu-west-1.amazonaws.com"});

const thingName = "your-AWS-IOT-thingname";

bitbucket 存储库包含一些测试事件来测试您的 lambda 函数。转到“配置测试事件”并在文本字段中复制粘贴示例测试事件(json 代码)。测试事件允许测试与您在上一步中设置的 AWS IOT 影子的连接。

如果您的 esp8266 硬件仍处于连接状态,您会注意到测试事件将通过事物的设备影子有效地检索和修改恒温器设置。

如果到这工作依旧正常,距离启用语音的恒温器仅一步之遥!

AWS - 第 3 部分:创建您的 Alexa 智能家居技能
作为最后一步,我们将为恒温器创建语音控制。我们将使用 Alexa 智能家居框架。

从初始屏幕中,选择“智能家居”技能类型,并为您的技能命名。注意 Application id (amzn1.ask.skill.xxxx) :您需要将其添加到您在上一步中创建的 lambda 函数的触发器中。这将使您的技能能够调用您的 lambda 函数。

在“端点”部分,填写您之前创建的 lambda 函数的 ARN。您也可以在其他地区添加额外的 lambda 函数。

在配置屏幕中,设置帐户链接;这是 Alexa 智能家居技能的强制性步骤。我选择使用“登录亚马逊”;这是一个方便的选择,因为您不需要设置自己的身份验证服务器。

屏幕截图上以蓝色矩形显示的字段特定于您的技能和帐户链接。确保它们是正确的!如果您在执行帐户链接时从 Alexa 应用程序收到奇怪的错误,请回到这一步尝试找出您的错误!

现在是时候在 Alexa 商店中找到您的技能并激活它了。

帐户关联成功后,你可以使用任何 Alexa 语音服务来测试您的结果。

结语
如果你不想唤醒 Alexa,可以随时通过其内部 Web 界面控制恒温器。要将 Web 界面暴露给外界,一种可能的方法是使用 dyndns 服务,并在路由器中设置端口转发到 esp8266。

本文中所用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Stefaan De Smet,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论