Jetson nano 使用笔记(三):OLED屏幕的使用

本文详细介绍了在Jetson Nano上使用4.4.5系统版本,配合0.91英寸OLED显示屏的配置与操作步骤。包括GPIO库的安装、设备连接检查、Adafruit_SSD1306库的安装以及如何显示系统状态信息(如IP、CPU使用率、内存使用率和硬盘使用率)。此外,还展示了如何显示汉字和图片,提供了一系列实用示例代码。
摘要由CSDN通过智能技术生成

本人现在使用的系统版本是4.4.5,在使用中发现,微雪所提供的教程与此版本存在部分不对应的问题。现针对本人对0.91英寸OLED的使用步骤进行介绍,参考资料为微雪提供的教程。

1.有关GPIO库的安装

这里仅使用了微雪教程中的如下命令

安装GPIO库

sudo pip3 install Jetson.GPIO

设置权限 

sudo groupadd -f -r gpio
sudo usermod -a -G gpio your_user_name

注意:这里的your_user_name需要改成你自己的账号名,不然库无法正常使用

安装后,在pycharm的设置里是可以看见GPIO库的,如图

2.查看设备连接情况

首先使用命令:

i2cdetect -y -r 1

查看设备上所连接的设备情况。其中,这里指令最后的参数为1, 表示查看的是i2c总线1的设备,如果参数为0,则查看的是总线0的设备。

在未挂载任何设备时,显示的是

3.挂载设备

引脚连接关系如下:

Vcc (OLED) -> 3V3 (Jetson 1脚)

GND (OLED) -> GND (Jetson 6脚)

SDA (OLED) -> I2C0_2_SDA (Jetson 3脚)

SDL (OLED) -> I2C0_2_SDL (Jetson 5脚)

连接后,使用步骤1的命令进行查看,显示结果为

4.安装Adafruit_SSD1306库

使用命令

sudo pip3 install Adafruit_SSD1306

安装后在在pycharm的设置里是可以看见这个库的

Adafruit_SS1306是Adafruit Electronics 提供的驱动小尺寸OLED屏幕的驱动,至于其他尺寸的OLED屏幕的使用,后续如有需要再行更新。

5.使用如下代码,对屏幕进行测试

import Adafruit_SSD1306
import time
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

OLED=Adafruit_SSD1306.SSD1306_128_32(rst=None, i2c_bus =1, gpio =1) #注意 使用的是哪组i2c的接口,对应调整i2c_bus取值

OLED.begin() #初始化屏幕并清屏
OLED.clear()
OLED.display()
time.sleep(1)

font= ImageFont.load_default()#设置字体为默认字体

width = OLED.width #设置屏幕长宽,并创建画布
height= OLED.height
image= Image.new("1",(width,height))

while True:
    Draw= ImageDraw.Draw(image) #设置刷新区域,并写入字符串,这里调用的是PIL图形库的画图函数
    Draw.rectangle((0,0,width,height), outline =0, fill=0)
    Draw.text((0,0),"oled Testing", font= font, fill=255)

    OLED.image(image) #最后将内存刷新到屏幕上
    OLED.display()
    time.sleep(1)

显示结果为

6.显示系统状态信息、汉字以及图片的方法

显示系统状态信息、汉字以及图片的方法在SSD1306的example文件夹里提供了系统状态信息、图片、形状等的显示方法,文件可以到https://github.com/adafruit/Adafruit_Python_SSD1306下载。

(1)显示系统状态信息,包括IP CPU使用率 内存使用率 硬盘使用率等4种,语句格式可参考https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load

程序前面加入

import subprocess

while true下面的代码修改为:

while True:
    Draw= ImageDraw.Draw(image) #设置刷新区域,并写入字符串,这里调用的是PIL图形库的画图函数
    Draw.rectangle((0,0,width,height), outline =0, fill=0)
   
    cmd = "hostname -I | cut -d\' \' -f1"
    IP = subprocess.check_output(cmd, shell = True )
    cmd = "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/%sMB %.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((0, -2),       "IP: " + str(IP.decode('utf-8')),  font=font, fill=255)
    Draw.text((0, -2+8),     str(CPU.decode('utf-8')), font=font, fill=255)
    Draw.text((0, -2+16),    str(MemUsage.decode('utf-8')),  font=font, fill=255)
    Draw.text((0, -2+25),    str(Disk.decode('utf-8')),  font=font, fill=255)

    OLED.image(image) #最后将内存刷新到屏幕上
    OLED.display()
    time.sleep(1)

 

注意,这里与样例相比加入了*.decode('utf-8'),否则会出错。

显示结果如下:

(2)显示汉字

想要显示汉字,就需要下载中文的ttf字体文件,这里下载了一个宋体ttf文件,然后将这个 ttf 文件和代码放在同一路径下(如果不同路径,代码中的路径需要修改正确),修改代font= ImageFont.load_default()为

font = ImageFont.truetype('simsun.ttf', 11)

修改一下第6节的代码

cmd = "hostname -I | cut -d\' \' -f1"
    IP = subprocess.check_output(cmd, shell = True )
    cmd = "top -bn1 | grep load | awk '{printf \"CPU负载: %.2f\", $(NF-2)}'"
    CPU = subprocess.check_output(cmd, shell = True )
    cmd = "free -m | awk 'NR==2{printf \"内存: %s/%sMB %.2f%%\", $3,$2,$3*100/$2 }'"
    MemUsage = subprocess.check_output(cmd, shell = True )
    cmd = "df -h | awk '$NF==\"/\"{printf \"硬盘: %d/%dGB %s\", $3,$2,$5}'"
    Disk = subprocess.check_output(cmd, shell = True )

显示结果如下:

(3)显示图片

 image = Image.open('happycat_oled_64.ppm').convert('1')

使用代码段即可显示happycat_oled_64.ppm图片文件。

此外还有各种形状的显示方法可以尝试

参考资料:

https://www.waveshare.net/study/portal.php?mod=view&aid=882

https://www.waveshare.net/study/article-907-1.html

https://www.cnblogs.com/zhenqichai/p/I2C-OLED-display-module-and-raspberry-pi.html

https://unix.stackexchange.com/questions/119126/command-to-display-memory-usage-disk-usage-and-cpu-load

https://blog.csdn.net/hhaowang/article/details/102628364?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161754599016780255260826%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161754599016780255260826&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-102628364.first_rank_v2_pc_rank_v29&utm_term=jetson+nano+oled

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值