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檢查碼。