树莓派3B+吃灰了?拿来做个24小时运行的网络监控器吧(Raspberry Pi OS + 串口看日志) 树莓派3B变身24小时网络监控终端从系统配置到日志监控实战指南家里闲置的树莓派3B还在吃灰这台信用卡大小的计算机其实可以成为家庭网络的守夜人。本文将带你一步步将其改造为低功耗、高可靠性的网络状态监控终端实时监测网络延迟、带宽波动和设备在线情况所有状态通过串口日志一目了然。不同于简单的系统体验这个项目将充分发挥树莓派在生产环境中的实用价值。1. 硬件准备与系统部署1.1 选择合适的存储介质树莓派3B的稳定运行始于一张可靠的存储卡。虽然市面上有各种高速卡但作为24小时运行的监控终端耐久度比速度更重要。建议选择工业级microSD卡它们专为持续读写设计卡类型推荐品牌容量建议寿命指标工业级SD卡Swissbit, Delkin16-32GB3k P/E周期高耐久SD卡SanDisk Ultra16GB1k P/E周期普通SD卡任意品牌8GB500 P/E周期提示避免使用二手或来历不明的存储卡监控脚本的持续日志写入会加速劣质卡的损坏1.2 系统烧录与优化使用官方Raspberry Pi Imager工具时选择Raspberry Pi OS Lite版本无桌面环境可显著降低资源占用。烧录完成后在boot分区创建两个关键文件实现无头启动创建ssh空文件启用远程访问创建wpa_supplicant.conf配置WiFi自动连接countryCN ctrl_interfaceDIR/var/run/wpa_supplicant GROUPnetdev update_config1 network{ ssid你的WiFi名称 psk你的WiFi密码 key_mgmtWPA-PSK }首次启动后立即执行系统优化sudo apt update sudo apt full-upgrade -y sudo apt install -y python3-pip vim sudo raspi-config在raspi-config中扩展文件系统设置合适时区内存分配调整为16MB无GPU需求启用SPI和I2C为未来扩展预留2. 网络监控核心功能实现2.1 构建Python监控脚本创建/home/pi/network_monitor.py实现三大监控功能#!/usr/bin/env python3 import subprocess import time import json from datetime import datetime def ping_test(host8.8.8.8): try: output subprocess.check_output( fping -c 3 -W 2 {host} | tail -n 2, shellTrue, textTrue ) loss float(output.split(%)[0].split()[-1]) avg float(output.split(/)[4]) return {loss: loss, latency: avg} except: return {loss: 100, latency: 0} def speed_test(): try: res subprocess.check_output( speedtest-cli --json --secure, shellTrue, textTrue, timeout120 ) data json.loads(res) return { download: data[download]/1e6, upload: data[upload]/1e6, ping: data[ping] } except: return {download: 0, upload: 0, ping: 0} def device_check(ip_range192.168.1.1-254): active [] result subprocess.run( fnmap -sn {ip_range}, shellTrue, capture_outputTrue, textTrue ) for line in result.stdout.split(\n): if Nmap scan report in line: active.append(line.split()[-1][1:-1]) return active if __name__ __main__: while True: timestamp datetime.now().strftime(%Y-%m-%d %H:%M:%S) ping ping_test() speed speed_test() if int(datetime.now().hour) % 2 0 else {} devices device_check() log { time: timestamp, ping: ping, speed: speed, devices: len(devices), active_devices: devices } print(json.dumps(log, indent2)) time.sleep(300)2.2 配置系统服务实现持久化创建systemd服务确保监控脚本持续运行sudo vim /etc/systemd/system/network-monitor.service写入以下内容[Unit] DescriptionNetwork Monitor Service Afternetwork.target [Service] Userpi ExecStart/usr/bin/python3 /home/pi/network_monitor.py Restartalways RestartSec10s [Install] WantedBymulti-user.target启用并启动服务sudo systemctl daemon-reload sudo systemctl enable network-monitor sudo systemctl start network-monitor3. 串口日志系统配置3.1 硬件连接与内核配置树莓派3B的硬件串口默认分配给蓝牙模块需要释放给GPIO使用。连接USB转TTL模块USB-TTL的TX接GPIO14板载编号TXDUSB-TTL的RX接GPIO15板载编号RXDGND对接修改/boot/config.txt添加enable_uart1 dtoverlaypi3-miniuart-bt调整/boot/cmdline.txt为consoleserial0,115200 consoletty1 rootPARTUUID10effbe8-02 rootfstypeext4 fsck.repairyes rootwait3.2 日志管理优化安装必要的日志工具并配置串口输出sudo apt install -y screen sudo vim /etc/rsyslog.conf取消以下行的注释module(loadimuxsock) # provides support for local system logging module(loadimklog) # provides kernel logging support创建日志转发规则sudo vim /etc/rsyslog.d/10-network-monitor.conf添加if $programname network-monitor then /dev/serial0 stop重启服务应用更改sudo systemctl restart rsyslog sudo reboot4. 高级功能扩展与优化4.1 实现异常告警机制修改监控脚本添加阈值告警功能# 在network_monitor.py中添加 def send_alert(message): subprocess.run( fecho ALERT: {message} /dev/serial0, shellTrue ) # 可扩展邮件或API告警 # 在主循环中添加检测逻辑 if ping[loss] 20: send_alert(fHigh packet loss: {ping[loss]}%) if speed and speed[download] 10: send_alert(fLow download speed: {speed[download]}Mbps)4.2 数据持久化存储添加SQLite数据库支持长期记录import sqlite3 from contextlib import closing def init_db(): with closing(sqlite3.connect(/home/pi/network.db)) as conn: conn.execute( CREATE TABLE IF NOT EXISTS stats ( id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp TEXT NOT NULL, loss REAL NOT NULL, latency REAL NOT NULL, download REAL, upload REAL, devices INTEGER NOT NULL ) ) conn.commit() def save_to_db(data): with closing(sqlite3.connect(/home/pi/network.db)) as conn: conn.execute( INSERT INTO stats ( timestamp, loss, latency, download, upload, devices ) VALUES (?, ?, ?, ?, ?, ?) , ( data[time], data[ping][loss], data[ping][latency], data[speed].get(download, 0), data[speed].get(upload, 0), data[devices] )) conn.commit()4.3 电源管理与看门狗配置硬件看门狗防止系统挂起sudo apt install -y watchdog sudo vim /etc/watchdog.conf取消以下行的注释watchdog-device /dev/watchdog max-load-1 24启用服务sudo systemctl enable watchdog sudo systemctl start watchdog添加温度监控保护sudo vim /etc/rc.local在exit 0前添加echo 150000 /sys/class/thermal/thermal_zone0/trip_point_1_temp