You are currently viewing 接案範例(2017年)-APP遠端控制電熱水器

接案範例(2017年)-APP遠端控制電熱水器

記得在2017年剛創業時,我接到的第一個物聯網的案子是幫一家熱水器公司開發一個利用手機APP可以遠端控制他們公司的電熱水器,熱水器是傳統的基本款電熱水器。

所以一開始我的思路是要先瞭解該熱水器是如何控制的,我若要自己另外開發一片無線控制板,就要想一下如何串接它即有的控制元件。所以最難的就是這一段了。因為要開發的結果是熱水器在手動操作後,它的狀態是可以即時反應在APP上,而由我APP控制指令,也要同步跟實體的熱水器一樣。

在研究幾天後,因為熱水器原始的晶片我無法瞭解,所以我的方法是判斷熱水器的訊號LED上的狀態。也就是無論如何,熱水器上的訊息LED燈,我的APP都要跟它同步。因為傳統熱水器它無法用ModBus訊號同步,這也是最大的困難處。

熱水器上的LED訊號有電源開/關、加熱中、自動、定時等訊息。要同步熱水器上的LED最主要的訊號是電源開/關,其他數據只要同步顯示即可。另外就是熱水器上的溫度顯示及它的上下溫度設定按鈕。溫度我直接抓熱水器的上下溫度感測器(它是用ds18b20)數值,因為要偵測兩個溫度感測值,使用Wemos D1 mini pro的話,只有一個A/D類比訊號。這裡的話我是用Wemos D1 mini pro + Arduino pro mini 之間用I2C串接,這樣就可以有Arduino pro mini的多個類比訊號及Wemos D1 mini pro的WiFi功能。

若單純的APP遠端控制電熱水器,它其實是比較簡單的,就是我自己焊接一個WiFi的開發板,上下感測溫度的數據是抓原來熱水器上的DS18B20數據,然後電源開/關及加熱時,我只要控制原電熱水器上的繼電器,這樣就完成了。

不過客戶的要求是要在原本的電熱水器上,增加APP遠端控制的功能,所以我才需要多偵測原電熱水器上的相關訊號源,並且讓APP上的狀態跟電熱水器上的訊號同步。

另外,只要客戶的任何操作動作及電熱水器的溫度數據(每半小時),都需要上網記錄到雲端資料庫,並顯示在網站上,讓客戶可以查詢到。這一段應用跟大數據的蒐集相關,我就不在這邊說明。

因為這是四年多前的案子,我當時還未用MQTT的架構開發,而是使用IP的架構,也就是先用手機遠端連線到該電熱水器上(IP是192.168.4.1),然後再將該電熱水器設定成連線到local的WiFi伺服器,等它連線後,連線後的local IP會顯示在該熱水器Wifi 控制板的網頁上(用192.168.4.1查詢到)。這樣我在APP上輸入該IP並記錄設定下來,就可以控制電熱水器了。若以後來我設計的架構,改成MQTT的架構,就不用這麼麻煩了。

接下來,我就用MQTT的架構來解釋可以怎樣開發APP遠端控制電熱水器。這裡我會加上ModBus的架構,因為傳統的熱水器,很多是用Modbus的架構在監控訊號的。另外一個考量是控制板跟WeMos D1 mini pro中間由ModBus訊號線串接的話,它可以做成比較長的延長線,幾百公尺沒有問題,若有更長距離的需求,也可以加裝中繼站放大器等,延長超過1000米也OK。這些對於一些需要將控制機安裝在WiFi訊號比較無法收到的地方,然後再延長它的WiFi收訊點來接收訊號(如飯店頂樓的太陽能、電、鍋爐多合一熱水器,它的WiFi收訊可以用Modbus延長到大廳比較好WiFi收訊點的地方),也是一種很棒的思考點。

電熱水器架構圖-MQTT+Modbus

上面的電熱水器架構圖,我是結合MQTT+Modbas的架構,它的架構是最基本最簡單的,就是使用ESP32或ESP8266+Arduino mini pro為熱水器控制板的核心,用IO控制Relay,Relay On就開啟電湯匙的電源加熱,等待水的溫度被加熱到設定溫度(假設43度C),就IO控制Relay關,所以Relay Off,這樣就停止加熱電湯匙。而這些動作都是經由手機上的APP控制。在APP上也可以看到當下控制板上的全部數據,如當下溫度、加熱狀態、設定加熱溫度等。而設定加熱溫度值是存在ESP32或ESP8266及Arduino mini pro的記憶體中,不會隨著控制板電源開關或按下Reset按鈕而消失需要重設等。

電熱水器控制器

IMG20211206131041-1

這裏電熱水器是利用Arduino mini pro架構下製作,我們假設會有兩個部份,一個是Arduino上的兩個溫度感測器,利用溫度感測器的來控制繼電器(Relay)的控制。也就是我們假設加熱溫度的設定是43度,當溫度感測器低於40度時,加熱器就會開啟加熱,而溫度加熱超過43度後,就停止加熱這樣的邏輯。

在上圖左邊是嵌入在電熱水器上的控制板,而上圖右邊是看要安裝在住家、工廠、飯店或其他室內可以連到wifi訊息的無線控制盒。而它們之間就是用RS485的線連結。基本上RS485線在500公尺內,訊號不會有太大衰退。

另外,考量若APP的控制出現問題,這裏就是另外接出按鍵,讓使用者也可以手動控制加熱溫度的設定操作。

無線控制盒APP設定操作

APP如何連線ESP32或ESP8266,這方面可以Google找Wifi Manager的外掛模組製作,這個youtube影片上有詳細介紹說明。我自己多年以前有寫過相似的外掛,不過已經多年未維護,所以就不推了。若要自己寫的話,我這裡可以大致上說明一下它的操作架構。

1.首先,到手機的設定開啟WiFi,設定控制盒連線。意思就是幫控制盒設定可以連線到local端的WiFi伺服器。所以ESP32或ESP8266它在Setup()跑完後,它的Wifi狀態是處於AP的狀態,讓其他STA可以連線

2.所以我們要先連線到控制盒本來的WiFi AP(HonestStore)。

3.第一次連線HonestStore,需要輸入它的密碼,預設是12345678

4.接著選定HonestStore為預設的WiFi連線,如下圖

5.接著開啟瀏覽器,網址輸入168.4.1,就可以看到WiFi AP它有抓到附近可以連線的WiFi 路由器,如下圖示

6.最後再連輸入預連線的SSID及PASSWORD並按下儲存,並按下無線控制晶片的reset按鍵,這樣就完成無線控制盒的設定。

而這樣的設定流程,在WiFi晶片中要寫的邏輯就是在Setup中,首先先將自己設成AP狀態,讓其他STA可以連過來,然後再用192.168.4.1連到AP。接著就是讓STA可以代理AP,設定它可以連到local端的WiFi Server,也就是設定AP的SSID及密碼,讓AP也是連線到local Wifi Server中,這樣當AP設定完成並重新啟動後,大家就都是連到local WiFi Server,可以正常上網了。

Modbus架構之遠端控制盒開發

先解說一下傳統的Modbus開發方式。首先,傳統的Modbus會先買一條USB轉RS485的三線接口轉換器(如下圖)

接著當USB接上電腦或NB後,還需要安裝一個Modbus測試軟體

當RS485的D+D-端也就我們傳統說的AB端接上PLC或是電控板端上的AB端後,接下來要先選定通訊埠,PLC或電控板的通訊協定要先確認它的通訊速度及通訊協定是多少,接著在Modbus測試軟體上的通訊埠設定,要先查詢COM埠是哪一個COM port、通訊速度是多少(2400、4800、9600、19200、38400、57600、115200等)及通訊協定是哪一種(E,7,1、E,7,2、E,8,1、O,7,1、O,7,2、O,8,1、N,8,1、N,8,2),這些設定要跟PLC或電控板上的通訊協定對應。

通訊埠選擇正確完成後,再開啟通訊埠,接著我們就可以來測試Modbus的語法,用最簡單的下01 03 00 00 00 01指令,看它會回覆什麼接收資料。下面是一連串的測試畫面。

從上面範例我們可以看到它的COM埠是COM4、通訊速度是9600,以及通訊協定是最基本的N,8,1。等設定完成並開啟通訊埠後,傳送01 03 00 00 00 01指令後,接收到的資料是01 03 02 00 1C B9 8D,代表現在的溫度是28度。

以上這些是流程是傳統的作法,我們當然也可以延用這樣的作法。只是相信未來我們在檢測Modbus的通訊產品,不太會想要把產品帶回實驗室做檢測,或是帶著笨重的NB做這樣的檢測。若我們可以把USB轉RS485三線接口這樣的線做成一個黑盒子並配合手機或平板APP就可以做到相同的功能,我覺得這樣的產品會有相當的市場可期。可以想像之後要檢測相同的工作,只要手機配合無線Modbus控制盒,先將Modbus控制盒的通訊協定設定完成,就可以即時檢測Modbus輪入資料及接收資料是否正確了。

接下來,我們來解說如何開發出這樣的無線Modbus控制盒黑盒子產品及APP。

先參考下面的架構圖,左邊是一個簡易溫度電控板,它支援Modbus通訊協定,可以把它當成跟市面的Modbus電控板或PLC一樣。我們只要將右邊的無線Modbus控制盒跟左邊的溫度電控板之間AB端連接即可。

可以看一下下面的實體圖

跟傳統的USB轉RS485一樣,一開始也是要設定通訊協定。如下圖示

這邊設定通訊協定需要先行設定控制盒的SSID連線步驟有下面幾個步驟:

  1. 手機連線控制盒,輪入可以連線上網伺服器的SSID及密碼儲存後,reset控制盒
  2. 選擇要連結電控板(這裏使用的範例是溫度感測器電控板,它的鮑率及通訊協定是9600及N,8,1)的通訊協定及通訊鮑率,如9600鮑率及N,8,1通訊協定,儲存並reset控制盒

待設定完成這樣的設定後,控制盒即可上網,這樣我們就可以透過MQTT,讓手機APP跟控制盒連線。(P.S.若當下沒有區域網路可連,則可以用手機的行動網路也可)

最後,我們來測試使用APP Modbus測試軟體。

先開啟手機上的「Modbus_MQTT」這個APP,我們可以看到跟傳統Modbus測試軟體的輪入資料指令區塊畫面差不多,下面我們用兩個指令來測試接收資料結果。

以上內容就是無線Modbus控制盒的開發內容

最後,就是自己設計一個APP,將收到的MQTT訊號,是由Modbus傳送的值,將它轉換成十進位,再將值顯示到ViewField上就可以了,基本上,APP跟ESP8266或ESP32之間傳送是經由MQTT,然後它們的值是Modbus的編碼。這樣的架構要應用在傳統的工業上PLC產品,可以很快的就整合了。

總結

有關Modbus的說明,它有Word跟bit區別,然後它是Master跟Slave主從式架構的協議。另外,它的Function有十多種,Word是用03及06及16這三個function,這些應用之後再另一編文章說明。

本課程簡單介紹自己製作APP遠端控制電熱水器的架構,若有興趣也可以一起討論。

發佈留言