1. 项目概述为什么需要硬件负载指示器在玩树莓派的这些年里我遇到一个挺普遍但又容易被忽视的问题当你把树莓派当作一个无头服务器Headless Server来用比如做家庭媒体中心、下载机或者物联网网关时你怎么知道它这会儿是闲得发慌还是已经忙得“冒烟”了是的你可以SSH连上去敲个top或者htop看看但这毕竟不够直观也麻烦。更重要的是如果你写个Python脚本去频繁查询负载这个监控脚本本身就会成为新的“负载”这不就成了“为了看自己有多累先让自己跑个马拉松”的悖论吗这个项目就是为了解决这个痛点而生的。它的核心思想很简单把CPU负载的指示功能从软件层面“卸载”Offload到外部硬件电路上。这样一来树莓派只需要每隔几秒比如5秒运行一个极其轻量的Python脚本读取一次系统负载然后通过两个GPIO引脚输出一个2位的二进制编码00 01 10 11。剩下的“翻译”和“显示”工作全部交给一块由经典数字芯片搭建的小电路板来完成。这块板子会根据接收到的编码让LED以四种不同的频率闪烁从而直观地告诉你树莓派当前的负载状态是“低”、“轻”、“中”还是“高”。这么做有几个实实在在的好处极低的CPU开销监控脚本的运行间隔可以设得比较长5-10秒且逻辑极其简单几乎不占用系统资源。实时直观的视觉反馈无需登录终端瞥一眼LED的闪烁节奏就能对系统状态心中有数。硬件学习的绝佳实践项目涉及了数字电路里几个非常经典的芯片和概念如解码器、模拟开关、定时器是连接软件Python/树莓派和硬件数字电路的完美桥梁。高度的可定制性负载阈值、LED闪烁模式、甚至显示方式比如从闪烁改为流水灯都可以根据你的需求和手头元件灵活调整。接下来我将从设计思路、电路原理、制作细节到Python代码完整拆解这个“树莓派CPU负载硬件指示器”的实现过程。无论你是嵌入式爱好者、硬件新手还是想给树莓派项目加点酷炫指示功能的玩家都能从中找到可以直接“抄作业”的干货。2. 核心设计思路与方案选型2.1 核心需求解析我们要监控什么首先得明确在Linux系统里“系统负载”System Load Average到底是什么。它并不是CPU使用率的百分比而是一个更综合的指标。uptime命令输出的三个数字1分钟、5分钟、15分钟平均负载代表的是系统中处于可运行状态Runnable和不可中断睡眠状态Uninterruptible Sleep的平均进程数。简单理解它反映了系统有多“忙”以及有多少任务在排队等待。对于单核CPU来说负载为1.0表示CPU刚好满负荷负载小于1.0表示有空闲大于1.0则表示有进程在排队。对于我们的树莓派4B四核CPU理论上负载到4.0才算是完全满负荷。但在实际感知上负载超过2.0时系统操作就可能开始有迟滞感了。为什么选择uptime命令项目原文提到了top、iostat、uptime等多个命令。top功能强大但输出复杂解析起来麻烦iostat更偏向I/O统计。而uptime命令输出极其简洁我们只需要解析其中“1分钟平均负载”这个数字即可。对于追求低开销的监控脚本来说uptime是最轻量、最直接的选择。虽然它反映的是1分钟内的平均值并非瞬时值但对于观察系统负载的“趋势”和“大致水位”来说已经完全够用也避免了因瞬时峰值导致的指示灯频繁跳动。2.2 系统架构软硬分工的艺术整个项目的架构可以清晰地分为软件和硬件两部分它们通过树莓派的GPIO接口进行通信。软件部分树莓派端数据采集周期性如每5秒执行uptime命令提取1分钟平均负载值。逻辑判断根据预设的阈值将负载值归类到四个等级低、轻、中、高。编码输出将这四个等级映射为2位二进制码00 01 10 11并通过两个指定的GPIO引脚输出相应的电平高/低。硬件部分外部电路板电平隔离与输入通过光耦Opto-coupler接收树莓派GPIO的信号实现电气隔离保护树莓派。解码使用74LS1392-4线解码器将2位输入码解码为4路输出中的一路有效低电平有效。信号整形由于74LS139输出是低有效用74HC04六反相器将其反相得到高有效信号。通道选择使用CD4066四路模拟开关由解码后的高有效信号控制选择接通四路电阻中的一路。频率生成与显示NE555定时器构成一个无稳态多谐振荡器其振荡频率由被选中的电阻决定。不同的频率驱动LED产生不同的闪烁效果直观指示负载等级。这个架构的精妙之处在于复杂的“频率-负载等级”映射关系由硬件电路固化实现树莓派只需输出简单的数字信号真正做到了“各司其职效能最优”。2.3 阈值定义如何划分负载等级负载等级的划分不是绝对的它取决于你的树莓派型号和你运行的主要任务。项目原文作者基于树莓派4B 2GB的经验给出了参考我们可以在此基础上形成一个更通用的设置思路低负载LOW负载 0.5。系统几乎空闲可能只有一些后台守护进程。对应输出00。轻负载LIGHT0.5 负载 1.0。系统正在处理一些工作但响应依然迅速。例如播放音乐的同时进行轻量文件操作。对应输出01。中负载MEDIUM1.0 负载 2.0。系统压力较大能感觉到操作略有延迟。例如同时用浏览器看网页视频和进行文件传输。对应输出10。高负载HIGH负载 2.0。系统繁忙响应明显变慢。例如运行多个重型应用或进行大量网络数据传输。对应输出11。注意对于树莓派3B或更早的单核/双核型号这些阈值应该调低。例如对于双核负载1.0可能就已经是“中负载”了。最佳方法是观察你日常使用时的负载情况然后调整Python代码中的阈值定义让它更符合你的实际体验。3. 硬件电路深度解析与制作要点3.1 核心芯片工作原理与选型这个电路的核心是几颗经典的“老家伙”但它们历久弥新原理清晰非常适合教学和实践。1. 74LS1392-4线解码器/多路分配器作用将我们从树莓派GPIO送来的2位二进制码A0 A1“翻译”成4个输出端Y0 Y1 Y2 Y3中的一个变为低电平0其余三个为高电平1。这是一种“一对一”的激活方式。关键特性注意它的输出是低电平有效。也就是说当输入为00时Y0输出为0低Y1-Y3输出为1高。这是我们后级需要加反相器74HC04的主要原因。替代方案你可以使用74HC139或74HCT139。HCT系列兼容TTL电平与树莓派的3.3V GPIO接口更友好。LS系列是早期的TTL芯片工作电压5V但树莓派GPIO是3.3V虽然通常也能驱动但从电平规范上讲使用HCT或HC系列兼容3.3V供电更为稳妥。2. 74HC04六反相器作用将74LS139的低有效输出反相为高有效输出。例如139的Y0输出低电平0经过04反相后输出高电平1用于控制后级的CD4066。为什么需要因为CD4066模拟开关的控制端需要高电平来“接通”开关。如果直接用139的低电平无法有效开启4066。当然如果你能找到输出高有效的解码器或者用与非门自己搭就可以省去这个反相器。3. CD4066四路双向模拟开关作用相当于一个由电压控制的“电子开关”。本项目中它的每路开关的两个端子一端接NE555的定时电阻另一端接公共端。当来自04的反相控制信号为高时该路开关闭合对应的电阻被接入NE555的电路控制信号为低时开关断开电阻悬空。关键理解CD4066不是数字逻辑芯片而是模拟开关。它传递的是模拟信号这里就是电阻网络。它的导通电阻Ron通常在几十到几百欧姆对于选择KΩ级别定时电阻的NE555电路来说这个影响很小可以忽略。4. NE555定时器作用构成一个经典的无稳态多谐振荡器Astable Multivibrator产生方波驱动LED闪烁。其振荡频率公式为f 1.44 / ((R1 2*R2) * C1)。在本电路中R1是固定电阻R2就是由CD4066选择接入的四个电阻12k 24k 51k 100k之一。改变R2就改变了频率。电路连接注意NE555的典型无稳态电路中放电管Discharge 引脚7通过电阻连接到电源这决定了高电平时间。我们的闪烁频率变化本质就是通过改变这个电阻来改变整个振荡周期。3.2 电路原理图分析与改进方案原项目的电路图是可行的但作者在后文也提到了一个视觉体验上的问题NE555标准无稳态电路的输出占空比高电平和低电平时间比不是50%这会导致两个LED如果接在输出和放电端的亮灭时间不对称看起来有点“别扭”。原电路分析 树莓派GPIO - 光耦隔离 - 74LS139解码 - 74HC04反相 - CD4066选通电阻 - NE555振荡 - LED闪烁。 这是一个非常标准且清晰的数字控制模拟电路流程。一个更直观的改进方案采用CD4017流水灯 作者在Step 8中提出了一个有趣的修改用CD4017十进制计数器/分频器替代部分LED驱动制作一个“追逐器”Chaser效果让8个LED依次点亮形成旋转动画并且动画速度随负载变化。同时他颠倒了逻辑——负载越高LED动画速度越快。理由是“高负载时慢吞吞的闪烁让人看了焦虑快节奏的动画反而更有活力”。这个改进在硬件上增加了一个CD4017及其相关的8个LED和限流电阻。CD4017的时钟输入CLK仍然来自NE555的输出。这样NE555的频率决定了CD4017的计数快慢从而决定了LED流水灯的速度。负载高 - NE555频率高 - 流水灯转得快负载低 - NE555频率低 - 流水灯转得慢。实操心得选择你的显示模式简约闪烁派如果你喜欢极简就用原版的两个LED闪烁方案。制作简单元件少。炫酷动画派如果你想让你的树莓派盒子看起来更“赛博朋克”CD4017流水灯方案视觉效果更棒。但需要焊接更多的LED和电阻。心理暗示我个人更喜欢改进版的“越快越忙”逻辑。看着飞速旋转的灯光你会立刻意识到系统正在全力工作这种正向反馈更符合直觉。3.3 元器件清单与采购建议以下是制作所需的核心元器件清单以基础闪烁版为例类别型号/参数数量说明数字IC74LS139 或 74HC13912-4线解码器DIP封装74HC041六反相器DIP封装CD40661四路模拟开关DIP封装模拟ICNE5551定时器DIP封装分立元件PC817 或 4N252光耦用于隔离LED不同颜色2建议一红一绿便于区分电阻 220Ω4LED限流电阻电阻 4.7kΩ2光耦输入端限流电阻电阻 12kΩ 24kΩ 51kΩ 100kΩ各1NE555定时电阻决定频率电阻 1kΩ1NE555电路中的R1参考典型电路电容 10μF1NE555定时电容C1电容 0.1μF (104)1电源去耦电容其他洞洞板万用板1块建议5x7cm或更大排针若干用于连接树莓派GPIO和电源杜邦线公对公若干连接用锡丝、焊台-焊接工具采购与替代建议芯片所有IC尽量选择DIP双列直插封装方便在洞洞板上焊接。表面贴装SMD除非你手艺很好否则不推荐。光耦PC817是最常见、最便宜的光耦完全满足需求。注意它有4个引脚阳极、阴极、发射极、集电极别接反了。电阻电容电阻值不要求绝对精确常用标称值即可如12k可用10k2k串联或直接用12kΩ。电容的耐压值选择10V或16V以上即可。电源整个电路可以从树莓派的5V和GND引脚取电。NE555和74LS系列芯片工作电压是5V而74HC04和CD4066的工作电压范围宽3-15V在5V下工作完全没问题。3.4 焊接与组装避坑指南在洞洞板上焊接这种多芯片的数字-模拟混合电路有条理和耐心是关键。1. 布局规划在焊接前先用铅笔在洞洞板背面非铜箔面轻轻画一下主要芯片和接口的大致位置。遵循“信号流”方向输入接口光耦- 解码/逻辑芯片139 04- 模拟开关4066- 定时器555- 输出LED。电源和地线VCC/GND这是最重要的建议在板子两侧或中间用粗导线或直接利用洞洞板的铜箔走线建立两条坚固的“电源总线”和“地线总线”。所有芯片的VCC和GND引脚都就近连接到这两条总线上。去耦电容务必在每个IC的VCC和GND引脚之间尽可能近地焊接一个0.1μF104的瓷片电容。这是消除电源噪声、保证数字电路稳定工作的关键绝不能省2. 焊接顺序先贴片后插接本电路全是直插元件所以顺序是先焊接高度最低的元件如电阻、电容、IC座如果使用。然后是光耦、LED最后是排针。强烈建议使用IC座对于74LS139、74HC04、CD4066、NE555这些芯片花几块钱买对应的DIP IC座焊在板子上再把芯片插上去。这样既方便调试也防止焊接时高温损坏芯片。飞线技巧连接不同部分的导线建议使用不同颜色的硅胶线。例如红色接5V黑色接地黄色/绿色/蓝色用于信号线。这样在调试时一目了然。3. 关键检查点电源短路焊接完电源总线后先不要插芯片用万用表蜂鸣档测量5V和GND之间是否短路。确认无误后再上电。芯片方向所有IC都有方向标识缺口或圆点。焊接IC座或芯片时务必确保所有缺口方向一致插芯片时也要对准。光耦方向PC817有圆点标记的是引脚1阳极。接线时树莓派GPIO - 串联4.7k电阻 - PC817引脚1阳极PC817引脚2阴极接GND。输出侧引脚4集电极接VCC5V引脚3发射极输出到74LS139的输入端通常需要接一个上拉电阻如10k到VCC但74LS139内部有上拉此处可省略为保险起见可以加上。4. Python监控脚本编写与系统集成硬件准备好了现在需要树莓派上的“大脑”来驱动它。这个Python脚本的核心任务就是周期性地读取负载判断等级并控制两个GPIO引脚输出对应的电平。4.1 脚本核心代码解析以下是脚本的核心逻辑我添加了详细的注释#!/usr/bin/env python3 树莓派CPU负载硬件指示器 - 监控脚本 作者基于jandb86项目思路扩展 功能每5秒读取系统1分钟平均负载通过GPIO控制外部硬件指示器。 import subprocess import time import RPi.GPIO as GPIO # 配置区域 # GPIO引脚定义 (BCM编号) GPIO_PIN_0 17 # 二进制输出的低位 GPIO_PIN_1 27 # 二进制输出的高位 # 负载阈值定义 (根据你的树莓派型号和负载感受调整) LOAD_LOW 0.5 LOAD_LIGHT 1.0 LOAD_MEDIUM 2.0 # 高于 LOAD_MEDIUM 即为 HIGH # 监控间隔秒 INTERVAL 5 # 初始化 # 设置GPIO模式为BCM GPIO.setmode(GPIO.BCM) # 设置两个引脚为输出模式并初始化为低电平 GPIO.setup(GPIO_PIN_0, GPIO.OUT, initialGPIO.LOW) GPIO.setup(GPIO_PIN_1, GPIO.OUT, initialGPIO.LOW) def get_load_average(): 执行uptime命令并解析出1分钟平均负载 try: # 执行命令并捕获输出 result subprocess.run([uptime], stdoutsubprocess.PIPE, textTrue, checkTrue) output result.stdout # uptime输出示例”... load average: 0.20, 0.10, 0.05“ # 找到‘load average:’后面的部分按逗号分割取第一个值 load_str output.split(load average:)[-1].strip().split(,)[0] return float(load_str) except (subprocess.CalledProcessError, ValueError, IndexError) as e: print(f获取负载出错: {e}) return 0.0 # 出错时返回0让指示灯显示低负载 def set_indicator_level(level_code): 根据2位二进制码设置GPIO电平 # level_code 是一个两位的二进制字符串如 00, 01, 10, 11 # 或者是一个整数0123 if isinstance(level_code, int): # 将整数转换为二进制字符串并取后两位前面补零 bin_str format(level_code, 02b) else: bin_str level_code # 设置低位引脚 (GPIO_PIN_0) GPIO.output(GPIO_PIN_0, GPIO.HIGH if bin_str[1] 1 else GPIO.LOW) # 注意顺序bin_str[1]是低位 # 设置高位引脚 (GPIO_PIN_1) GPIO.output(GPIO_PIN_1, GPIO.HIGH if bin_str[0] 1 else GPIO.LOW) # bin_str[0]是高位 # 打印当前状态调试用 load_levels [LOW, LIGHT, MEDIUM, HIGH] level_index int(bin_str, 2) print(f负载等级: {load_levels[level_index]} | 输出编码: {bin_str} | GPIO{GPIO_PIN_1}{bin_str[0]}, GPIO{GPIO_PIN_0}{bin_str[1]}) def load_to_level(load): 将负载值转换为等级编码 if load LOAD_LOW: return 0 # 00 elif load LOAD_LIGHT: return 1 # 01 elif load LOAD_MEDIUM: return 2 # 10 else: return 3 # 11 # 主循环 print(CPU负载硬件指示器监控脚本启动...) print(f阈值设置: LOW{LOAD_LOW}, LIGHT{LOAD_LIGHT}, MEDIUM{LOAD_MEDIUM}, HIGH{LOAD_MEDIUM}) print(f监控间隔: {INTERVAL}秒) print(按 CtrlC 终止程序) try: while True: # 1. 获取当前1分钟平均负载 current_load get_load_average() print(f当前1分钟平均负载: {current_load:.2f}) # 2. 判断负载等级 level load_to_level(current_load) # 3. 设置硬件指示器 set_indicator_level(level) # 4. 等待下一个周期 time.sleep(INTERVAL) except KeyboardInterrupt: print(\n程序被用户中断。) finally: # 确保程序退出前清理GPIO将引脚设为低电平 print(清理GPIO状态...) GPIO.output(GPIO_PIN_0, GPIO.LOW) GPIO.output(GPIO_PIN_1, GPIO.LOW) GPIO.cleanup() print(脚本退出。)4.2 脚本部署与自动化运行写好脚本后假设保存为cpu_load_indicator.py你需要让它能在树莓派启动后自动运行。1. 赋予脚本执行权限chmod x cpu_load_indicator.py2. 测试脚本直接运行脚本观察命令行输出和硬件指示器的反应。你可以手动制造一些负载比如用stress命令来测试不同等级。sudo python3 cpu_load_indicator.py注意如果脚本中使用的GPIO引脚如17 27被系统其他服务占用可能会报错。请确保这些引脚是空闲的。树莓派上一些引脚有特殊功能如I2C SPI避开它们。3. 配置为系统服务推荐这是最可靠的方式让脚本在后台静默运行即使退出SSH也不会停止。创建服务文件sudo nano /etc/systemd/system/cpu-load-indicator.service写入以下内容根据你的实际路径修改ExecStart[Unit] DescriptionRaspberry Pi CPU Load Hardware Indicator Aftermulti-user.target [Service] Typesimple ExecStart/usr/bin/python3 /home/pi/cpu_load_indicator.py WorkingDirectory/home/pi StandardOutputjournal StandardErrorjournal Restartalways Userpi [Install] WantedBymulti-user.target启用并启动服务sudo systemctl daemon-reload sudo systemctl enable cpu-load-indicator.service sudo systemctl start cpu-load-indicator.service检查服务状态sudo systemctl status cpu-load-indicator.service如果看到active (running)就表示成功了。以后每次树莓派启动这个服务都会自动运行。4.3 功能扩展记录负载与温度日志原项目提到了记录CPU温度这是一个非常有价值的扩展。长期记录负载和温度可以帮助你分析树莓派在不同工作下的热表现甚至发现异常。你可以在主循环中添加以下函数和逻辑def get_cpu_temperature(): 读取树莓派CPU温度 try: with open(/sys/class/thermal/thermal_zone0/temp, r) as f: temp f.read() return float(temp) / 1000.0 # 文件内存储的是毫摄氏度 except Exception as e: print(f读取温度出错: {e}) return 0.0 def log_data(load, temp, level): 将负载、温度和等级记录到文件 timestamp time.strftime(%Y-%m-%d %H:%M:%S) log_line f{timestamp}, {load:.2f}, {temp:.1f}, {level}\n try: with open(/var/log/cpu_monitor.log, a) as f: f.write(log_line) except IOError: # 如果写入/var/log失败尝试写入用户目录 with open(/home/pi/cpu_monitor.log, a) as f: f.write(log_line)然后在主循环的print语句后调用log_data(current_load, cpu_temp, level)。这样你就拥有了一个简单的监控日志可以用gnuplot或其他工具绘制图表就像原项目作者做的那样直观看到负载和温度的相关性。5. 调试、问题排查与优化心得即使按照教程一步步做也难免会遇到问题。这里总结一些常见的坑和解决办法。5.1 硬件电路调试问题1LED完全不亮。检查电源用万用表测量电路板上的5V和GND之间电压是否为5V。检查树莓派GPIO的5V引脚Pin 2或4是否已正确连接到电路板。检查接地确保树莓派的GNDPin 6 9 14 20 25等和电路板的GND可靠连接。这是最常见的问题之一。检查NE555测量NE555的输出引脚3脚是否有电压变化。可以用一个1k电阻串联一个LED直接接在3脚和地之间看是否闪烁。如果不闪检查NE555的接线4 8脚接VCC 1脚接GND以及定时电阻、电容是否接对。检查信号通路从后往前推。用万用表或逻辑笔如果有测量CD4066控制端如引脚13 5 6 12的电平当改变树莓派输出时对应引脚是否从0V变成~5V或反之测量74HC04输出端是否随输入变化。测量74LS139输出端Y0-Y3是否随树莓派GPIO输入变化注意是低有效。最后检查树莓派GPIO输出是否正常。可以写一个简单的测试脚本循环让两个GPIO输出00 01 10 11用万用表验证。问题2LED常亮或不闪烁只保持一种亮度。NE555频率过高如果频率超过几十Hz人眼就会觉得LED是常亮的。检查NE555的定时电阻和电容值。尤其是电容10μF是否接对了如果用成了0.1μF频率会快100倍。CD4066开关未切换可能只有一路电阻被永久接通了。检查CD4066的控制信号是否正常变化或者芯片本身是否损坏。问题3负载变化但LED闪烁频率不变。Python脚本未运行或权限问题确保脚本正在运行并且有权限控制GPIO通常需要sudo或以root身份运行的服务。GPIO引脚冲突确认你代码里用的GPIO引脚BCM编号和物理连接一致并且没有被其他程序占用。光耦损坏或接反用万用表测量光耦输出侧。当树莓派GPIO输出高电平时光耦输出侧应该导通电阻很小。5.2 软件脚本调试问题1运行脚本提示ModuleNotFoundError: No module named RPi.GPIO解决安装RPi.GPIO库。sudo apt update sudo apt install python3-rpi.gpio问题2运行脚本提示RuntimeError: No access to /dev/mem. Try running as root!解决需要root权限访问GPIO。使用sudo python3 your_script.py运行或者将运行脚本的用户如pi加入gpio组sudo usermod -a -G gpio pi然后注销重新登录。问题3负载读数一直是0或者脚本报错。解决检查uptime命令的输出格式。不同语言环境或系统版本可能略有差异。可以在命令行手动运行uptime看看输出格式是否和脚本中解析的逻辑匹配。print(output)一下看看原始字符串。5.3 性能与优化建议降低监控频率默认5秒一次已经很低频。如果系统极其敏感可以尝试延长到10秒甚至30秒一次。脚本的CPU占用率会进一步降低到可忽略不计。使用gpiozero库替代RPi.GPIOgpiozero是树莓派官方推荐的更高层级的GPIO库代码更简洁。但对于这种简单的数字输出两者差异不大。硬件功耗整个指示器电路的电流消耗主要来自LED和芯片。按照设计两个LED加上几个芯片总电流应该在50mA以内对树莓派电源来说微不足道。外壳与美化为你的电路板设计一个3D打印外壳或者用一个透明的小盒子装起来会让整个项目看起来更完整、更专业。别忘了在面板上为LED开孔。6. 项目总结与延伸思考这个项目做下来收获远不止一个会闪的灯。它是一次完整的“系统思维”训练从软件Python脚本、系统命令解析到硬件数字电路设计、焊接调试再到系统集成服务部署、自动化最后到数据分析负载与温度日志。每一个环节都踩过坑也都有“原来如此”的顿悟时刻。我个人最大的体会是“解耦”和“专用化”带来的好处。把负载指示这个频繁、简单的任务交给专用硬件让树莓派的主CPU得以解脱去做它更擅长的事情。这种思路在嵌入式系统和物联网领域非常普遍比如用硬件看门狗监控系统用专门的PWM芯片控制电机而不是都用软件模拟。这个项目还可以怎么玩多级负载指示目前是4级2位你可以增加一个GPIO引脚实现8级3位指示负载划分更精细。无线指示器用一块ESP8266/ESP32开发板通过Wi-Fi接收树莓派MQTT发布的负载信息然后驱动LED。这样指示器可以放在桌面上而树莓派藏在角落。网络仪表盘将Python脚本获取的负载和温度数据通过Flask等框架提供一个简单的网页仪表盘结合硬件指示器实现本地远程监控。触发警报当负载持续处于“高”等级超过一定时间可以让Python脚本发送邮件通知、播放提示音甚至通过GPIO控制一个蜂鸣器报警。结合其他传感器除了负载还可以监控内存使用率、磁盘IO、网络流量等用更多的LED或一个RGB LED来显示综合健康状态。硬件不再神秘软件也不再虚空。当你看到LED的闪烁节奏真实地反映着树莓派内核的忙碌程度时那种软硬件协同工作的实感是纯软件项目无法给予的。希望这个详细的拆解能帮你成功复现这个有趣的项目并激发出更多属于自己的创意。