视频加载失败

【树莓派】使用Python驱动SSD1306 OLED显示

762 字
4 分钟
【树莓派】使用Python驱动SSD1306 OLED显示
【树莓派】使用Python驱动SSD1306 OLED显示

0x00#

因为之前用的Nokia5110显示有故障,所以在网友的推荐下接触到了SSD1306。

显示模块型号:SSD1306 OLED

显示范围:单色 128*64点阵

测试机:树莓派zero w

测试机系统:Raspbian stretch life

开发语言:Python3

采用驱动库:Adafruit Python SSD1306

0x01环境准备#

1.树莓派开启I2C接口#

终端输入

Terminal window
sudo raspi-config

选择Interfacing Options,开启I2C接口

Lily_Screenshot_1536654250.png
Lily_Screenshot_1536654250.png

Lily_Screenshot_1536654260.png
Lily_Screenshot_1536654260.png

Lily_Screenshot_1536654272.png
Lily_Screenshot_1536654272.png

更改显示速率(可选,不推荐,会占用大量GPIO资源)#

为了更好的显示性能,例如显示动画时如对帧率有要求,可以通过修改下面的参数将 I2C 频率从默认的 100KHz 或 400KHz 提升到 1MHz。

Terminal window
sudo nano /boot/config.txt

在文件末添加一行:

dtparam=i2c_baudrate=1000000

2.接线#

模块共4针脚,接线为

VCC 1

GND 6

SCL 5

SDA 3

Lily_Screenshot_1536654018.png
Lily_Screenshot_1536654018.png

3.驱动#

GPIO驱动:

Terminal window
pip install Adafruit_GPIO

SSD1306采用的驱动是Adafruit Python SSD1306,用pip安装即可。

Terminal window
sudo python -m pip install --upgrade pip setuptools wheel
sudo pip install Adafruit-SSD1306

或者采用python文件安装:

Terminal window
sudo python -m pip install --upgrade pip setuptools wheel
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install

0x03使用#

采用python文件安装的可以在Adafruit_Python_SSD1306文件夹中看见examples实例文件夹。

首先是导入驱动的库:

import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306

针脚配置:

# Raspberry Pi pin configuration:
RST = 24
# Note the following are only used with SPI:
DC = 23
SPI_PORT = 0
SPI_DEVICE = 0

显示配置:

#分辨率选择一个即可
# 128x32
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
# 128x64
disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
# 初始化库
disp.begin()
# 获取屏幕大小
width = disp.width
height = disp.height
# 清除屏幕内容
disp.clear()
disp.display()

1.显示内容#

屏幕显示内容是先建立一张与屏幕相等的空白画布,将要显示的内容添加到其中,最后再显示出来:

# 创建空白画布
# 颜色为1 bit
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
shape_width = 20
top = padding
bottom = height-padding
# 从左向右移动,跟踪绘制形状的当前位置
x = padding
# 绘制椭圆
draw.ellipse((x, top , x+shape_width, bottom), outline=255, fill=0)
x += shape_width+padding
# 绘制矩形
draw.rectangle((x, top, x+shape_width, bottom), outline=255, fill=0)
x += shape_width+padding
# 绘制三角
draw.polygon([(x, bottom), (x+shape_width/2, top), (x+shape_width, bottom)], outline=255, fill=0)
x += shape_width+padding
# 绘制X
draw.line((x, bottom, x+shape_width, top), fill=255)
draw.line((x, top, x+shape_width, bottom), fill=255)
x += shape_width+padding
# 加载默认字体
font = ImageFont.load_default()
# 或者使用其他.ttf格式的字体,字体文件要与执行文件在同一目录
#font = ImageFont.truetype('Minecraftia.ttf', 8)
# 加两行文字
draw.text((x, top), 'Hello', font=font, fill=255)
draw.text((x, top+20), 'World!', font=font, fill=255)
# 显示
disp.image(image)
disp.display()

617739217782034705.jpg
617739217782034705.jpg

2.显示图片#

# 根据OLED高度加载图片,图片要转换成1 bit颜色
if disp.height == 64:
image = Image.open('image_64.png').convert('1')
else:
image = Image.open('image_32.png').convert('1')

46229923031718465.jpg
46229923031718465.jpg

PS<可以把喜欢的图片改成不超过128>*64,再在Photoshop里先把模式改成灰度,然后调对比度和亮度,在不影响视觉的前提下尽可能对比度大。然后再改模式为“位图”,方法选“扩散仿色”,然后另存为PNG,选项为交错,就可以让OLED显示了。

END

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
【树莓派】使用Python驱动SSD1306 OLED显示
https://rehtt.com/posts/106/
作者
Rehtt
发布于
2018-09-11
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Rehtt
Hello, I'm Rehtt.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
150
分类
17
标签
73
总字数
67,772
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录