使用 Firebase 將 Raspberry Pi 感測器數據即時上傳到雲端

在物聯網(IoT)應用中,感測器數據的即時上傳和多設備同步已成為現代監控系統中的關鍵需求,這不僅能夠實現數據的即時分析與反饋,還能確保各類設備和應用能夠隨時抓取最新數據。

在前一篇文章中,我們已經探討了如何使用 Raspberry Pi 收集來自各種感測器的數據。本篇文章將進一步介紹如何利用 Firebase Realtime Database,將 Raspberry Pi 收集到的 Grove - Sound Sensor 的聲音數據即時上傳到雲端,並實現多設備的數據同步和即時監控。通過這種方式,無論是使用手機、平板還是電腦,所有裝置都能在第一時間取得並顯示最新的聲音數據,滿足實時監控和分析的需求。

為什麼選擇 Firebase 進行數據上傳

Firebase 的優勢:

  • 即時同步:Firebase Realtime Database 支持多客戶端之間的即時數據同步,確保所有設備能夠同時取得到最新的數據,這對於需要即時反應的應用場景來說尤為重要。
  • 簡化開發:Firebase 提供了全面且易於使用的 SDK,使開發者能夠快速將數據庫功能整合到應用中,無需自行管理伺服器基礎設施,極大地縮短了開發時間。
  • 可擴展性:Firebase 具有很高的可擴展性,能夠隨著數據量的增長輕鬆應對,無論是小型應用還是大型系統都能流暢運行。

應用場景:

  • 健康監測:在健康監測系統中,實時收集和分析數據是關鍵,例如心率、血壓等生理數據需要即時更新,以便及時做出醫療決策。Firebase 的即時同步功能可以確保這些數據在多設備之間保持一致,並即時顯示給使用者或醫療專業人員。
  • 環境監測:在環境監測應用中,例如空氣質量、噪音水平、水質監測等,實時數據的收集和展示能幫助及時發現潛在問題,並做出快速反應。Firebase 可以確保這些數據在不同設備上的即時可見性,從而提供準確和可靠的監控解決方案。
  • 智能家居:智能家居應用需要不同設備之間的高度協同與即時數據更新。通過 Firebase,家中的各種智能設備可以實時同步狀態,無論是燈光控制、溫度調節,還是安防系統,都能保持高度的一致性,提升用戶體驗。

設置 Firebase Realtime Database

建立 Firebase 專案:

  1. 進入 Firebase 控制台(https://console.firebase.google.com)。
  2. 點擊「新增專案」,建立一個新的 Firebase 專案,並按照提示完成設置。
  3. 專案建立完成後,進入專案儀表板,準備進行進一步的配置。

配置 Realtime Database:

  1. 在 Firebase 專案儀表板中,左側選單點選「Realtime Database」。
  2. 點擊「建立資料庫」,選擇您所在的地理位置來設定數據庫的位置。選擇一個離您或您的用戶較近的地區,以減少延遲並提高數據傳輸速度。
  3. 數據庫建立後,您可以選擇進入測試模式或鎖定模式。在當前開發階段,建議使用測試模式,以便能夠輕鬆進行數據讀寫操作。

設置數據庫安全規則:

Firebase Realtime Database 的安全規則是一套基於 JSON 的規則語言,用於定義誰可以讀取和寫入數據。在測試階段,我們通常會放寬這些規則,以便能夠快速進行開發和測試。

在測試模式下,您可以設置臨時的讀寫訪問權限。例如,您可以允許在一段特定時間內的所有讀寫訪問:

json複製程式碼
{
  "rules": {
    ".read": "now < 1672444800000",  // 允許讀取至指定的 Unix 時間戳
    ".write": "now < 1672444800000"  // 允許寫入至指定的 Unix 時間戳
  }
}

注意事項:

目前的安全規則配置僅適用於測試階段,目的是為了方便開發者進行功能測試,在這個階段,數據庫的讀寫權限較為寬鬆,這樣可以加速開發過程。當應用進入生產階段時,這種寬鬆的設定可能會帶來安全風險,因此在正式部署應用之前,必須對安全規則進行嚴格的審查和配置,以確保數據的安全性。

正式部署時的考量

當應用即將進入生產環境時,應根據實際需求對安全規則進行調整,例如根據用戶身份驗證、數據路徑限制以及操作類型的不同,您可以設計出更為嚴格的安全策略,以保護數據的完整性和機密性。這樣的配置不僅可以防止未經授權的訪問,還能確保系統的穩定運行。

在 Raspberry Pi 上整合 Firebase SDK

安裝 Firebase SDK:

  1. 首先確保您的 Raspberry Pi 已安裝 python 3 和 pip3。若未安裝,請使用以下命令進行安裝:

    sudo apt-get update
    sudo apt-get install python3-pip
  2. 使用 pip3 安裝 Firebase 的 Python SDK firebase-admin。這個 SDK 是與 Firebase 進行交互的主要工具,支持各種 Firebase 服務,包括 Realtime Database:

    pip3 install firebase-admin
  3. 接下來需要從 Firebase 專案設定裡取得服務帳戶憑證 (JSON 檔案),這是連接 Firebase Realtime Database 所必需的。

    具體步驟如下:

    • 登入 Firebase 控制台並選擇您的專案。
    • 在專案設定頁面中,切換到「服務帳戶」選項。
    • 點擊「產生新的私密金鑰」,系統會自動下載一個 JSON 檔案,這個檔案就是您的服務帳戶憑證

    請注意,這個 JSON 文件包含敏感的認證信息,應妥善保管並避免在公共環境中洩露。

初始化 Firebase:

  1. 在 python script 中,您需要先初始化 Firebase 並配置與 Realtime Database 的連接 :

    import firebase_admin
    from firebase_admin import credentials, db
    
    # 載入 firebase 服務帳戶憑證
    cred = credentials.Certificate("./serviceAccountKey.json")
    
    # 初始化 firebase 應用並指定資料庫 URL
    firebase_admin.initialize_app(cred, {
        'databaseURL': 'https://your-database-name.firebaseio.com/'
    })

    在這段程式中:

    • credentials.Certificate("./serviceAccountKey.json") 用於載入您剛才下載的服務帳戶憑證,確認路徑和檔案名稱正確無誤。
    • firebase_admin.initialize_app 用於初始化 Firebase 應用並設定與 Realtime Database 的連接,'databaseURL' 參數需要替換為您 Firebase 專案的實際資料庫 URL。
  2. 初始化後就可以利用 Firebase 提供的功能來進行實時數據操作,將 Raspberry Pi 收集到的感測器數據即時上傳到 Firebase,並隨時從數據庫中查詢或更新這些數據。

考量與最佳實踐

  • 安全性:在開發過程中,您可以直接使用服務帳戶憑證進行測試,但在生產環境中,應確保這些憑證的安全,避免將檔案直接包含在版本控制系統中,並採取措施來防止密鑰洩露。
  • 錯誤處理:在實際應用中,網絡問題或 Firebase 服務的臨時中斷可能會影響數據的即時傳輸,因此需考慮在您的應用中實施錯誤處理和重試機制,以提高系統的穩定性和可靠性。
  • 性能考量:隨著數據量的增加,Firebase 的性能表現可能會受到影響,請根據應用需求,設計合理的數據結構和存儲策略,以優化數據讀寫的效率。

將感測器數據上傳到 Firebase

讀取聲音數據並上傳:

在上一篇文章中,我們介紹了如何將感測器數據記錄到本地端的 CSV 文件中。隨著應用需求的增加,將數據即時上傳到雲端可以帶來更多的靈活性和便捷性,在本篇文章將展示如何替換本地的數據存儲方式,改用 Firebase Realtime Database 將 Grove - Sound Sensor 收集到的聲音數據即時上傳到雲端。

  1. 建立一個 python script,將聲音數據即時上傳到 Firebase,而不再依賴本地存儲,這樣可以確保數據能夠在任何時刻被存取,並能夠在多設備間同步顯示:

    import time
    import firebase_admin
    from firebase_admin import credentials, db
    from grove.adc import ADC
    
    # 初始化 Grove ADC
    adc = ADC()
    
    # 初始化 Firebase
    cred = credentials.Certificate("./serviceAccountKey.json")
    firebase_admin.initialize_app(cred, {
        'databaseURL': 'https://your-database-name.firebaseio.com/'
    })
    
    try:
        while True:
            # 讀取聲音數據
            sound_level = adc.read(0)
            timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
    
            # 上傳數據到 Firebase
            ref = db.reference('sound_level')
            ref.push({
                'timestamp': timestamp,
                'level': sound_level
            })
    
            # 輸出顯示到終端
            print(f"Time: {timestamp}, Sound Level: {sound_level}")
    
            # 暫停一秒
            time.sleep(1)
    
    except KeyboardInterrupt:
        print("停止")
  2. 執行這段 python script 後,檢查 Firebase Realtime Database 控制台,確認聲音數據是否成功上傳並顯示在數據庫中。

數據驗證:

  • 在 Firebase 控制台中,切換至「Realtime Database」頁面,檢查 sound_level 節點,確認最新的聲音數據是否已成功上傳並存儲在雲端。

通過這樣的改進,將不再依賴於本地端進行數據存儲,而是將數據存儲在 Firebase Realtime Database 中,這樣無論您在哪裡,無論使用哪種設備,都可以即時訪問和監控這些數據,從而大大提高了應用的靈活性和數據的可用性,在未來的應用中,這種雲端存儲的方式將會變得越來越重要,尤其是在需要多設備同步和實時數據訪問的場景下。

實現多客戶端數據同步

在應用中接收數據:

  1. 隨著數據上傳到 Firebase Realtime Database,您可以在多個應用中輕鬆實現數據的即時同步。無論是 Web 應用還是手機應用,通過 Firebase 提供的 SDK,這些數據能夠自動同步到所有連接到相同數據庫的客戶端,確保各設備之間數據的一致性和同步性。
  2. Firebase Realtime Database 的即時數據推送功能非常強大,每當數據庫中的數據發生變更時,所有連接的客戶端都能夠立即接收到更新,這意味著用戶不需要手動刷新應用就可以看到最新的數據,從而提升了整體用戶體驗。
  3. 當 Raspberry Pi 將新的聲音數據上傳到 Firebase 後,所有連接到該數據庫的應用程序,包括 Web 和手機應用,都能即時接收到並顯示這些更新的數據,這種即時同步能力對於需要快速反應的應用場景至關重要。

即時數據展示:

  • Firebase 的即時同步功能不僅保證了數據在不同設備上的一致性,還能實現數據的即時展示,用戶可以在 Web 應用或手機應用中,通過直觀的界面,隨時監控來自 Raspberry Pi 的最新數據,而這些數據會隨著時間推移自動更新。
  • 即時展示功能能夠大幅提升系統的實時性和可靠性,讓用戶在任何設備上都能獲取和查看最新數據,從而有效支持數據驅動的決策。

通過 Firebase Realtime Database 的這些功能,您可以確保應用中的所有用戶在任何設備上都能夠即時訪問和查看最新的數據,從而提供更加一致和可靠的用戶體驗。

數據上雲的全方位應用

在這篇文章中,我們探討了如何利用 Firebase 將 Raspberry Pi 5 Model B 和 Grove - Sound Sensor 收集到的聲音數據即時上傳到雲端,通過替換本地端的數據存儲方式,使用 Firebase Realtime Database,不僅實現了數據的雲端存儲,還讓多客戶端之間的數據同步變得更加便捷和高效。

Firebase Realtime Database 的即時同步功能大大提升了應用的靈活性和擴展性,無論是用於監控、分析還是實時反應,它都能夠確保數據在各設備之間保持一致性,並且讓用戶能夠隨時隨地訪問最新的數據。

除了實現數據的同步更新,Firebase 的可靠性和擴展性使開發者能夠輕鬆應對不同規模的數據流量,這一點對於需要處理大量感測器數據的物聯網應用尤其重要。透過 Firebase 的可擴展架構,開發者可以根據實際需求動態調整數據存儲和傳輸的負載,這不僅提高了系統的穩定性,也為未來的功能擴展提供了良好的基礎。

在這個解決方案中,Raspberry Pi 5 Model B 充當了數據收集端,通過連接 Grove - Sound Sensor 實時監測環境中的聲音變化,這些數據會被即時處理並上傳至 Firebase,這使得無論是在本地網絡還是遠程端,開發者和用戶都能快速取得和分析感測器的數據,數據不再被局限於單一設備或本地存儲,從而實現了跨設備、跨平台的數據共享。

接下來可以進一步探索如何在 Web 和手機應用中展示這些即時數據,確保所有用戶無論在哪種設備上都能取得和查看最新的數據更新,設計和構建一個直觀的用戶介面,將感測器收集到的數據以視覺化的形式呈現,讓用戶能夠方便地監控和理解數據趨勢,從而提升整體的應用體驗。

在下一篇文章中,我們將專注於如何在 Web 和手機應用中實現這些即時數據的展示,從而讓應用更加直觀和具體。

Next Post