你是否厭倦了普通的 Junkers/Bosch 室內恒溫器?是時候升級了!
介紹
忙碌了一天,回到溫暖舒適的家,這種感覺確實讓人心往神馳!多年來,我的家里一直使用的是一臺 Junkers (Bosch) 燃氣鍋爐,為壁掛式散熱器面板提供熱水。
得益于 ESP8266 和 Amazon Alexa,現(xiàn)在可以從任何地方甚至通過語音控制中央供暖系統(tǒng)!
一些現(xiàn)代燃氣鍋爐對燃氣鍋爐和房間控制單元之間的接口采用了開放標準(OpenTherm),但在我的安裝中,該接口是制造商專有的。此處顯示的解決方案取代了 Junkers (Bosch) TW2 房間控制單元或任何兼容的單元。
背景
燃氣加熱器是一種具有天氣補償功能的調節(jié)燃氣鍋爐,由基本房間控制單元控制。與開/關恒溫器相反,加熱控制是通過精確控制循環(huán)回路中的水溫來實現(xiàn)的,從而通過散熱器面板釋放到房屋中的熱能。水溫受 TW2 房間控制單元的影響,室外溫度由溫度傳感器測量。
圖為鍋爐用戶手冊中的加熱曲線。室外溫度 (AT) 越低,水溫設定點 (VT) 就越高,以補償通過房屋外殼的更大熱量損失。
燃氣鍋爐的控制系統(tǒng)試圖通過調制以盡可能少的燃氣使用量來達到和保持要求的水溫。這是制造商的專有技術,我們不會干涉。
現(xiàn)有的房間控制單元由一個選擇恒溫器模式的開關、一個用于增加/減少水溫設定點的旋鈕(電位器)和一些電阻器組成。現(xiàn)在的情況主要是:電位器磨損了,并向燃氣鍋爐產(chǎn)生了異常的控制信號。所以會突然感覺到莫名其妙變熱了!
概念
控制單元有一個簡單的 2 線制燃氣鍋爐接口,沒有有源組件或處理器。它本質上是一個可變電阻。逆向工程非常簡單:燃氣鍋爐通過電線發(fā)送固定電流,并測量控制單元電阻產(chǎn)生的輸出電壓。所以我們需要的是一個精確控制的電壓源。
我沒有使用數(shù)模轉換器 (DAC),而是選擇使用 esp8266 的內部 sigma-delta 源,據(jù)報道這是一個隱藏的功能,但在 arduino-esp8266 平臺內核中尚不支持。它是一個高頻 PWM 信號,具有 256 個離散占空比步長,對于此應用來說綽綽有余。使用 RC 低通濾波器,PWM 信號被平滑為 DC 信號。Arduino AnalogWrite 不適合,它的頻率太低,然后 RC 濾波器會在輸出信號上留下相當大的紋波。
通過射極跟隨器配置中的電阻分壓器網(wǎng)絡和 PNP 晶體管電路,我們獲得了適用于該應用的有效范圍 (0.6V 。.1.02V) 的輸出信號。
構建
電子電路可以很容易地構建在一塊單面穿孔板上,非常適合 100x60x25mm 的項目盒。
Wemos 板使用2.54mm 母頭;這樣模塊可以在必要時輕松插入和拔出。
對于電源,我使用了一個可調 DC/DC 轉換器(降壓),因為我可以在恒溫器電纜中的 2 根備用電線上使用 24 VDC 電源,但任何其他穩(wěn)定的 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 氣象站所做的出色工作。該庫實現(xiàn)了漂亮的幀動畫,并支持位圖。
https://github.com/ThingPulse/esp8266-oled-ssd1306
NessieGraphics.h 文件包含草圖使用的所有位圖。位圖采用 xbm (X-Bitmap) 格式,一種基于文本的格式,可以將其剪切和粘貼到頭文件中,并與您的代碼一起編譯。如果您打算創(chuàng)建自己的自定義 xbm 位圖,GIMP 是 goto 工具:在 GIMP 中打開任何圖像文件,調整到預期的像素數(shù),然后保存為 xbm 格式。
arduino 草圖將連接到 Amazon AWS IOT 服務。亞馬遜提供了一些設置此連接的選項,請參閱此鏈接:https ://docs.aws.amazon.com/iot/latest/developerguide/protocols.html
我選擇使用客戶端證書作為身份驗證的 MQTT 協(xié)議,在端口 443 上。要使此連接正常工作,必須另外安裝 Pubsubclient MQTT 庫(轉到https://github.com/knolleary/pubsubclient,或直接從在 Arduino IDE 中)。用于設置 TLS 1.2 連接的所有其他庫已經(jīng)是 arduino-esp8266 平臺的一部分。
在正常工作之前,還有一些事情要做:
在 .ino 文件中填寫您的 WiFi 憑據(jù)。
應用一些庫修復:文件位于 bitbucket 存儲庫中;按照自述文件的說明進行操作。
軟件構建不需要任何特定參數(shù)。作為參考,我使用了 80MHz,1M+3M spiffs,沒有調試。
亞馬遜網(wǎng)絡服務設置
如果您像我一樣沒有使用過亞馬遜云服務的經(jīng)驗,那么這一步可能會花費大部分時間。這是一個復雜的設置,盡管邏輯布局合理,并且存在許多好的指南,亞馬遜和其他人都有。
學習需要時間,但完全免費!亞馬遜為其服務提供免費套餐,這在很大程度上足以建立這種 DIY 項目。IOT 服務在前 12 個月是免費的,只要您不從您的設備發(fā)送數(shù)百萬條 mqtt 消息。
首先創(chuàng)建一個亞馬遜賬戶和一個亞馬遜開發(fā)者賬戶。您將需要開發(fā)者帳戶來創(chuàng)建您的 Alexa 技能。
AWS - 第 1 部分:在 Amazon AWS IOT 上創(chuàng)建您的事 things
按照這些說明https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs.html
創(chuàng)建您的事項,創(chuàng)建設備證書,設置策略,將策略附加到設備證書,并將證書附加到您的事項。無需在此處進一步配置您的設備,或配置規(guī)則。我們不會在我們的應用程序中使用這些。
從截圖中可以看出,我將我的東西命名為“stefaan_wemos”。該名稱必須在 arduino 草圖中進行硬編碼。
創(chuàng)建設備證書后,將文件下載到您的 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 硬件連接到亞馬遜云所需的最后一個參數(shù)。將屏幕截圖中紅色顯示的字符串復制到您的草圖中,就可以編譯和上傳了。
如果一切順利,esp8266 將向 AWS IOT 設備影子報告其狀態(tài)。串行輸出將幫助您識別潛在錯誤。
AWS IOT MQTT 客戶端控制臺可用于向 esp8266 設備發(fā)送 mqtt 測試消息。
在$aws/things/《yourthingname》/update上發(fā)布任何內容,您應該會看到消息在串行輸出中回顯。
或訂閱$aws/things/《yourthingname》/update/accepted以接收來自 esp8266 的任何消息。
如果您沒有收到來自 AWS IOT 的回調,那么很可能您忘記應用庫修復,尤其是#define MQTT_MAX_PACKET_SIZE 768在PubSubClient.h.
如果 Serial 未顯示“MQTT connection ok”,請查看串行輸出以獲取線索。設置 TLS 連接可能存在問題:檢查硬編碼的 AWS 參數(shù)和證書/私鑰文件。
AWS - 第 2 部分:設置 AWS Lambda 函數(shù)
按照本指南設置您的 lambda 函數(shù):
https://docs.aws.amazon.com/lambda/latest/dg/get-started-create-function.html
確保在N. Virginia地區(qū)創(chuàng)建函數(shù)。該功能需要訪問AWS IOT 和 CloudWatch 日志;確保相應地設置策略。檢查您的視圖是否類似于下面的屏幕截圖。
注意您的 lambda 函數(shù)的 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 函數(shù)。轉到“配置測試事件”并在文本字段中復制粘貼示例測試事件(json 代碼)。測試事件允許測試與您在上一步中設置的 AWS IOT 影子的連接。
如果您的 esp8266 硬件仍處于連接狀態(tài),您會注意到測試事件將通過事物的設備影子有效地檢索和修改恒溫器設置。
如果到這工作依舊正常,距離啟用語音的恒溫器僅一步之遙!
AWS - 第 3 部分:創(chuàng)建您的 Alexa 智能家居技能
作為最后一步,我們將為恒溫器創(chuàng)建語音控制。我們將使用 Alexa 智能家居框架。
從初始屏幕中,選擇“智能家居”技能類型,并為您的技能命名。注意 Application id (amzn1.ask.skill.xxxx) :您需要將其添加到您在上一步中創(chuàng)建的 lambda 函數(shù)的觸發(fā)器中。這將使您的技能能夠調用您的 lambda 函數(shù)。
在“端點”部分,填寫您之前創(chuàng)建的 lambda 函數(shù)的 ARN。您也可以在其他地區(qū)添加額外的 lambda 函數(shù)。
在配置屏幕中,設置帳戶鏈接;這是 Alexa 智能家居技能的強制性步驟。我選擇使用“登錄亞馬遜”;這是一個方便的選擇,因為您不需要設置自己的身份驗證服務器。
屏幕截圖上以藍色矩形顯示的字段特定于您的技能和帳戶鏈接。確保它們是正確的!如果您在執(zhí)行帳戶鏈接時從 Alexa 應用程序收到奇怪的錯誤,請回到這一步嘗試找出您的錯誤!
現(xiàn)在是時候在 Alexa 商店中找到您的技能并激活它了。
帳戶關聯(lián)成功后,你可以使用任何 Alexa 語音服務來測試您的結果。
結語
如果你不想喚醒 Alexa,可以隨時通過其內部 Web 界面控制恒溫器。要將 Web 界面暴露給外界,一種可能的方法是使用 dyndns 服務,并在路由器中設置端口轉發(fā)到 esp8266。
評論
查看更多