当前位置: 首页 > news >正文

树莓派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
http://www.gsyq.cn/news/1296042.html

相关文章:

  • STM32MP157开发板USB OTG功能实战:从Type-C芯片选型到设备树配置全解析
  • Arduino ESP32终极开发指南:从硬件抽象到物联网实战
  • 手把手教你用STC89C52单片机驱动DS1302时钟模块(附完整代码)
  • ESP32+LVGL8.3保姆级教程:搞定ST7789V屏幕和CST816T触摸(附完整代码)
  • Kubernetes自动化运维最佳实践
  • 保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(附常见启动失败解决方案)
  • 手把手教学:用Tauri给你的博客/官网做个专属桌面客户端(支持Windows/macOS)
  • 如何在开发中使用 PlayCanvas体现webgl的效果
  • 3分钟掌握:B站m4s缓存视频无损转MP4的终极方案
  • 告别串口调试烦恼:5分钟上手跨平台串口助手
  • 本地部署开源项目管理工具 Focalboard 并实现外部访问( Windows 版本)
  • 原神玩家信息查询工具:如何快速掌握账号全貌与战斗数据
  • 从零玩转Windows 11虚拟化:除了VMware,用系统自带的Hyper-V能做什么?(附Docker Desktop配置)
  • 基于Trinket M0与NeoPixel打造可编程LED护目镜:从硬件到软件的完整创客指南
  • 第一次提交代码到GitHub要配置什么
  • 2026北京婚恋机构盘点|正规、专业、靠谱!真情在线等本地婚恋品牌实测参考与避坑指南 - 速递信息
  • 【ElevenLabs定价策略深度解码】:20年AI语音商业化老兵拆解Tier设计逻辑、隐藏成本与ROI临界点
  • PAC技术深度解析:从工业自动化核心到边缘智能的未来演进
  • 陕西冲孔铝单板厂家-陕西汇创建材 - 速递信息
  • ElevenLabs藏文语音生成正式商用倒计时:3大合规风险预警(含中国网信办、印度语言政策、不丹教育局最新备案要求)
  • 基于AT89C51与DS18B20的智能电饭煲仿真设计(含源码与电路)
  • 别再让PWM中断拖慢你的STM32!三种精准控制脉冲数的方法实测与避坑
  • 一套鸿蒙 App,如何跑在手机 / 平板 / TV?
  • 为什么多智能体系统必须建立“秩序层”?
  • GTA终极模组管理器:一站式解决方案完全指南
  • 从绿光到算法:深入解析PPG信号检测的核心技术与实践挑战
  • JavaScript逆向工程的架构演进:Jsxer如何重新定义二进制脚本反编译
  • 学校AIGC检测标准差异解读:不同高校AI率标准对比2026年如何针对性免费处理完整指南
  • 【仅限本周】ElevenLabs日本区新上线「方言适配层」内测权限申请通道:关西腔/东北腔/冲绳语声学建模参数首次开源解析
  • 新唐NUC980 Linux开发踩坑记:从BSP包下载到第一个内核镜像编译成功