news 2026/4/28 16:21:50

树莓派/香橙派CPU温度监控全攻略:从命令行到图形化桌面小部件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派/香橙派CPU温度监控全攻略:从命令行到图形化桌面小部件

树莓派与香橙派CPU温度监控实战:从命令行到可视化告警系统

在单板计算机的世界里,树莓派和香橙派凭借其出色的性价比和丰富的扩展性,已经成为创客、开发者和极客们的首选工具。无论是作为家庭媒体中心、自动化控制节点还是轻量级服务器,这些小巧的设备往往需要长时间稳定运行。而CPU温度作为系统健康的关键指标,直接影响着设备的性能和寿命。本文将带你从基础命令开始,逐步构建一个完整的温度监控体系,最终实现可视化桌面组件和智能告警功能。

1. 基础温度监控:命令行与脚本

1.1 原生系统命令解析

树莓派和香橙派虽然基于不同的硬件架构,但都遵循Linux系统的标准温度监控接口。最直接的方式是读取系统提供的温度文件:

cat /sys/class/thermal/thermal_zone0/temp

这个命令会返回一个以毫摄氏度为单位的整数值。例如输出51234表示当前温度为51.234°C。为了获得更友好的显示,可以使用awk进行格式化:

awk '{printf "当前CPU温度:%.2f°C\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp

树莓派用户还可以使用专有的vcgencmd工具,它能提供更精确的温度读数:

vcgencmd measure_temp

如果提示命令不存在,需要先安装相关软件包:

sudo apt install libraspberrypi-bin

1.2 实时监控脚本编写

要实现动态刷新显示,可以结合watch命令:

watch -n 3 'echo CPU温度:$(vcgencmd measure_temp | cut -c6-11)'

这个命令会每3秒更新一次温度显示。对于更复杂的监控需求,可以编写自定义脚本:

#!/bin/bash while true; do clear temp=$(cat /sys/class/thermal/thermal_zone0/temp) load=$(cat /proc/loadavg | awk '{print $1}') echo "CPU温度:$(echo "scale=2; $temp/1000" | bc)°C" echo "系统负载:$load" sleep 2 done

这个增强版脚本不仅显示温度,还同时监控系统负载,为性能分析提供更多上下文信息。

2. 高级监控方案:后台服务与自动化

2.1 创建系统守护进程

要让监控脚本在后台持续运行并在开机时自动启动,我们需要将其转换为系统服务。创建一个新的服务文件:

sudo nano /etc/systemd/system/cpu-monitor.service

添加以下内容:

[Unit] Description=CPU Temperature Monitor After=network.target [Service] ExecStart=/usr/local/bin/cpu-monitor.sh Restart=always User=pi [Install] WantedBy=multi-user.target

然后将之前的脚本保存到/usr/local/bin/cpu-monitor.sh,并赋予执行权限:

sudo chmod +x /usr/local/bin/cpu-monitor.sh

启用并启动服务:

sudo systemctl enable cpu-monitor.service sudo systemctl start cpu-monitor.service

2.2 温度日志与历史分析

长期监控需要记录历史数据以便分析趋势。使用以下脚本将温度数据记录到CSV文件:

#!/bin/bash LOG_FILE="/var/log/cpu_temp.log" while true; do timestamp=$(date "+%Y-%m-%d %H:%M:%S") temp=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000}') echo "$timestamp,$temp" >> $LOG_FILE sleep 300 done

这个脚本每5分钟记录一次温度数据。可以使用gnuplot等工具生成可视化图表:

#!/usr/bin/gnuplot -persist set datafile separator "," set xdata time set timefmt "%Y-%m-%d %H:%M:%S" set format x "%m/%d\n%H:%M" set ylabel "Temperature (°C)" set title "CPU Temperature History" plot "/var/log/cpu_temp.log" using 1:2 with lines title "CPU Temp"

3. 可视化方案:桌面小部件配置

3.1 Conky实时监控面板

Conky是一个轻量级的系统监控工具,可以创建高度可定制的桌面小部件。安装Conky:

sudo apt install conky

创建配置文件~/.conkyrc

conky.config = { background = true, update_interval = 2, cpu_avg_samples = 2, net_avg_samples = 2, double_buffer = true, no_buffers = true, text_buffer_size = 2048, gap_x = 20, gap_y = 40, alignment = 'top_right', own_window = true, own_window_type = 'normal', own_window_transparent = true, own_window_hints = 'undecorated,below,sticky,skip_taskbar,skip_pager', border_inner_margin = 5, border_outer_margin = 0, draw_shades = false, draw_outline = false, draw_borders = false, use_xft = true, font = 'DejaVu Sans:size=10', xftalpha = 0.8, uppercase = false, }; conky.text = [[ ${color white}${font DejaVu Sans:bold:size=12}SYSTEM MONITOR${font}${color} ${hr 2} ${color lightgrey}CPU Temp: ${alignr}${execpi 5 vcgencmd measure_temp | cut -c6-11}°C ${color lightgrey}CPU Usage: ${alignr}${cpu}% ${color lightgrey}RAM Usage: ${alignr}${memperc}% ${color lightgrey}Disk Usage: ${alignr}${fs_used_perc /}% ${color lightgrey}Uptime: ${alignr}${uptime_short} ]]

启动Conky:

conky -d

3.2 GNOME Shell扩展

对于使用GNOME桌面的用户,可以安装gnome-shell-extension-system-monitor

sudo apt install gnome-shell-extension-system-monitor

然后在GNOME Tweaks工具中启用"System Monitor"扩展。要显示CPU温度,需要编辑扩展配置:

dconf write /org/gnome/shell/extensions/system-monitor/cpu-temperature true

4. 智能告警系统实现

4.1 温度阈值检测

创建一个Python脚本来检测温度是否超过阈值:

#!/usr/bin/env python3 import os import smtplib from email.mime.text import MIMEText THRESHOLD = 70 # 温度阈值(°C) LOG_FILE = "/var/log/cpu_temp_alert.log" def get_cpu_temp(): with open("/sys/class/thermal/thermal_zone0/temp", "r") as f: temp = int(f.read().strip()) / 1000 return temp def log_alert(temp): with open(LOG_FILE, "a") as f: f.write(f"Alert! CPU temperature reached {temp}°C\n") def send_email(temp): msg = MIMEText(f"警告:CPU温度已达到 {temp}°C") msg["Subject"] = "CPU温度警报" msg["From"] = "alert@example.com" msg["To"] = "admin@example.com" with smtplib.SMTP("smtp.example.com", 587) as server: server.login("user", "password") server.send_message(msg) if __name__ == "__main__": temp = get_cpu_temp() if temp > THRESHOLD: log_alert(temp) send_email(temp)

4.2 系统通知集成

对于桌面用户,可以使用notify-send命令创建可视化通知:

#!/bin/bash THRESHOLD=70 TEMP=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000}') if (( $(echo "$TEMP > $THRESHOLD" | bc -l) )); then notify-send -u critical "温度警报" "CPU温度已达到 ${TEMP}°C" fi

将这个脚本加入cron定时任务,每分钟检查一次:

(crontab -l ; echo "* * * * * /path/to/temp_check.sh") | crontab -

4.3 自动化降温措施

当温度持续过高时,可以自动采取措施降低CPU负载:

#!/usr/bin/env python3 import time import subprocess from datetime import datetime MAX_TEMP = 75 COOLDOWN_TEMP = 65 CHECK_INTERVAL = 30 # 秒 def get_temp(): with open("/sys/class/thermal/thermal_zone0/temp", "r") as f: return int(f.read().strip()) / 1000 def throttle_cpu(enable): cmd = "vcgencmd get_throttled" if enable: cmd = "echo 'performance' | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor" subprocess.run(cmd, shell=True) while True: temp = get_temp() now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") if temp > MAX_TEMP: print(f"{now} - 温度过高: {temp}°C, 启用节流") throttle_cpu(True) elif temp < COOLDOWN_TEMP: print(f"{now} - 温度正常: {temp}°C, 解除节流") throttle_cpu(False) time.sleep(CHECK_INTERVAL)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 16:01:28

告别蓝牙通话无声!手把手教你调试Android SCO连接(附高通平台实战案例)

Android蓝牙SCO通话问题深度排查指南 蓝牙通话无声是Android开发中常见却又令人头疼的问题。作为一名长期奋战在音频调试一线的工程师&#xff0c;我深知这类问题往往涉及应用层、Framework层和HAL层的复杂交互。本文将基于高通平台实战经验&#xff0c;带你系统掌握SCO连接问题…

作者头像 李华
网站建设 2026/4/28 15:59:47

Zynq MPSoC实战:用Vitis自带的DDR测试模板,5分钟搞定PL端DDR性能摸底

Zynq MPSoC PL端DDR性能快速验证指南&#xff1a;5分钟完成基准测试 当你拿到一块全新的Zynq MPSoC开发板时&#xff0c;最迫切的需求之一就是确认PL端DDR存储器的基本性能。传统方法需要手动配置DDR控制器IP、设计AXI接口、编写测试程序&#xff0c;整个过程可能需要数小时。而…

作者头像 李华