×

树莓派监视器开源项目

消耗积分:2 | 格式:zip | 大小:0.00 MB | 2023-06-14

旧念

分享资料个

描述

向任何 Raspberry Pi 项目添加状态监视器对于实时了解 CPU 在使用、温度和 RAM 使用以及重要连接信息方面的执行情况非常有用。如果超频是您的事,那么这对于查看您的设置对 Pi 的影响并做出相应的调整非常有价值。

Breadboard Mates TIMI-130显示器与 Breadboard Mates Pi 适配器一起,是该项目的完美选择,因为它易于使用且启动和运行所需的代码简单。

面包板伴侣 TIMI-130
 

Breadboard Mates 提供了一个 Python 库,使 Python 编码体验变得轻松。

第 1 步:需要什么。

该项目需要以下内容。

硬件

软件

第 2 步:树莓派设置。

通过访问https://www.raspberrypi.com/software/并按照安装操作系统的说明,设置 Raspberry Pi 非常容易。

安装 Python 库和 Git 克隆项目文件需要 Internet 连接。

Pi OS 需要配置为启用 SSH 并启用我们将用来与 TIMI-130 通信的串行端口 (UART)。

第 3 步:TIMI-130 设置。

Pi 适配器需要连接到 Pi GPIO 接头和连接到适配器的 TIMI-130,如下所示。

poYBAGNYweiAUT97AAaYdV2kusI061.png
 

由于需要为状态监视器配置 TIMI-130,因此需要将 Pi 适配器上的开关设置为 PROG。

接下来,将Mates Programmer连接到 Pi 适配器。

pYYBAGNYwe2ANyAJAAZjZYfyNjY613.png
 

将 USB 电缆连接到 Mates Programmer 和 PC USB 端口。TIMI-130 现在已准备好安装状态监视器项目。

需要Mates Studio来配置 TIMI-130,您可以从这里下载https://breadboardmates.com/products/mates-studio/

创建状态监视器项目当您启动 Mates Studio 时,系统会提示您选择您的产品。

pYYBAGNYwfCAOzVhAACkvhoAaTU576.png
 

单击 TIMI-130,TIMI-130 的图形表示将出现在右侧面板上。

pYYBAGNYwfKASBpLAAC4NziNZSQ658.png
 

在 TIMI-130 的图像上单击两次可将显示屏旋转 180 度。

pYYBAGNYwfWAZwa-AAC84VQ1GYo868.png
 

点击 CONFIRM 然后选择Commander Environment

poYBAGNYwfiAYT2JAAD65YW72bc281.png
 

Commander 环境现在将打开。

poYBAGNYwfuAA33-AABuRGM3oC8411.png
 

点击“+”浏览页面库。

然后从通知选项卡中选择状态和资源监视器,然后单击确认。

poYBAGNYwf2AO2RLAAE_wOk6RWE514.png
 

波特率需要从 9600 更改为 115200,方法是单击工具和配置按钮并选择 115200

pYYBAGNYwgCAJUuIAAGkKH26ylU803.png
 

接下来,通过单击 COM 面板并从下拉菜单中选择正确的端口,为 Mates Programmer 选择 com 端口。

poYBAGNYwgOABTesAAF8sS42j-E801.png
 

最后,单击上传按钮将状态监视器上传到 TIMI-30。

poYBAGNYwgWABA-uAAAOc_F-EkI370.png
 

状态监视器现在将显示在 TIMI-130 上

poYBAGNYwgqAJ7KQAAPSfzxMruM355.png
 

现在可以从 Pi 适配器中移除 USB 引线和 Mates Programmer。Pi 适配器开关现在可以设置为 HOST,准备好接收来自 Pi 的命令。

第 4 步:安装 Python 应用程序。

所有最近的 Raspberry Pi OS Distro 都预装了 Python 3,因此我们可以使用 PIP 安装所需的 Python 库。

psutil库可以通过运行安装

pip3 install psutil

接下来,可以通过运行安装 Breadboard Mates Controller 库

pip3 install rpi-mates-controller

接下来,我们可以从 Github 克隆 Python 代码

git clone https://github.com/BreadBoardMates/RPi-Status-Monitor.git

或者,可以从这里下载 Python 代码https://github.com/BreadBoardMates/RPi-Status-Monitor

第 5 步:运行应用程序。

移动到 RPi-Status-Monitor 文件夹

cd RPi-Status-Monitor

然后运行应用程序

python3 ./BBMPiStatusMonitor.py

TIMI-130 应首先重置为屏幕外,然后开始显示 CPU 使用状态、CPU 温度和 RAM 使用状态以及连接的 IP 地址和正常运行时间。

如果您希望状态监视器作为后台任务运行,只需在命令中添加“&”即可。

python3 ./BBMPiStatusMonitor.py &

享受您闪亮的 Raspberry Pi 显示器。

通过在 Mates Studio 中创建新页面并更改 Python 代码以匹配所使用的任何新小部件,可以简单地更改或改进该项目以获得所需的外观。唯一的限制是想象力。

 

Python 代码。

import time
import sys
import psutil
import socket
import fcntl
import struct
import uptime
from gpiozero import CPUTemperature
from rpi_mates.controller import RPiMatesController as MatesController
from mates.constants import *

def up():
    t = uptime.uptime()
    days = 0
    hours = 0
    min = 0
    out = ''
    while t > 86400:
        t -= 86400
        days += 1
    while t > 3600:
        t -= 3600
        hours += 1
    while t > 60:
        t -= 60
        min += 1
    out += str(days) + 'd '
    out += str(hours) + 'h '
    out += str(min) + 'm'
    return out


def get_interface_ipaddress(network):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915,
                                struct.pack('256s',
                                network[:15].encode('utf-8')))[20:24])  # SIOCGIFADDR
    except OSError:
        return '0.0.0.0'


if __name__ == '__main__':

    mates = MatesController('/dev/ttyS0')

    mates.begin(115200)

    gtime = up()
    lastCpuUse = 0
    lastTemp = 0
    lastlTemp = 0
    lastRamUse = 0
    lastWIPaddr = '0.0.0.0'
    lastEIPaddr = '0.0.0.0'

    mates.updateTextArea(5, gtime, True)
    cpu = CPUTemperature()
    lastlTemp = int(cpu.temperature * 10)

    IPinterval = 0

    while True:
        cpu = CPUTemperature()
        gcpu = int(cpu.temperature)
        lcpu = int(cpu.temperature * 10)
        cpuuse = int(psutil.cpu_percent())
        ramuse = int(psutil.virtual_memory().percent)

        if cpuuse < lastCpuUse:
            lastCpuUse = lastCpuUse - (1 + (lastCpuUse - cpuuse > 9))
        if cpuuse > lastCpuUse:
            lastCpuUse = lastCpuUse + 1 + (cpuuse - lastCpuUse > 9)
        if gcpu < lastTemp:
            lastTemp = lastTemp - (1 + (lastTemp - gcpu > 9))
        if gcpu > lastTemp:
            lastTemp = lastTemp + 1 + (gcpu - lastTemp > 9)
        if lcpu < lastlTemp:
            lastlTemp = lastlTemp - 1
        if lcpu > lastlTemp:
            lastlTemp = lastlTemp + 1
        if ramuse < lastRamUse:
            lastRamUse = lastRamUse - (1 + (lastRamUse - ramuse > 9))
        if ramuse > lastRamUse:
            lastRamUse = lastRamUse + 1 + (ramuse - lastRamUse > 9)

        if gcpu != lastTemp:
            mates.setWidgetValueByIndex(MatesWidget.MATES_MEDIA_GAUGE_B,0, lastTemp)
        if lcpu != lastlTemp:
            mates.setLedDigitsShortValue(0, lastlTemp)
        if cpuuse != lastCpuUse:
            mates.setWidgetValueByIndex(MatesWidget.MATES_MEDIA_GAUGE_B,1, lastCpuUse)
            mates.setLedDigitsShortValue(1, lastCpuUse)
        if ramuse != lastRamUse:
            mates.setWidgetValueByIndex(MatesWidget.MATES_MEDIA_GAUGE_B,2, lastRamUse)
            mates.setLedDigitsShortValue(2, lastRamUse)

        if IPinterval > 20:
            tempIPaddr = get_interface_ipaddress('eth0')
            if tempIPaddr != lastEIPaddr:
                mates.updateTextArea(1, tempIPaddr, True)
                lastEIPaddr = tempIPaddr

            tempIPaddr = get_interface_ipaddress('wlan0')
            if tempIPaddr != lastWIPaddr:
                mates.updateTextArea(3, tempIPaddr, True)
                lastWIPaddr = tempIPaddr
            IPinterval = 0

        IPinterval = IPinterval + 1
        time.sleep(0.060)

        tempTime = up()
        if tempTime != gtime:
            mates.updateTextArea(5, tempTime, True)
            gtime = tempTime
        time.sleep(0.040)

Python 代码将创建一个 Mates Controller 实例并以 115200 波特率启动它。

mates = MatesController('/dev/ttyS0')
mates.begin(115200)

然后创建一组变量,这些变量将在每次更新各种状态后设置。这使主循环能够将刚刚读取的状态与其上一个状态进行比较,然后仅在其值发生变化时才更新相应的小部件。

lastCpuUse = 0
lastTemp = 0
lastlTemp = 0
lastRamUse = 0
lastWIPaddr = '0.0.0.0'
lastEIPaddr = '0.0.0.0'

如果需要,循环的每次迭代都将使用以下简单命令更新显示屏上的小部件

mates.setWidgetValueByIndex(MatesWidget.MATES_MEDIA_GAUGE_B,0, lastTemp)
mates.setLedDigitsShortValue(0, lastlTemp)
mates.setWidgetValueByIndex(MatesWidget.MATES_MEDIA_GAUGE_B,1, lastCpuUse)
mates.setLedDigitsShortValue(1, lastCpuUse)
mates.setWidgetValueByIndex(MatesWidget.MATES_MEDIA_GAUGE_B,2, lastRamUse)
mates.setLedDigitsShortValue(2, lastRamUse)
mates.updateTextArea(1, tempIPaddr, True)
mates.updateTextArea(3, tempIPaddr, True)
mates.updateTextArea(5, tempTime, True)

可下载资源

以下是软件应用程序、库和已完成项目文件的链接。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !