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

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


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

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

物聯網智能液冷散熱系統

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

技術選型

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

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

項目實施

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

Serverless MQTT Broker 配置

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

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

  1. 創建 Serverless MQTT Broker:
    • 登錄到 EMQX Cloud 控制檯,並導航至 "Create Deployment" 頁面。
    • 選擇 "Serverless" 部署類型,並按需配置部署。例如區域、SpendLimit 等。
    • 完成配置後,點擊 "Create" 按鈕,系統會自動創建 Serverless MQTT Broker。
  2. 添加認證信息:
    • 在 MQTT Broker 創建成功後,進行認證信息的配置,確保只有授權的客戶端可以連接到 Broker。
  3. 使用 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 和 Fly.io 的配置將 Flask 應用容器化並託管於 Fly.io。這一流程不僅實現了 Flask 應用的雲端部署,還確保了服務的快速、安全和高效提供。藉助 Fly.io 平臺,應用可以根據需求輕鬆擴展,享有穩定的運行環境。

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

項目成果

實時溫度監控系統

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

穩定的數據傳輸

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

功能豐富的 Web 界面

Python 和 Flask 的強大組合爲我們提供了一個簡潔而直觀的 Web 界面,使用戶能夠輕鬆查看實時溫度數據和歷史溫度曲線。這不僅提升了用戶體驗,也使得溫度監控更爲直觀、更易於管理。

功能豐富的 Web 界面

全球分佈式雲端部署

藉助 Fly.io 的全球分佈式服務,我們的 Flask 應用得以在雲端高效運行。這種部署方式不僅確保了應用的高可用性和穩定性,也極大地減少了數據傳輸的延遲,爲用戶提供了近乎實時的體驗。

截圖

總結與展望

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章