
MQTT 是一種專門給物聯網設備用的輕量訊息協定。設備把資料「發布」到一台叫 broker 的中繼伺服器,需要資料的系統去「訂閱」自己關心的主題,雙方不用直接連線。感測器每幾秒報一次溫度、機台一停機就通知後台,這種又小又頻繁的資料,用 MQTT 送最省頻寬,網路斷斷續續也比較撐得住。
我們幫工廠把溫度感測器、ESP32 Wi-Fi 模組、掃碼槍、標籤機和 3D 列印機接進系統時,MQTT 幾乎都是那條「資料進門」的路。這篇用工廠現場聽得懂的話把它拆開:broker、topic、QoS 各是什麼,跟一般網頁用的 HTTP 差在哪,工廠實際拿它送哪些資料,從感測器到看板整條線怎麼搭。帳號、加密這些資安設定我們另外寫過 MQTT 三層防禦架構,這篇不重講。
它的來歷很務實。MQTT 在 1999 年由 IBM 的工程師為了監控輸油管線而設計,當時要透過又貴又慢的衛星線路回傳資料,所以每一個位元組都要省(HiveMQ 整理的 MQTT 發展史有完整經過)。後來它交給 OASIS 標準組織維護,2019 年推出 MQTT 5.0 規格,現在是物聯網最常見的通訊方式之一。
設備數量也一直在長。研究機構 IoT Analytics 的統計估計 2025 年底全球連網的物聯網設備約 211 億台,2030 年上看 390 億台。設備一多,「每台設備定時問一次伺服器」的做法就會越來越吃力,這正是 MQTT 擅長的場景。
MQTT 是什麼?先看一張白話對照表
先講結論:把 MQTT 想成工廠裡的收發室。每台設備把消息交給收發室(broker),收發室按照信封上的分類(topic)轉給有登記要收這類消息的人(訂閱者)。下面這張表把常聽到的名詞一次翻成白話,看完這張,後面的內容就讀得懂了。
名詞 | 白話 | 工廠裡的例子 |
|---|---|---|
Broker | 收發室,所有消息都先送到這裡再轉出去 | 一台跑 Mosquitto 的小主機,或雲端託管服務 |
Client(用戶端) | 會連上 broker 的任何程式或設備 | ESP32 溫度模組、後端寫資料庫的程式、看板網頁 |
Publish(發布) | 把一則消息丟給 broker | 烤箱每 30 秒送出目前溫度 |
Subscribe(訂閱) | 跟 broker 登記「這類消息請轉給我」 | 告警服務訂閱所有溫度資料 |
Topic(主題) | 消息的分類路徑,用斜線分層 | factory1/line2/oven03/temperature |
Payload(內容) | 消息本體,格式自己決定,常用 JSON | {"temp_c": 182.4} |
QoS(服務品質) | 這則消息要保證送到幾次,分 0、1、2 三級 | 溫度用 0,報工用 1 |
Retained(保留訊息) | broker 幫這個主題記住最後一則,新訂閱者一連上就拿到 | 機台目前是運轉還是停機 |
Last Will(遺囑) | 設備連線時先寄放的一則訊息,異常斷線時由 broker 代發 | 「oven03 離線了」 |
Keep Alive(心跳) | 設備定時跟 broker 說「我還在」,太久沒聲音就判定斷線 | 每 60 秒一次心跳 |
看完還是不確定自己的設備該怎麼接進系統,可以直接 加 LINE 問我們,把設備型號和想看的資料丟過來,我們會告訴你大概要怎麼接。
發布/訂閱怎麼運作:設備只管發,系統各自訂
一句話:設備只負責把資料交給 broker,誰要用資料誰自己去訂,設備完全不用知道後面接了幾套系統。
這個設計最大的好處是「加東西不用動設備」。今天先接一個寫資料庫的程式,下個月想加一面現場看板,再過半年要接告警簡訊,都只是在 broker 後面多掛一個訂閱者。對工廠來說這很重要,因為設備端的程式一旦燒進去,要改就得跑現場一台一台更新。
topic 怎麼命名比較不會後悔
topic 是用斜線分層的字串,例如 「factory1/line2/oven03/temperature」。訂閱時可以用萬用字元:「+」 代表任一層,「#」 代表這層以下全部。所以 「factory1/+/+/temperature」 會收到一廠所有設備的溫度,「factory1/line2/#」 會收到二線的所有資料。
命名一開始就要想清楚,半年後設備變成幾十台,亂取的 topic 會讓所有人看不懂。我們接案時習慣照這個順序排:
- 由大到小:廠區 → 產線 → 設備 → 資料種類,查詢和授權都比較好切
- 只用英文小寫、數字和底線,不要放空白和中文,各家工具的支援不一定一樣
- 設備編號跟現場貼的標籤一致,維修人員看到 oven03 就知道是哪一台
- 狀態、量測、指令分開:「.../status」、「.../temperature」、「.../cmd」 不要混在同一個主題
QoS 0、1、2 怎麼選
QoS 決定這則消息要保證送到幾次。等級越高越可靠,但來回確認的封包越多,broker 要記的東西也越多。工廠裡大多數資料用 0 或 1 就夠了。
等級 | 保證什麼 | 代價 | 工廠裡適合送 |
|---|---|---|---|
QoS 0:最多一次 | 送出去就不管,網路斷了這則就沒了 | 最省,沒有確認封包 | 每 10 到 30 秒一筆的溫度、電流,掉一筆下一筆就補上 |
QoS 1:至少一次 | 一定送到,但可能重複 | 每則要等確認,接收端要能去重 | 報工、掃碼、異常事件,少一筆就對不上帳 |
QoS 2:剛好一次 | 不遺失也不重複 | 四次交握,最慢也最吃資源 | 少數不能重複執行的指令,例如扣料、出貨確認 |
我們的做法是預設用 QoS 1,再在後端用每則訊息的流水號去重,比全面開 QoS 2 好維護。這套「設備只管發、系統各自訂」的架構,就是工廠管理系統的現場資料入口。像我們做的 生產力管理系統,重點就是生產可見性與異常管理,現場資料怎麼進門,直接決定看板準不準。
MQTT 跟 HTTP 差在哪?什麼時候不需要 MQTT
先講結論:設備要「一直報」就用 MQTT,系統之間「偶爾問」就用 HTTP。兩個都是好工具,差別在資料怎麼流。
HTTP 是一般網頁和 API 用的方式,一問一答:用戶端發請求,伺服器回答,答完就結束。要知道設備最新狀態,就得每隔幾秒問一次(輪詢)。算一下就知道:50 台機台每 5 秒問一次,一小時就是 36,000 次請求,而且大部分回答都是「沒變」。MQTT 讓設備維持一條長連線,狀態有變才推一則消息過來,網路和伺服器都輕鬆很多。
比較項目 | MQTT | HTTP(REST API) |
|---|---|---|
連線方式 | 設備跟 broker 維持一條長連線 | 每次請求建立、回完就結束(可重用但仍是一問一答) |
誰先開口 | 設備有資料就推 | 用戶端要資料就拉,想即時只能輪詢 |
每則訊息的額外負擔 | 固定標頭最小 2 個位元組 | 每次請求都要帶一整組文字標頭 |
即時性 | 資料一到就轉出去 | 看輪詢間隔,5 秒輪詢就可能慢 5 秒 |
斷線處理 | QoS、持久連線狀態、Last Will 都內建 | 重試、補送要自己寫 |
一對多 | 一則消息可以同時給很多訂閱者 | 要通知幾個系統就得各打一次 |
除錯門檻 | 要裝 MQTT 工具才看得到訊息 | 瀏覽器、curl 就能測 |
最適合 | 感測器、機台狀態、現場事件 | 查詢資料、送表單、系統對系統 API |
HiveMQ 的協定比較也提到同一件事:HTTP 每次請求都得重帶一次標頭,MQTT 連線建好之後,每則訊息只多一點點開銷。訊息越小、越頻繁,差距就越大。
但我們不認同「做物聯網就一定要上 MQTT」這種說法。如果工廠只有兩三台設備、每分鐘回報一次,設備直接打後端的 HTTP API 完全夠用,硬上 MQTT 反而多養一台 broker、多一個要監控的東西。我們的判斷門檻大概是:設備超過十幾台、需要秒級狀態,或同一份資料要給好幾套系統用,MQTT 才開始划算。
工廠裡 MQTT 拿來送什麼資料
簡單分三類:連續量測(溫度、濕度、電流)、狀態變化(運轉、停機、待料、異常)、人或設備產生的事件(報工、掃碼、列印完成)。三類的送法不太一樣,下表是我們規劃時的起手設定。
資料類型 | 例子 | topic 範例 | QoS | 怎麼送 | 進系統後變成 |
|---|---|---|---|---|---|
連續量測 | 烤箱、冷藏庫溫度 | f1/line2/oven03/temperature | 0 | 每 10 到 30 秒一筆 | 溫度曲線、超標告警 |
狀態變化 | 運轉/停機/待料 | f1/line2/cnc05/status | 1 + retained | 狀態一變就送 | 稼動率、停機原因統計 |
報工事件 | 掃工單條碼、完工數量 | f1/line2/station1/report | 1 | 掃一次送一次 | 工單進度、產量報表 |
設備任務 | 3D 列印機開始、完成、失敗 | f1/lab/printer02/job | 1 | 任務狀態改變時 | 列印排程、機台使用率 |
在線狀態 | 設備上線/離線 | f1/line2/cnc05/online | 1 + retained | 上線時發布,異常斷線靠 Last Will | 設備清單紅綠燈 |
下發指令 | 換線參數、重新開機 | f1/line2/cnc05/cmd | 1 或 2 | 人在後台按下才送 | 設備執行紀錄 |
溫度監控:多數工廠的第一步
溫度是最常見的入門題,因為感測器便宜、規則好懂、出事代價又高:冷藏庫斷電、烤箱過熱,晚發現一小時就是一整批報廢。我們接溫度感測器時,告警通常不會一超標就叫,會設成「連續 3 筆超標才通知」,不然門一開就響,兩個禮拜後就沒人理告警了。
機台狀態:稼動率的原始資料
稼動率要算得準,靠的是每一次狀態切換都有時間戳。設備在「運轉→停機」那一刻送一則消息,後端把每段時間加總,就能算出今天停了多久、停在哪個原因。這也是 工廠管理系統 從 Excel 升級時最先想補上的資料,因為人工填的停機時間幾乎都是估的。
報工與掃碼:人產生的事件
現場人員用掃碼槍掃工單條碼、輸入完工數量,這筆事件透過平板或 ESP32 用 MQTT 送進系統。這類資料一定要用 QoS 1,而且要處理重複:同一筆報工如果因為網路重送收到兩次,產量就會多算。做法是每筆事件帶一個唯一編號,後端存之前先查有沒有存過。報工資料再往下串到批號與檢驗紀錄,就是 生產履歷系統 的基礎。
PLC 那一段誰負責
很多機台的資料在 PLC 裡,要用 Modbus 或 OPC UA 讀出來。這段我們老實說:通常由設備商或系統整合商處理,他們用閘道器把 PLC 的數值轉成 MQTT 送出來,我們負責 broker 之後的系統端,包括資料怎麼存、怎麼算、怎麼呈現。分工講清楚,報價和責任就不會打架。
從 ESP32 到看板:一條完整的 MQTT 資料路線
一條最常見的路線分五段:感測器接在 ESP32 上,ESP32 透過 Wi-Fi 連到 MQTT broker,後端程式訂閱資料寫進資料庫,最後由看板和告警把資料呈現出來。下圖是整條線的樣子。
ESP32 是一顆內建 Wi-Fi 的便宜晶片,接感測器、讀數值、送 MQTT 都做得到,是工廠做概念驗證最常用的板子。想先了解這顆晶片,可以看我們寫過的 ESP32-P4 入門指南,或是用同一類晶片做的 NFC 打卡系統。
設備送出來的內容,我們建議至少帶這四個欄位:
{
"device_id": "oven-03",
"ts": "2026-10-19T09:15:30+08:00",
"temp_c": 182.4,
"seq": 10233
}「ts」 是設備量到的時間,不要用 broker 收到的時間,斷線補傳時才不會亂掉;「seq」 是流水號,後端靠它判斷有沒有重複或漏掉。這兩個欄位一開始沒放,之後要補就得全部設備重燒一次。
段落 | 做什麼 | 常見選擇 | 通常誰負責 | 容易出事的地方 |
|---|---|---|---|---|
感測器/設備 | 量測或產生事件 | 溫度探棒、掃碼槍、3D 列印機 | 工廠採購 | 量測位置不對,數字準也沒用 |
邊緣端 | 讀數值、打包、連網送出 | ESP32、工業閘道器 | 系統開發商或設備商 | Wi-Fi 死角、斷線沒補傳 |
Broker | 收消息、轉給訂閱者 | Mosquitto、EMQX、雲端託管 | 系統開發商 | 沒監控,掛了沒人知道 |
後端訂閱服務 | 驗證、去重、寫入 | Node.js、Python 程式 | 系統開發商 | 重複資料、時間戳錯亂 |
資料庫 | 長期存放與查詢 | PostgreSQL、時序資料庫 | 系統開發商 | 沒規劃保存期限,一年後塞爆 |
看板與告警 | 給人看、通知人 | 網頁看板、LINE 或 Email 通知 | 系統開發商 | 告警太多,沒人在看 |
這條線再往上接,就是工單、報工、品質這些 MES 功能。想看整套製造執行系統怎麼規劃,可以讀我們的 客製化 MES 開發完整指南;MES、ERP、QMS 三套系統怎麼分工,則在 ERP、MES、QMS 差在哪 有一張分工表。
選 MQTT broker 要看哪幾件事
先決定要自己架還是用雲端託管,再看預計幾台設備、斷線時訊息要不要留著、需不需要多台備援。下表是常見的四種選項。
方案 | 類型 | 適合 | 要注意 |
|---|---|---|---|
開源,單機輕量 | 幾十到幾百台設備的工廠、概念驗證 | 沒有內建叢集,要高可用得自己想辦法 | |
開源加商業版 | 上千台以上、需要叢集與規則引擎 | 功能多學習成本高,授權條款近年有調整,商用前先看清楚 | |
HiveMQ | 商業版為主,另有社群版 | 大型企業、需要原廠支援 | 授權費用較高 |
雲端託管(AWS IoT Core、Azure IoT Hub 等) | 全託管服務 | 不想自己顧主機、設備分散各地 | 按連線或訊息量計費,跟平台綁得比較緊 |
綁平台這件事要特別小心。Google 在 2023 年 8 月停掉了 Cloud IoT Core,當時用它的公司都得在期限內把所有設備搬家。所以我們的原則是:設備端只講標準 MQTT,不用任何平台專屬的 SDK,哪天要換 broker,只要改連線位址和帳號就好。
規劃 broker 時可以照這張清單問一輪:
- 設備數和訊息量:幾台設備、每台多久送一次,算出每秒大概幾則
- 斷線要不要補:設備或後端斷線期間的訊息要不要留著,影響持久連線狀態的設定
- MQTT 5 支援:訊息有效期限、遺囑延遲這些 5.0 才有的功能,對工廠很實用
- 監控:連線數、訊息量、broker 本身有沒有活著,要有人收得到通知
- 備援:broker 掛了產線資料會斷,可以接受斷多久
- 帳號權限:哪台設備能發哪些 topic,細節見 MQTT 三層防禦
MQTT 常見踩坑:斷線、重複、舊指令
大部分 MQTT 的問題,都出在「以為送到了」。協定本身很穩,出事的通常是設定和資料設計。下面是我們最常看到的幾種:
- 斷線期間的訊息全不見:用戶端用 clean session(乾淨連線)登入,broker 就不會幫它保留斷線期間的訊息。後端訂閱服務要改用持久連線,並搭配 QoS 1
- 報工數量多算:QoS 1 保證送到但可能重複,後端沒有用流水號去重,就會一筆報工算兩次
- 設備執行一週前的舊指令:指令主題設成 retained,設備重開機一連上就收到上次留下的指令又執行一次。指令不要用 retained,或用 MQTT 5 的訊息有效期限讓它過期
- 網路一抖就狂報離線:Wi-Fi 不穩時設備頻繁上下線,Last Will 一直觸發。MQTT 5 可以設遺囑延遲,短暫斷線不發離線通知
- 時間軸錯亂:用 broker 收到的時間當資料時間,斷線補傳的資料全擠在同一秒。設備端要校時並自帶時間戳
- topic 越長越亂:沒有命名規則,半年後沒人知道 test/abc/temp2 是哪台
這幾個坑都不難修,難的是上線前沒人想到。系統導入失敗常常死在這些小地方,MES 導入失敗原因 那篇整理過更多類似的例子。
MQTT 資安先顧三件事
最低限度要做到三件事:每台設備有自己的帳號或憑證、連線走 TLS 加密(常用 8883 埠,未加密是 1883 埠)、用存取控制限制每台設備只能發布或訂閱自己的 topic。還有一條最基本的:1883 埠不要直接開在網際網路上。
這三層要怎麼設、Mosquitto 的設定檔長什麼樣子,我們在 MQTT 帳密認證夠安全嗎?三層防禦架構 寫得很完整,照著做就可以。工廠設備一旦被接管,影響的是產線,資安不要留到最後才補。
MQTT 專案自己接還是找人做?分工與預算怎麼抓
先講結論:兩三台設備做概念驗證,有工程背景的同事可以自己來;要進正式生產、接進 MES 或 ERP、讓很多人看同一面看板,就值得找人把系統端做好。
階段 | 範圍 | 誰做比較合適 | 預算怎麼拆 |
|---|---|---|---|
概念驗證 | 1 到 3 台設備,Mosquitto 加簡單看板 | 內部工程師或小型開發商 | 主要是硬體和人力時間 |
產線試點 | 一條產線,加上告警、報表、帳號權限 | 系統開發商 | 硬體、佈線、系統開發分開估 |
全廠導入 | 多產線、接工單與報工,串 ERP | 系統開發商加設備商分工 | 依設備數、資料種類、要串的系統估 |
預算最容易漏估的是佈線和現場安裝。我們估價時會把軟體、硬體、佈線三塊拆開,佈線以市場行情來說每點大約 1,000 到 2,500 元,現場環境越複雜越高。完整的拆法可以看 MES 系統價格怎麼算,要比較套裝、系統整合商、客製開發三種廠商,則看 MES 廠商怎麼選。
如果你的工廠現在是這樣:溫度靠人每兩小時抄一次、停機時間月底才憑印象補、想看產線狀況得走到現場問,這三件事中了兩件,就很值得先把一條產線的資料接進系統試試看。整體轉型的順序怎麼排,台灣製造業智慧製造導入指南 和 製造業內部系統開發指南 都有整理。
想聊聊你的設備適不適合用 MQTT 接進系統,我們很樂意 聽你說說現場的情況,或直接 加 LINE 把設備清單丟過來。這個階段我們陪你一起看哪一段最值得先做,真的要動手再談範圍跟費用。
ℹ️我們做過這件事
這篇講的東西都是我們實際接過的:MQTT、溫度感測器、ESP32 Wi-Fi 聯網、掃碼槍、標籤機、3D 列印機,我們都把它們串進過系統,目前累積 40+ 企業客製案落地。
工廠類的系統,可以參考我們做的 生產力管理系統:為傳統製造業建立生產可見性、異常管理與產能效益分析。PLC、OPC UA 這類機台端的整合通常由設備商負責,我們專心把 broker 之後的系統做好。
看到這裡,如果你也在想「我們工廠的資料要怎麼接進來」,我們很樂意 聽你聊聊現在的實際情況,一起看看從哪條產線開始最划算。
ℹ️我們怎麼看
接下來三年,會有越來越多設備出廠就內建 MQTT 輸出,「怎麼把資料送出來」會變得越來越簡單。真正拉開差距的會是系統端:topic 怎麼命名、資料怎麼去重和存放、怎麼變成報工、稼動率和告警。這也是我們選擇專心做的一段,PLC 端交給設備商,我們把資料變成能用的系統。
給工廠老闆一個判斷方法:先問自己三個問題。哪一個數字現在是靠人抄的?晚一小時知道會損失多少?這個數字有幾個人要看?三個答案都明確的那條產線,就是第一個值得接 MQTT 的地方。
QMQTT 的全名是什麼?
早期寫作 MQ Telemetry Transport,MQ 來自 IBM 的 MQ 系列產品。現在的標準文件直接稱為 MQTT,由 OASIS 標準組織維護,最新的主要版本是 2019 年發布的 MQTT 5.0。
QMQTT 用哪個連接埠?
未加密的 MQTT 預設用 1883 埠,走 TLS 加密的用 8883 埠,透過 WebSocket 連線的常見設定是 8083 或 443。正式環境建議一律走加密,1883 埠不要對外開放。
QMQTT 和 HTTP 該選哪個?
設備要持續回報資料、需要即時狀態,或同一份資料要給好幾套系統用,選 MQTT。設備只有幾台、每分鐘才回報一次,或是系統之間偶爾查詢資料,用 HTTP API 就夠了,不需要多養一台 broker。
QMQTT 和 Modbus、OPC UA 有什麼不同?
Modbus 和 OPC UA 多半用在讀取 PLC 與機台內部的數值,MQTT 擅長把資料從現場送到伺服器和雲端。常見的做法是由設備商的閘道器用 Modbus 或 OPC UA 讀機台,再轉成 MQTT 送進系統。
QMQTT 3.1.1 和 5.0 要用哪個版本?
新專案建議直接用 5.0。它多了訊息有效期限、遺囑延遲、更清楚的錯誤代碼等功能,對工廠設備斷線、舊指令這類問題很有幫助。主流 broker 和 ESP32 常用的函式庫都已經支援。
Q用 MQTT 把工廠設備接進系統要多少錢?
看設備數量、資料種類和要串的系統。概念驗證主要是硬體和人力時間;產線試點以上要把硬體、佈線、系統開發分開估,佈線市場行情約每點 1,000 到 2,500 元。可以先從一條產線試點,確認資料有用再擴大。
AUTHOR
恆遠數位編輯團隊






留言(0)
尚無留言,成為第一個留言的人吧!