本人现在使用的系统版本是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