利用 Python 監控樹莓派 CPU 溫度並將資料傳送到 ThingSpeak 平臺,可以實作遠端裝置狀態監控。此方案結合了樹莓派的硬體特性、Python 的程式設計能力以及 ThingSpeak 的資料記錄和視覺化功能。透過 vcgencmd 命令取得 CPU 溫度資訊,並使用 requests 函式庫將資料以 POST 請求方式傳送到 ThingSpeak API,實作資料上傳。設定更新週期,可根據需求調整資料採集頻率,滿足不同應用場景的監控需求。

使用Python和ThingSpeak傳送推文

問題描述

您想要自動從Raspberry Pi傳送推文,例如,當CPU溫度超過一定閾值時傳送警告。

解決方案

您可以使用ThingSpeak服務來傳送推文。ThingSpeak是一個IoT專用平臺,允許您建立通道來儲存和檢索資料,並提供了一系列動作,包括ThingTweet,可以將Twitter API包裝成一個簡單的Web服務。

步驟

  1. 建立ThingSpeak帳戶:前往ThingSpeak網站,建立一個新的帳戶。
  2. 啟用ThingTweet動作:登入您的ThingSpeak帳戶,然後選擇ThingTweet動作。您需要登入您的Twitter帳戶來啟用此動作。
  3. 取得API金鑰:在ThingSpeak網站上,取得您的API金鑰。
  4. 編寫Python程式:使用以下Python程式來傳送推文:
import time
import os
import requests

MAX_TEMP = 37.0  # 最高溫度閾值
MIN_T_BETWEEN_WARNINGS = 60  # 最小警告間隔(分鐘)

BASE_URL = 'https://api.thingspeak.com/apps/thingtweet/1/statuses/update'
KEY = 'your_key_here'  # 替換為您的API金鑰

def send_notification(temp):
    status = 'Raspberry Pi CPU溫度過高:' + str(temp)
    data = {'api_key': KEY, 'status': status}
    response = requests.post(BASE_URL, json=data)
    print(response.status_code)

def cpu_temp():
    dev = os.popen('/opt/vc/bin/vcgencmd measure_temp')
    temp = float(dev.read().split('=')[1].split('\'')[0])
    return temp

while True:
    temp = cpu_temp()
    if temp > MAX_TEMP:
        send_notification(temp)
    time.sleep(MIN_T_BETWEEN_WARNINGS * 60)

圖表解釋

以下是程式流程圖:

  flowchart TD
    A[開始] --> B[檢查CPU溫度]
    B --> C[溫度過高]
    C --> D[傳送推文]
    D --> E[等待]
    E --> B

圖表翻譯

此圖表顯示了程式的流程。首先,程式檢查CPU溫度,如果溫度過高,則傳送推文。然後,程式等待一段時間後再次檢查CPU溫度。

內容解密

此程式使用了ThingSpeak的ThingTweet動作來傳送推文。ThingTweet提供了一個簡單的Web服務來包裝Twitter API,無需註冊Twitter應用程式。程式首先檢查CPU溫度,如果溫度過高,則傳送推文。然後,程式等待一段時間後再次檢查CPU溫度。

CPU 溫度監控與通知

程式碼

import time

# 定義最大溫度閾值
MAX_TEMP = 80.0

# 定義最小通知間隔時間(分鐘)
MIN_T_BETWEEN_WARNINGS = 30

def cpu_temp():
    # 讀取 CPU 溫度(範例程式碼)
    cpu_temp = dev.read()[5:-3]
    return float(cpu_temp)

while True:
    # 讀取 CPU 溫度
    temp = cpu_temp()
    
    # 列印 CPU 溫度
    print("CPU Temp (C): " + str(temp))
    
    # 檢查 CPU 溫度是否超過閾值
    if temp > MAX_TEMP:
        # 送出通知
        send_notification(temp)
        print("No more notifications for: " + str(MIN_T_BETWEEN_WARNINGS) + " mins")
        
        # 等待最小通知間隔時間
        time.sleep(MIN_T_BETWEEN_WARNINGS * 60)
    
    # 等待 1 秒後繼續監控
    time.sleep(1)

內容解密:

  1. 讀取 CPU 溫度:使用 dev.read()[5:-3] 讀取 CPU 溫度,然後轉換為浮點數。
  2. 檢查 CPU 溫度:如果 CPU 溫度超過 MAX_TEMP,則送出通知。
  3. 送出通知:呼叫 send_notification 函式,傳入目前的 CPU 溫度。
  4. 等待通知間隔:如果送出通知,則等待 MIN_T_BETWEEN_WARNINGS 分鐘後再繼續監控。

圖表翻譯:

  flowchart TD
    A[開始] --> B[讀取 CPU 溫度]
    B --> C[檢查 CPU 溫度]
    C -->|超過閾值| D[送出通知]
    C -->|未超過閾值| E[等待 1 秒]
    D --> F[等待通知間隔]
    E --> A

圖表翻譯:

此圖表展示了 CPU 溫度監控的流程。首先,讀取 CPU 溫度,然後檢查是否超過閾值。如果超過閾值,則送出通知,並等待通知間隔。否則,等待 1 秒後繼續監控。

技術選型分析:

  • 使用 Python 作為程式語言,因其簡潔易學且有豐富的函式庫函式。
  • 使用 time 函式庫來實作等待功能。
  • 使用 dev.read() 函式來讀取 CPU 溫度,假設 dev 是一個已經初始化的裝置物件。

  • 可以增加更多的通知方式,例如郵件或簡訊。
  • 可以使用更精確的溫度感測器來提高監控的準確性。
  • 可以實作遠端監控和控制,讓使用者可以從遠端位置監控和控制 CPU 溫度。

使用Raspberry Pi和RGB LED參與CheerLights專案

CheerLights是一個網路服務,當任何人傳送一條包含顏色名稱的推文到@cheerlights時,該服務會記錄該顏色為CheerLights顏色。全世界許多人都有CheerLights專案,這些專案使用網路服務請求最後的顏色並設定其照明以匹配該顏色。因此,當任何人傳送推文時,每個人的燈都會改變顏色。

解決方案

使用Raspberry Squid RGB LED連線到您的Raspberry Pi,並執行名為ch_16_cheerlights.py的測試程式。

from gpiozero import RGBLED
from colorzero import Color
import time, requests

led = RGBLED(18, 23, 24)
cheerlights_url = 'https://api.thingspeak.com/channels/1417/field/1/last.txt'

while True:
    try:
        cheerlights = requests.get(cheerlights_url)
        c = Color(cheerlights.text)
        led.color = c
        print(c)
    except Exception as e:
        print(e)
    time.sleep(2)

當您執行程式時,LED應該立即設定為一個顏色。它可能會在一段時間後改變顏色,當有人傳送推文時;如果它不改變,嘗試傳送一條訊息,例如“@cheerlights red”,然後LED和世界其他地方的LED的顏色應該會改變。CheerLights的有效顏色名稱為紅、綠、藍、青、白、老蕾絲、紫、洋紅、黃、橙和粉。

討論

程式碼只向ThingSpeak傳送網路請求,ThingSpeak傳回一個字串的顏色作為6位十六進位制數字。這個十六進位制數字然後用來設定LED顏色。 try/except程式碼用於確保程式不會在暫時網路中斷時當機。

參考

CheerLights使用ThingSpeak儲存最後的顏色在一個頻道中。在16.7食譜中,使用一個頻道來記錄感測器資料。 如果您沒有Squid,您可以使用麵包板上的RGB LED(參見10.10食譜),甚至可以改編14.6食譜來控制整個LED條帶。

將感測器資料傳送到ThingSpeak

問題

您想要記錄感測器資料到ThingSpeak,並檢視隨時間的資料圖表。

解決方案

登入ThingSpeak,從頻道下拉選單中選擇我的頻道。接下來,建立一個新的頻道,如圖16-14所示。 您可以將表格的其餘部分留空。當您完成編輯後,單擊頁面底部的儲存頻道按鈕。單擊API金鑰標籤以查詢可用的網路請求摘要,以及您剛剛建立的頻道的金鑰(圖16-15)。 您需要複製您的API金鑰(寫入金鑰)作為以下程式中的KEY值。 要將資料傳送到頻道,您必須傳送網路請求。Python程式如下:

import time, os
#... (其他程式碼)

請注意,這裡只提供了一部分程式碼,您需要根據您的具體需求和ThingSpeak API檔案完成程式碼。

監控樹莓派CPU溫度並將資料傳送到ThingSpeak

背景

在物聯網(IoT)應用中,監控裝置的執行狀態至關重要。樹莓派是一種流行的單板電腦,廣泛用於IoT專案中。監控樹莓派的CPU溫度可以幫助我們瞭解裝置的執行狀態,預防過熱等問題。在本文中,我們將介紹如何使用Python指令碼監控樹莓派的CPU溫度,並將資料傳送到ThingSpeak平臺進行實時監控。

硬體需求

  • 樹莓派(任何版本)
  • 網際網路連線

軟體需求

  • Python 3.x
  • requests函式庫

程式碼實作

import requests
import os
import time

# ThingSpeak設定
BASE_URL = 'https://api.thingspeak.com/update'
KEY = 'your_key_here'  # 替換為你的ThingSpeak寫入API金鑰
PERIOD = 60  # 更新週期(秒)

def get_cpu_temp():
    """讀取樹莓派CPU溫度"""
    dev = os.popen('/opt/vc/bin/vcgencmd measure_temp')
    cpu_temp = dev.read()[5:-3]
    return float(cpu_temp)

def send_data(temp):
    """傳送資料到ThingSpeak"""
    data = {'api_key': KEY, 'field1': temp}
    response = requests.post(BASE_URL, json=data)
    return response.status_code

while True:
    temp = get_cpu_temp()
    print(f"CPU溫度(°C):{temp}")
    send_data(temp)
    time.sleep(PERIOD)

解釋

  1. 設定ThingSpeak: 首先,你需要在ThingSpeak平臺建立一個頻道,並獲得寫入API金鑰。將金鑰替換到程式碼中的KEY變數中。
  2. 讀取CPU溫度: get_cpu_temp函式使用vcgencmd命令讀取樹莓派的CPU溫度。該命令傳回一個字串,包含溫度值,我們提取並轉換為浮點數。
  3. 傳送資料: send_data函式建構一個POST請求,將CPU溫度作為引數field1傳送到ThingSpeak。
  4. 迴圈更新: 指令碼使用無限迴圈,每隔PERIOD秒讀取一次CPU溫度,並傳送到ThingSpeak。

實施步驟

  1. 安裝requests函式庫:pip install requests
  2. 建立ThingSpeak頻道並獲得寫入API金鑰
  3. 替換程式碼中的KEY變數為你的API金鑰
  4. 執行指令碼:python script_name.py

結果

在ThingSpeak私人檢視頁面上,你應該能看到一個圖表,展示了樹莓派CPU溫度的實時資料。該圖表每隔一分鐘更新一次,以反映最新的溫度讀數。

相關資源

利用 Python 結合 ThingSpeak 或其他 IoT 平臺實作資料採集、監控和自動化控制,已成為物聯網應用開發的主流趨勢。本文涵蓋了多個應用場景,從傳送推文到控制 RGB LED,再到監控 CPU 溫度並上傳資料,展現了 Python 在 IoT 領域的靈活性和強大功能。透過分析這些案例,我們可以發現,利用現有的雲端服務和 API,能大幅降低開發門檻,讓開發者更專注於應用邏輯的實作。然而,安全性考量和資料隱私保護仍是這類別應用不可忽視的挑戰。

ThingSpeak 作為一個易於使用的 IoT 平臺,提供了資料視覺化、分析和動作觸發等功能,簡化了開發流程。但其免費版功能和資料吞吐量有限,對於商業應用或大規模佈署,需要評估其付費方案或其他替代方案,例如 MQTT Broker 或自建平臺。同時,程式碼中直接使用 API Key 也存在安全風險,建議採用更安全的認證機制。

展望未來,邊緣計算和 AI 技術的發展將進一步提升 IoT 應用的智慧化程度。例如,可以結合機器學習模型,對採集的資料進行實時分析,實作預測性維護或自動化決策。此外,低功耗廣域網路 (LPWAN) 技術的普及,將推動更多低功耗、長距離的 IoT 應用場景落地。對於開發者而言,持續學習新的技術和平臺,才能在快速發展的 IoT 領域保持競爭力。玄貓認為,掌握 Python 等通用程式語言,並熟悉主流 IoT 平臺和通訊協定,將是未來 IoT 開發者的核心技能。