JetsonNano搭载的扩展板的OLED显示屏的使用(实时显示IP、内存、CPU等)
创始人
2025-05-31 05:04:43
0

在DIY机器人时,我们可以使用远程连接到机器人查看相关信息,也就是前面提到的远程连接VNC-Viewer与安全传输WinSCP软件,通过VNC-Viewer来连接,不过对于不便使用电脑或者想简单直观的看到机器人常见的属性,比如IP地址,内存和CPU等情况,一般使用小的显示屏直接显示就好了。

我们这里使用到的是128*32分辨率的OLED显示屏,可以显示IP地址、内存、CPU、硬盘大小等,这些信息对于我们来说已足够。

想要在显示屏显示信息,需要用到驱动,这里我们使用的是Adafruit_Python_SSD1306驱动,顾名思义OLED屏的驱动名称叫做SSD1306,这是很常见的OLED的驱动。开源代码:https://github.com/adafruit/Adafruit_Python_SSD1306/

我们打开https://github.com/adafruit/Adafruit_Python_SSD1306/blob/master/Adafruit_SSD1306/SSD1306.py

SSD1306_I2C_ADDRESS = 0x3C    # 011110+SA0+RW - 0x3C or 0x3D

可以知道OLED的I2C外设地址为0x3C,里面存放着关于驱动屏幕的所有方法、寄存器信息。

Linux命令

在这之前为避免Jetbotmini开启的实时刷新显示的jetbotmini_stats.service运行的stats.py程序与我们现在正要测试的程序都同时使用一个I2C外设OLED屏而产生异常冲突

我们先在Jetbotmini命令控制台停止刷新OLED服务的运行:sudo systemctl stop jetbotmini_stats

内存,CPU和硬盘情况用到Linux命令

这里我直接在wsl中 运行测试下这个格式化:

f.sh内容如下,当然单独一条一条命令执行也是可以的,跟Windows中的批处理一样:

free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'
df -h | awk '$NF=="/"{printf "Disk Usage: %d/%dGB (%s)\n", $3,$2,$5}'
top -bn1 | grep load | awk '{printf "CPU Load: %.2f\n", $(NF-2)}' 

执行看下效果(内存、硬盘、CPU负载的使用情况与占比):

(base) tony@TonyComputer:/mnt/c/Users/Tony$ ./f.sh
Memory Usage: 65/12747MB (0.51%)
Disk Usage: 4/251GB (2%)
CPU Load: 0.00

当然也可以在jetbotmini平台执行命令,也就是在Ubuntu系统上

新建文件:vi f.sh

复制粘贴之后 :wq回车保存即可,然后直接执行:./f.sh

如果出现权限错误:bash: ./f.sh: Permission denied

修改文件权限:chmod 777 f.sh

然后我们来实时将内存等信息显示到OLED显示屏,先导入需要的模块

import time
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
from jetbotmini.utils.utils import get_ip_address
import subprocess

SSD1306驱动

初始化驱动SSD1306,将屏幕清空,设置字体等操作

# 128x32 显示与硬件I2C:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=None, i2c_bus=0, gpio=1)# 将gpio设置hack为1,以避免平台检测
# 初始化库。
disp.begin()
# 清除显示
disp.clear()
disp.display()
# 为绘图创建空白图像
# 确保创建带有模式为'1'即1位颜色的图像
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
# 获取要在图像上绘制的绘图对象
draw = ImageDraw.Draw(image)
# 画一个黑色填充框来清除图像
draw.rectangle((0,0,width,height), outline=0, fill=0)
# 画一些形状
# 首先定义一些常量,以方便调整形状的大小
padding = -2
top = padding
# 从左到右移动,以跟踪绘图图形的当前x位置。
x = 0
# 加载默认字体
font = ImageFont.load_default()

可以查看下驱动SSD1306,熟悉下有哪些属性和方法:

print(dir(disp))
#['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_buffer', '_gpio', '_i2c', '_initialize', '_log', '_pages', '_rst', '_spi', 'begin', 'clear', 'command', 'data', 'dim', 'display', 'height', 'image', 'reset', 'set_contrast', 'width']

然后就是每隔一秒循环刷新信息显示到OLED屏

while True:# 画一个黑色填充框来清除图像。draw.rectangle((0,0,width,height), outline=0, fill=0)# 从这个链接可以获取系统监视的Shell脚本 : #https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-loadcmd = "top -bn1 | grep load | awk '{printf \"CPU Load: %.2f\", $(NF-2)}'"CPU = subprocess.check_output(cmd, shell = True )cmd = "free -m | awk 'NR==2{printf \"Mem:%s/%sM %.2f%%\", $3,$2,$3*100/$2 }'"MemUsage = subprocess.check_output(cmd, shell = True )cmd = "df -h | awk '$NF==\"/\"{printf \"Disk:%d/%dGB %s\", $3,$2,$5}'"Disk = subprocess.check_output(cmd, shell = True )draw.text((x, top),       "eth0:" + str(get_ip_address('eth0')),  font=font, fill=255)draw.text((x, top+8),     "wlan0:" + str(get_ip_address('wlan0')), font=font, fill=255)draw.text((x, top+16),    str(MemUsage.decode('utf-8')),  font=font, fill=255)draw.text((x, top+25),    str(Disk.decode('utf-8')),  font=font, fill=255)# 显示图像disp.image(image)disp.display()time.sleep(1)

下图就是OLED显示的Jetbotmini使用信息的界面

清空屏幕-->实时显示

1. 第一行内容:有线网络的IP地址,这里我使用无线连接的,所以是None

2. 第二行内容:WiFi无线网络的IP地址

3. 第三行内容:运行内存使用情况与已用运行内存百分比

4. 第四行内容:磁盘内存使用情况与已用磁盘内存百分比

相关内容

热门资讯

东方联盟揭示了 CatB 勒索... 据观察,CatB 勒索软件操作背后的威胁行为者使用一种称为DLL 搜索顺序劫持的技术来...
我的1919观后感1000字 ...  【篇一】  前些天,班里同学一同观看了影片《我的1919》,这部影片讲述的是在第一次世界大战末,属...
最新或2023(历届)活着观后...  【篇一】  不去品尝生活的苦就不会懂得幸福的真谛。从古至今,有谁没有遭遇过挫折,又有谁没有过不幸的...
三傻大闹宝莱坞观后感1000字...  【篇一】  《三傻大闹宝莱坞》,起初刚听到这部电影的名字的时候,我感觉这无非就是一部搞笑的电影。但...
最新或2023(历届)心灵捕手...   一部名叫《最强大脑》的节目,使“雨人”一词再次走向人们的视野。而心理题材的电影,也历来备受影迷追...
毕业qq女生忧伤说说签名带图片... qq女生忧伤说说带图片 六组女生忧伤带图片的说说~~如果您喜欢本文请分享给您的好友~~我从来不...
YOLOv5网络结构,训练策略... 前言 前面已经讲过了Yolov5模型目标检测和分类模型训练流程,这一篇讲解一下yolo...
最新或2023(历届)作文千手...  【篇一】  21个聋哑人,她们在舞台上尽情挥洒,她们在残缺中追求完美,在无声中激荡生命。她们在娇媚...
[SwiftUI]GroupB... 代码: import SwiftUIstruct MPMineView: View {...
甲午大海战观后感2000字 甲...   【篇一】  坐在电脑前看《一八九四·甲午大海战》时,我是怀着十分忐忑的心情的,因为已经预知那段清...
风雨哈佛路观后感500字 风雨...   【篇一】  这部电影我看了很受触动,女主人公经历了常人不敢想象的成长道路,最终实现了梦想,走进了...
最新或2023(历届)感动中国...  【篇一】  "感动你我,感动中国,这世界有爱才转动。感动你我,感动中国,这世界有爱才永恒。"当《感...
历史文献纪录片信仰观后感 历史... 【篇一】  曾经,在念大学的时候,"信仰"对我而言是很空、很大,虚无缥缈,是个看不见、摸不着的东西。...
【ACL】访问控制列表 文章目录1.访问控制列表1.1 ACL概述1.2 ACL在接口的应用方向2.ACL的工作原理2.1 ...
优秀班主任主要事迹10篇汇总 ... 篇一:  本人自2009年参加工作以来,一直担任班主任工作,本人在班级管理、教学和德育工作方面均表现...
最新或2023(历届)初中模范... 篇一:优秀班主任先进事迹材料  我从事教育教学工作二十一年了,多年来,我和广大教师一样,热爱教育事业...
最新或2023(历届)县优秀班...   爱岗敬业呕心化春雨 倾情撑蓝天  记玉龙县优秀教师 xxx  xxx,女,纳西族,xxx年xx月...
最新或2023(历届)优秀班主...   篇一:优秀班主任先进事迹  ***,男,汉族,1973年8月出生于安徽明光市,现为经济管理学院综...
电影南京南京观后感大全 关于电...  【篇一】  5.1号走进莱蒙的东方国际影城观看这部期待了很久的电影南京南京,一定要去看这个片子原因...
Python tkinter ... *18.2.23 dchars(args) *args传递的参数有3个: ࿰...