雜菜MAN
2017年5月28日 星期日
太陽能熱水器 S3X Proxy 與 S3X Client 電路組裝
太陽能熱水器 S3X Proxy 與 S3X Client 電路組裝
【關於電路】
原先都在麵包板試驗,測試過好幾個模式後選擇現今的方案如下。
S3X Proxy:提供 S3X Client 連線,裝置數量單一。
S3X Client :與 S3X Proxy 連線,裝置數量數個。
太久沒拿烙鐵了、真的要有點耐心&眼力。
外殼還沒找到合適的。
【S3X Proxy】
盡量簡化零件,只保留 LED 顯示狀態。
正面
分解
【S3X Client 】
16x2 LCD 顯示資訊、LED 顯示狀態、強制加熱按鍵。
麵包板測試
正面
背面
分解
2017年5月7日 星期日
取得 ESP8266 Chip ID
文章來源:
https://github.com/esp8266/Arduino/issues/921
程式碼:
Serial.printf(" ESP8266 Chip id = %08X\n", ESP.getChipId());
Serial.printf(" ESP8266 Chip id = %lu\n", ESP.getChipId());
至於有何用處?
可以當作識別設備 ID 或者 WiFi Soft-AP 預設密碼。
2017年4月19日 星期三
太陽能熱水器控制系統通訊格式
太陽能熱水器控制系統
通訊格式
【源由】
有天查看了一下太陽能熱水器主機(P31)發現時間快了,於是校正了一下時間。
這時假想了一下,如果可以連上去校時該多好,或者把資訊連網觀測或記錄也不錯。
於是把【RS-485】連上去觀測,初步得到規律的通訊資料,但某些欄位無法確認其功用。
為了實際驗證只好寫程式跟主機(P31)溝通看看,經過慢慢修正才能無誤地與之溝通。
最後得到的結果連上去校正時間是不可能的,但要將控制、資訊連網應該可行的。
【硬體設備】
主
機:P31 => 系統狀態、系統控制、子機與控制箱連線。
子
機:S3X => 與主機連線,取得目前水溫、水溫設定、主機狀態,回應強制加熱、更改水溫。
控制箱:C34 => 與主機連線,接受加熱命令,回應目前水溫、控制箱狀態。
【通訊格式】
輪詢命令:以下主機(P31)送出輪詢與相對子機(S3X)的回應,皆為[16進數值]。
前兩碼為主機(P31)送出輪詢命令,第三碼【00】為主機(P31)送出要求回應【設備ID】,後面兩碼為子機(S3X)或控制箱(C34)回應的【設備ID】。
88 88 00 31 31 => S31
77 77 00 32 32 => S32
66 66 00 33 33 => S31
55 55 00 34 34 => C34
主機<->子機溝通範例:
88 88 00 31 31 11 2A 2A 15 00 00 22 38 38 25 32 32 33 00 00
1.主機發送【88 88】輪詢
=> 對應子機(S31)監聽後進入應答模式
2.主機發送【00】要求設備ID
=> 子機回應設備ID【31 31】
3.主機發送【11】要求強制加熱狀態
=> 子機回應強制加熱狀態【沒按:2A 2A】或【已按:AA AA】
4.主機發送【15】要求更改水溫
=> 子機回應不更改【00 00】或更改水溫【IE 1E】~【4B 4B】範圍
5.主機發送【22】通知目前水溫
=> 子機接著讀取目前水溫【38】後並回應給主機【38】
6.主機發送【25】通知水溫設定
=> 子機接著讀取水溫設定【32】後並回應給主機【32】
7.主機發送【33】通知主機狀態
=> 子機接著讀取主機狀態【00】後並回應給主機【00】
8.完畢
主機狀態:主機狀態碼,目前【Bit-5】、【Bit-1】尚未知其作用。
Bit-8.控制箱未連線
Bit-7.溫度異常
Bit-6.無法加熱
Bit-5.未知 #5
Bit-4.加熱中
Bit-3.強制加熱模式
Bit-2.水位過低
Bit-1.未知 #1
主機<->控制箱溝通範例:
55 55 00 34 34 11 38 38 22 07 07 44 00 55 00 56 00 57 00 58 00 59 00 5A 00 33 2A 2A
01.主機發送【55 55】輪詢
=> 控制箱(C34)監聽後進入應答模式
02.主機發送【00】要求設備ID => 控制箱回應設備ID【34 34】
03.主機發送【11】要求目前水溫
=> 控制箱回應目前水溫【38 38】
04.主機發送【22】要求控制箱狀態
=> 控制箱回應控制箱狀態【07 07】
05.主機發送【44】功能碼
=> 控制箱接著讀取【00】
06.主機發送【55】功能碼
=> 控制箱接著讀取【00】
07.主機發送【56】功能碼
=> 控制箱接著讀取【00】
08.主機發送【57】功能碼
=> 控制箱接著讀取【00】
09.主機發送【58】功能碼
=> 控制箱接著讀取【00】
10.主機發送【59】功能碼
=> 控制箱接著讀取【00】
11.主機發送【5A】功能碼 => 控制箱接著讀取【00】
12.主機發送【33】加熱命令 => 控制箱接著讀取【一般:2A】或【加熱:AA】後原封回應給主機【一般:2A】或【加熱:AA】
13.完畢
##.目前【44】【55】【56】【57】【58】【59】【5A】功能碼及其後面的資料碼尚未知其作用。
控制箱狀態:將控制箱狀態碼,目前【Bit-6】尚未知其作用,【Bit-3】【Bit-2】【Bit-1】皆為【00】會引發水位不足。
Bit-8.感溫棒異常
Bit-7.加熱管失效
Bit-6.未知 #6
Bit-5.加熱中
Bit-4.繼電器開路
Bit-3.水位
Bit-2.水位
Bit-1.水位
【補充資訊】
本太陽能控制系統通訊格式只有簡單的資料比對,因此無法確保雙方通訊資料的完整與正確性。
當【RS-485】線上假如有個裝置故障因而亂發送資訊時,因為太陽能控制系統通訊格式沒有嚴謹資訊檢查,在此狀況下主機(P31)最常發生的是水溫設定值被更改了。
為確保通訊資訊的正確性,建議應該要重新訂定通訊格式並加入CRC檢查碼。
【相關程式】
https://github.com/formosafox
較新的文章
首頁
訂閱:
文章 (Atom)