利用 Python 監控樹莓派 CPU 溫度並將資料傳送到 ThingSpeak 平臺,可以實作遠端裝置狀態監控。此方案結合了樹莓派的硬體特性、Python 的程式設計能力以及 ThingSpeak 的資料記錄和視覺化功能。透過 vcgencmd 命令取得 CPU 溫度資訊,並使用 requests 函式庫將資料以 POST 請求方式傳送到 ThingSpeak API,實作資料上傳。設定更新週期,可根據需求調整資料採集頻率,滿足不同應用場景的監控需求。
使用Python和ThingSpeak傳送推文
問題描述
您想要自動從Raspberry Pi傳送推文,例如,當CPU溫度超過一定閾值時傳送警告。
解決方案
您可以使用ThingSpeak服務來傳送推文。ThingSpeak是一個IoT專用平臺,允許您建立通道來儲存和檢索資料,並提供了一系列動作,包括ThingTweet,可以將Twitter API包裝成一個簡單的Web服務。
步驟
- 建立ThingSpeak帳戶:前往ThingSpeak網站,建立一個新的帳戶。
- 啟用ThingTweet動作:登入您的ThingSpeak帳戶,然後選擇ThingTweet動作。您需要登入您的Twitter帳戶來啟用此動作。
- 取得API金鑰:在ThingSpeak網站上,取得您的API金鑰。
- 編寫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)
內容解密:
- 讀取 CPU 溫度:使用
dev.read()[5:-3]讀取 CPU 溫度,然後轉換為浮點數。 - 檢查 CPU 溫度:如果 CPU 溫度超過
MAX_TEMP,則送出通知。 - 送出通知:呼叫
send_notification函式,傳入目前的 CPU 溫度。 - 等待通知間隔:如果送出通知,則等待
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)
解釋
- 設定ThingSpeak: 首先,你需要在ThingSpeak平臺建立一個頻道,並獲得寫入API金鑰。將金鑰替換到程式碼中的
KEY變數中。 - 讀取CPU溫度:
get_cpu_temp函式使用vcgencmd命令讀取樹莓派的CPU溫度。該命令傳回一個字串,包含溫度值,我們提取並轉換為浮點數。 - 傳送資料:
send_data函式建構一個POST請求,將CPU溫度作為引數field1傳送到ThingSpeak。 - 迴圈更新: 指令碼使用無限迴圈,每隔
PERIOD秒讀取一次CPU溫度,並傳送到ThingSpeak。
實施步驟
- 安裝
requests函式庫:pip install requests - 建立ThingSpeak頻道並獲得寫入API金鑰
- 替換程式碼中的
KEY變數為你的API金鑰 - 執行指令碼:
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 開發者的核心技能。