BLOG
Enjoy when you can, and endure when you must.
香蕉派(BPI)加装 OLED 屏幕并使用 Python 进行控制

话说自从买了一个 BPI M1+ 之后,这折腾就是根本停不下来的节奏。之前已经成功尝试为其编译了一个专属的 OpenWrt 15.05.1 版本,并实现了如文件共享、下载机等诸多小功能,当然还有更重要的一点 … 你懂的。不过再怎么说这也是个开发板,就这么放着当路由器,不再玩玩其他的,感觉是有那么点对不起他吧。虽然我不太擅长搞硬件,小玩一些简单的还是可以的。所以还是决定把强大的 GPIO 口用起来。起初简单玩了玩距离传感器,熟悉了下 GPIO 的基本使用。然后就想到了何不在上面拓展一个小屏幕,显示些基本信息,还是挺有趣的。比如我一般不会外接显示器什么的来使用 BPI,要经过网络找到他还真得费些功夫(当然也不算啥事),搞不好还间歇性失联。如果能让他在启动以后通过小屏幕自己显示一下 IP 地址,不就省事多了嘛。于是淘宝搜罗了一番,最终考虑入手一个 BPI 官方的 OLED 屏。另外还顺便换了一个更裸露的外壳,装上以后还是挺洋气的,来 Show 一下:

现在就来进入正题:怎么驱动和怎么玩。

 

怎么驱动

 

这里我参考了来自 52pi.net 的《香蕉派 M1 使用直插 OLED 屏(Python)》一文,系统采用的和文中的一致:Bananian。具体的环境配置过程如下:

Load spi-sun7i 模块

# modprobe spi-sun7i

安装必要的组件

# apt-get install git gcc python-dev python-smbus python-pip python-imaging

安装 Hack 后的 RPi.GPIO 库

# git clone https://github.com/LeMaker/RPi.GPIO_BP.git
# cd RPi.GPIO_BP
# python setup.py install

修改并安装 Adafruit 的 Python GPIO 库

下载源码并进入目录

# git clone https://github.com/Adafruit/Adafruit_Python_GPIO.git
# cd Adafruit_Python_GPIO

修改 Adafruit_GPIO/GPIO.py 文件,将最后 get_platform_gpio() 的函数体改为:

import RPi.GPIO
return RPiGPIOAdapter(RPi.GPIO, **keywords)

修改 Adafruit_GPIO/SPI.py 文件,将第三行中 GPIO 库的导入改为:

import RPi.GPIO as GPIO

执行安装:python setup.py install

 

最后,如何使用请安装 Adafruit 的 Python SSD1306 库 并查看 examples 下的示例。

 

怎么玩

 

准备工作就绪了,接下来就是怎么玩呢?我是这样想的:

  • 屏幕点阵是 128 x64,分两种字号显示,一种是 6 x 8,一种是 8 x 16,姑且称其为小号字和大号字;
  • 以小号字的高度为参照,将屏幕显示分为 8 行(大号字占 2 行);
  • 把屏幕分为三个部分,最上面的两行为一个部分(这两行也刚好 LED 颜色为黄色,其余为蓝色),用来当作固定的标题区;最下面的一行为时间或滚动文字区;中间的为主内容区;
  • 主内容区来回显示 WAN 口 IP 信息、WAN 口流量信息、内存使用率及系统负载;
  • 底部主要显示时钟,附加滚动显示网络状态(分别对几个重点关注的 IP 进行定时 ping)。

至于具体的编码,因为内容还是比较多,就不在此粘贴了,有兴趣的朋友可以到 我的 github 中的 python-bpi-oled 工程看一看。有几点还是在此值得提一下:

  • 初始化的时候,注意设定 RST 为 25,DC 为 24,如:disp = SSD1306_128_64(rst=25, dc=24, spi=SPI.SpiDev(0, 0, max_speed_hz=8000000));
  • 部分代码,如 ping(python 实现的 ping 功能),参考自其他开发者;
  • 因部分代码存在兼容性问题,因此不能在 python3 下使用。

 

COMMENTS
LEAVE COMMNT