物聯網接案實戰:打造無線 Modbus 控制盒與 APP 遠端控制電熱水器系統

回想在 2017 年剛創業時,我接到的第一個物聯網(IoT)商業開發案,就是幫一家熱水器公司將他們現有的傳統基本款電熱水器改造成可以利用手機 APP 遠端控制的智慧家電。

本篇將還原當年的實戰開發思路,分享如何串接傳統控制電路、進行多晶片系統設計,並進一步說明如何利用現代物聯網的 MQTT 協定與工業標準的 Modbus 協定,打造一個能克服訊號死角、支援長距離傳輸的「無線 Modbus 控制盒與 APP 遠端監控系統」。


實戰挑戰:傳統控制電路的狀態同步

對於傳統的電熱水器,我們通常無法直接修改其原廠主機板上的微控制器代碼,也無法取得內部的通訊協議。這在接案開發時是非常常見的挑戰。

解決思路:

  1. 實體狀態同步:為了得知熱水器目前處於什麼狀態(電源開關、加熱中、自動、定時等),我選擇直接判斷熱水器主機板上訊號 LED 燈的電壓狀態。無論熱水器是手動操作還是由 APP 控制,只要 LED 燈亮起,控制板便能偵測到電壓變化,從而將狀態同步回傳至 APP。
  2. 雙溫度感測讀取:系統需要偵測水箱與出水口兩個點的溫度(使用 DS18B20 溫度感測器)。然而,若僅使用 WeMos D1 mini Pro,其類比與 I/O 引腳數量有限,且只有一個 A/D 轉換器。
  3. 多微控制器協同工作 (I2C):為了解決引腳與類比訊號不足的問題,我採用了 WeMos D1 mini Pro (負責 Wi-Fi 通訊) + Arduino Pro Mini (負責感測器讀取與 I/O 控制) 的架構,兩者之間透過 I2C 協定進行雙向資料交換。
Arduino Pro Mini 與 WeMos D1 mini 概念圖
第一代實體控制板接線與焊接

透過這種雙晶片設計,Arduino Pro Mini 可以專心處理 DS18B20 溫度訊報與繼電器控制,並在收到 WeMos D1 mini 的 I2C 查詢請求時,將數據打包回傳;而 WeMos 則專注於網路連線與資料庫上傳。


通訊架構的演進:從 Local IP 到 MQTT + Modbus

在 2017 年的第一代設計中,由於當時 MQTT 尚不普及,我使用的是區域網路直連(IP 架構)

  1. 控制盒開機後會進入 AP 模式(熱點名稱為 HonestStore,IP 預設為 192.168.4.1)
  2. 使用者用手機連線到該熱點,開啟網頁設定住家 Wi-Fi 的 SSID 與密碼。
  3. 控制盒重新啟動並連上住家路由器,獲得一個內部 IP。
  4. 使用者需要透過網頁查詢此 IP,並手動輸入到 APP 中進行綁定與控制。

雖然可行,但這對一般使用者來說設定過於繁瑣。如果改用現代的 MQTT 加上 Modbus (RS485) 架構,系統不僅設定簡單,更具備強大的工業級擴充性!

為什麼引入 Modbus (RS485)?

  • 長距離傳輸:傳統電熱水器通常安裝在陽台、頂樓或地下室,Wi-Fi 訊號極差。透過 RS485 實體線路,控制盒與熱水器之間的通訊距離可達 500 至 1000 公尺
  • 收訊延伸:我們可以把控制板安裝在沒有 Wi-Fi 的頂樓鍋爐房,然後將 RS485 通訊線一路拉到大廳或有 Wi-Fi 訊號的地方,再接上無線網關(無線控制盒)將數據傳送上雲端。

系統架構圖 (MQTT + Modbus)

MQTT + Modbus 遠端控制電熱水器架構圖

實體控制箱與硬體設計

下面是將控制板與電源繼電器(Relay)模組整合進工業外殼的實體電控盒:

電熱水器控制器實體電控盒

在 Arduino Pro Mini 上,我們設定了基本的溫控邏輯:

  • 讀取兩個溫度感測器的平均值。
  • 假設設定加熱溫度為 43°C,當溫度低於 40°C 時,開啟繼電器(Relay ON)啟動電熱水器加熱。
  • 當溫度達到 43°C 時,自動關閉繼電器(Relay OFF)停止加熱。
  • 控制盒上另外設計了實體按鍵,當網路斷線或 APP 出現問題時,使用者仍可透過實體按鍵手動調整設定溫度。

無線控制盒的 APP Wi-Fi 配網步驟

為了將控制盒接入家中路由器,微控制器在開機時會先執行自訂的 AP 配網邏輯:

  1. 開啟 AP 熱點:控制晶片啟動後,將自己設為 AP 模式,發送 SSID 為 HonestStore 的熱點。
WiFi Manager 示意圖
  1. 連線至熱點:手機搜尋並連線到 HonestStore
連線 HonestStore 熱點
  1. 輸入密碼:輸入預設連線密碼(如 12345678)。
輸入配網密碼
  1. 設定預設連線:確認手機已成功與控制盒 AP 關聯。
確認連線狀態
  1. 開啟設定頁面:開啟手機瀏覽器,輸入網址 192.168.4.1,頁面會自動掃描並列出附近可用的 Wi-Fi 路由器。
掃描可用 WiFi 列表
  1. 輸入密碼並儲存:選擇家中的 Wi-Fi 名稱,輸入密碼後點選 「儲存 (Save)」,並重啟控制盒。控制盒便會自動切換為 STA 模式連上網際網路,並開始透過 MQTT 與雲端伺服器進行雙向通訊。
儲存並重啟

Modbus RTU 協定與電腦調試

在工業控制中,Modbus RTU 是最普遍的通訊協定。在將控制盒接入系統前,我們會先在電腦上使用 USB 轉 RS485 轉換器 搭配 Modbus Poll 軟體進行模擬測試。

1. 硬體連線 (RS485)

使用下圖的 USB 轉 RS485 轉接頭,將電腦的 USB 埠轉換為 RS485 的 A(+) 與 B(-) 兩線接口,並與熱水器控制板的 RS485 接口相連:

USB 轉 RS485 轉接器

2. Modbus Poll 設定

打開 Modbus Poll 測試軟體,設定通訊埠參數。參數必須與熱水器控制板一致(通常為 鮑率 9600,資料位元 8,停止位元 1,無同位檢查 N,8,1):

Modbus Poll 通訊埠設定 1
Modbus Poll 通訊埠設定 2

開啟通訊埠後,發送讀取暫存器指令。例如發送對暫存器 00 00 讀取 1 個長度的指令:

  • 發送指令(16進位)01 03 00 00 00 01 (最後加上兩位元 CRC 校验碼)
  • 接收回應(16進位)01 03 02 00 1C B9 8D
  • 數值解析:回應中的 00 1C 轉換為十進位為 28,代表目前偵測到的熱水器溫度為 28°C
Modbus Poll 讀取結果
讀取數據成功畫面
Modbus Poll 回應解析畫面

行動調試:自製「手機版無線 Modbus 測試盒」

為了讓維護工程師不需要隨身攜帶筆記型電腦前往現場(如飯店頂樓或戶外鍋爐房)進行 RS485 線路檢測,我開發了一個自製的無線 Modbus 測試盒方案:

  1. 硬體設計:將一個 ESP8266 與一個 MAX485(RS485 轉 TTL 晶片)封裝在一個小黑盒子中,由行動電源供電。
簡易溫度電控板 Modbus 架構
無線 Modbus 測試盒架構圖
實體測試盒黑盒子
  1. 通訊配置:工程師在現場將測試盒的 A、B 端接到電控板上。透過手機連線至測試盒的設定網頁,設定電控板對應的通訊協定(例如鮑率 9600、N,8,1):
設定測試盒通訊協定
  1. APP 即時調試:打開自製的 「Modbus_MQTT」APP。在 APP 中輸入要讀寫的暫存器地址與指令,指令會透過 Wi-Fi/MQTT 傳送給測試盒,測試盒執行 Modbus 輪詢後,會將接收到的十六進位回應即時傳回手機螢幕顯示。
APP 讀取暫存器指令畫面
APP 接收到的數據顯示 1
APP 接收到的數據顯示 2

總結

本實作結合了傳統硬體線路的「狀態監控」與工業通訊標準的「Modbus (RS485)」長距離優勢,配合微控制器的「Wi-Fi / MQTT」能力,成功將一台傳統電熱水器升級為企業級的智慧聯網設備。

  • 多 MCU 協作:透過 I2C 串接 ESP8266 與 Arduino Pro Mini,解決了 I/O 與類比埠不足的問題。
  • RS485 線路延伸:解決了陽台或頂樓鍋爐房 Wi-Fi 訊號不佳的收訊問題。
  • 無線調試盒設計:大幅降低了現場調試與售後維修的攜帶負擔,只需一支手機與一個小黑盒子即可完成全套 Modbus 線路查修。

如果您也對物聯網遠端控制、Modbus 設備聯網或客製化 APP 開發感興趣,歡迎與我聯絡討論!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端