树莓派使用 python IIC 驱动 OLED 刷新率低问题与解决

OLED屏幕为128x64,使用树莓派跑luma库的例程font_awesome.py时候,发现图标就切换的时候,有很明显的上到下的刷新效果,后来发现是I2C速率问题,因为树莓派默认的IIC是100Khz,导致帧率较低,后来改为400KHz甚至1M以后,效果理想,当前环境:
-IIC:400KHz或1000Khz
-python库:luma
-python版本:python3
-硬件设备:树莓派Zero
-操作系统:Noobs

回顾
一开始我使用的是 Adafruit_Python 库,运行例程中的 image.py 文件时候 ,发现图片有明显的刷新效果,首先排除硬件性能问题, 因为这种 OLED 用更低端的单片机都能有理想的效果,一开始怀疑是IIC速率,但是修改了IIC速率以后发现并没有什么实际效果,可能是修改没成功,

后来打算换 luma 库则安装一直不成功,出现的错误按网上的修改也没有解决,只好换一个树莓派系统,换了系统发现之前在SD卡根目录存放wifi密码和开启ssh的操作居然是无效的,但是我只有一个笔记本的内接键盘,只能接显示器,然后用鼠标去各种配置文件里面找字符,用复制黏贴的方法把家里WiFi密码凑出来。

终于连上SSH了,下载python3过程中发现Noobs已经自带了python3,于是直接安装 luma 库,并按 github上的操作顺利的安装成功,运行一些 gif 显示的甚至都还好,但是在font_awesome.py又发现了有刷新的现象,这种例程应该是每次都刷新整一个OLED屏幕。

本来开始以为是SSD1306的性能问题,怀疑亮点比较多的情况下刷新会慢,但是今天下午看到一个帖子:https://bbs.21ic.com/forum.php?mod=viewthread&tid=2977514&extra=page%3D1&page=1,原文楼主表示他算出来I2C在400Khz时,这种OLED刷新率只有12Hz,换算成树莓派默认是100Hz,那刷新整个OELD居然需要333ms,那这就很好解释为什么会看到刷新现象了。

鉴于 AF 库修改 IIC 速率并没有改善,这次我也没有抱太大希望,没想到修改为400Khz之后,居然有明显的改善。

最后我又切到 AF 库,发现刷新image.py 的时候 还是能看到刷新效果。猜想AF库也许是软件I2C?需要用乎程序中设置软件IIC的速率?

感觉 Luma 的例程很好,就没有仔细研究AF库了。另外,目前的 Luma 库有一个perfloop.py 例子,它可以显示帧率:
树莓派使用 python IIC 驱动 OLED 刷新率低问题与解决_第1张图片
上图I2c速率为1M时候运行的效果,显示FPS为 25,这个帧率已经比较高了。

你可能感兴趣的:(问题与解决)