開發者分享:利用 EMQX Cloud 與 ESP32 微控制器實現智慧液冷散熱系統

emqx發表於2024-03-05

作者:陶德坤,EMQX Cloud 開發者。


作為一名後端開發人員,我經常需要同時執行多個 Jetbrains IDE (整合開發環境),所以經常面臨膝上型電腦過熱問題。我曾嘗試過各種散熱方法,從傳統的風扇到更先進的半導體冷卻系統,但這些方法都帶來了新的問題,如噪音和耗電等。


因此,我設計了一個智慧的液冷散熱解決方案:透過引入外部水冷系統、利用微控制器 ESP32、MQTT 伺服器 EMQX Cloud Serverless 以及容器化的部署平臺 來實時監測和控制水溫。以下是該解決方案的詳述,希望能為其他物聯網開發者帶來靈感:


作者 DIY 的物聯網智慧液冷散熱系統


技術選型


我希望這套系統不僅有功能性,還具備可靠性和效率,以確保水溫監控系統的穩定執行。以下是我挑選的技術棧:


  • ESP32:在多種選擇中,ESP32 微控制器因其整合了 Wi-Fi 和藍芽功能,以經濟高效的特點而脫穎而出。這款晶片為物聯網專案提供了強大的效能支援,同時成本可控又不犧牲功能性。
  • DS18B20 水溫感測器:對於溫度監控,我選擇了 DS18B20,因為它提供了精確的數字溫度讀數和出色的耐水效能。這款感測器與 ESP32 可協同工作,確保了水溫監控系統的準確性和穩定性。
  • EMQX Cloud Serverless MQTT Broker:在眾多訊息中介軟體中, 因其高效能、可靠性以及 Serverless MQTT 服務在處理大量併發連線和訊息路由方面的卓越表現而受到青睞,這些特性對於確保裝置間通訊的順暢至關重要。
  • Python 和 Flask:選擇 Python 是因為它的表達力強且庫函式豐富,Flask 則輕量級且高度靈活,能適應快速開發和部署的需求,這對於迅速實現專案原型至關重要。
  • : 的全球分散式邊緣託管服務能夠將容器轉換為微虛擬機器,提供了一個獨特的平臺。這不僅加快了應用的部署速度,還大大減少了資料傳輸的延遲,為使用者提供了接近實時的體驗。


專案實施


專案的實施階段是一個將創意轉化為實際解決方案的過程。在這個過程中,首先要確保 EMQX Cloud Serverless 的正確配置,然後是硬體的整合,後端服務的開發,最後是系統的部署和測試。


Serverless MQTT Broker 配置


提供免費配額,對於我們的應用場景來說,這些配額完全能夠覆蓋所需的成本,這也是我選擇 EMQX Cloud Serverless 部署的主要原因之一。另外,它預設支援傳輸層安全協議(TLS),為我們的資料傳輸提供了強有力的加密保障,確保資料在傳輸過程中的機密性、完整性和身份驗證,降低了資料洩露或被篡改的風險。


以下是配置 EMQX Cloud Serverless 的具體步驟:


  • 建立 Serverless MQTT Broker:
    • 登入到 EMQX Cloud 控制檯,並導航至 "Create Deployment" 頁面。
    • 選擇 "Serverless" 部署型別,並按需配置部署。例如區域、SpendLimit 等。
    • 完成配置後,點選 "Create" 按鈕,系統會自動建立 Serverless MQTT Broker。
  • 新增認證資訊:
    • 在 MQTT Broker 建立成功後,進行認證資訊的配置,確保只有授權的客戶端可以連線到 Broker。
  • 使用 MQTTX 連線測試:
    • 下載並安裝 MQTTX 客戶端( ),然後使用之前配置的認證資訊測試與 MQTT Broker 的連線,確保一切工作正常。


透過以上步驟,我成功地配置了 EMQX Cloud Serverless MQTT Broker,為我們的專案提供了一個安全、可靠且成本效益高的訊息中介軟體。它不僅簡化了物聯網基礎設施的管理和擴充套件,還透過 TLS 支援確保了資料的安全傳輸,為專案打下了良好的基礎。


硬體整合


在專案中,我們使用 ESP32 微控制器和 DS18B20 水溫感測器來監測水溫,並將資料傳送到雲端。透過這種整合,我們實現了一個能夠實時監測並傳輸水溫資料的系統,高效且安全,同時為水冷系統提供了智慧化的監控。


  1. Wi-Fi 連線配置: 首先,ESP32 被配置為透過 Wi-Fi 連線到網際網路。這是透過在程式碼中設定 Wi-Fi 的 SSID 和密碼來實現的。
  2. 感測器初始化:我們透過 GPIO 25 將 DS18B20 水溫感測器連線到 ESP32,並在程式碼中初始化了感測器,設定了溫度讀取的解析度。
  3. 安全的 MQTT 通訊: 使用 MQTT 協議,透過 EMQX Cloud Serverless 來安全地傳輸資料。我們配置了 MQTT broker 的詳細資訊,並使用了 SSL/TLS 加密來保證資料傳輸的安全。
  4. 溫度資料讀取與傳送: 系統每分鐘讀取一次水溫,並將讀數格式化為 JSON 後,透過 MQTT 協議釋出到雲端。


使用 Python 和 Flask 開發後端服務


在這個專案中,我們使用 Python 和 Flask 構建了後端服務,以處理來自 ESP32 的溫度資料並展示在網頁上。整個後端的設計旨在高效處理資料、提供實時反饋,並易於維護。透過這種方式,我們構建了一個既能實時處理來自物聯網裝置的資料,又能提供使用者友好介面的後端服務。這不僅加強了專案的實用性,也為未來的擴充套件和最佳化提供了良好的基礎。


  1. 配置和 MQTT 整合:我們的 Flask 應用配置了 MQTT 代理設定,使用 flask_mqtt 庫實現與 MQTT 代理的直接通訊。當接收到來自 emqx/esp32/telemetry 主題的訊息時,後端會透過特定函式處理並儲存資料。
  2. 資料庫管理:使用 SQLite 資料庫儲存溫度資料,透過 Flask 的應用上下文管理資料庫連線,並確保資料的安全儲存和訪問。
  3. Web 介面和 API:後端提供了簡單的 Web 介面和一個 API 端點。主頁連結到一個顯示溫度圖表的頁面,而資料 API 端點返回最近一段時間的溫度資料。


系統部署


專案的部署階段至關重要,我們透過 Docker 和 的配置將 Flask 應用容器化並託管於 。此流程不僅實現了 Flask 應用的雲端部署,還確保了服務的快速、安全和高效提供。藉助 平臺,應用可以根據需求輕鬆擴充套件,享有穩定的執行環境。


  1. Docker 容器化:首先,我們編寫 Dockerfile,使用 Python 3.8 作為基礎映象,並將應用程式碼複製到容器的 /app 工作目錄。然後,透過 pip 安裝必要依賴,例如 Flask 和 Flask-MQTT,並暴露 8080 埠。容器啟動時會自動執行 CMD ["python", "app.py"] ,執行 Flask 應用。
  2. 配置:在 fly.toml 檔案中,我們定義了應用的執行方式,包括應用名稱、主部署區域(如新加坡),構建及掛載點設定。
    • 掛載點:設定掛載點儲存資料庫檔案,保證資料在容器重新部署時的永續性。
    • HTTP 服務配置:配置內部埠為 8080,強制使用 HTTPS,並設定啟動、停止策略和最小執行機器數量。
    • 健康檢查:透過定期訪問 /ping 路由,檢查應用執行狀態,保障服務穩定。
  3. 部署應用
    • 建立 應用:使用 flyctl apps create 命令,透過 的 CLI 工具建立新應用。
    • 部署應用:執行 flyctl deploy 命令,在 上自動構建 Docker 容器映象並部署。
    • 驗證部署:部署完成後,訪問 提供的應用 URL,檢驗 Flask 應用是否成功執行。


專案成果


實時溫度監控系統


利用 ESP32 微控制器和 DS18B20 水溫感測器的強大功能,我們設計並實現了一個能夠實時監控和調控水冷系統溫度的系統。現在,我的膝上型電腦不再因高溫而過熱,能夠穩定執行,而我也可以在任何時候,無論是在咖啡館的露臺上還是在家中的書桌前,享受平靜而舒適的工作環境。


穩定的資料傳輸


透過 EMQX Cloud Serverless,我們實現了從 ESP32 到雲端的資料傳輸的安全性和可靠性。EMQX Cloud Serverless 是一款高效能的 MQTT 代理,具有低延遲特性,能夠實時接收和處理溫度資料。這確保了系統能夠迅速做出反應,並保持高效執行。


功能豐富的 Web 介面


Python 和 Flask 的強大組合為我們提供了一個簡潔而直觀的 Web 介面,使使用者能夠輕鬆檢視實時溫度資料和歷史溫度曲線。這不僅提升了使用者體驗,也使得溫度監控更為直觀、更易於管理。



全球分散式雲端部署


藉助 的全球分散式服務,我們的 Flask 應用得以在雲端高效執行。這種部署方式不僅確保了應用的高可用性和穩定性,也極大地減少了資料傳輸的延遲,為使用者提供了近乎實時的體驗。



總結與展望


從最初遇到的筆記本過熱問題,到構建一個實時的水溫監控系統,這個專案充分展示了現代物聯網技術是如何幫我們解決生活中的實際問題。


透過整合 ESP32、DS18B20 水溫感測器、EMQX Cloud Serverless MQTT Broker、Python、Flask 以及 雲平臺的能力,我們成功地開發出一個既實用又高效的系統。這個系統不僅提高了我的工作效率,也為類似問題提供了一個創新的解決方案。


對這個專案感興趣或希望深入瞭解技術細節的讀者,可以在 GitHub 上的 中找到完整的程式碼和更多實現細節。這個資源庫不僅是學習和實踐的寶庫,還可能激發你對物聯網和雲端計算的新想法和創造力。

來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/69958136/viewspace-3008128/,如需轉載,請註明出處,否則將追究法律責任。

相關文章