每次开机都需要查询树莓派的ip地址,比较烦人,就在网上找了一个oled进行显示,这样就可以查看到oled的ip地址了,其中OLED显示屏模块,IIC接口,128*32点阵,驱动芯片SSD1306。
目录
树莓派学习(oled使用)
安装
- 接线
oled ping | 树莓派ping | 备注 |
---|---|---|
3.3v | 1 or7 | 3.3v |
gnd | 6 或 9/14/20/25/30/34/39 | ground |
scl | 5 | i2c scl |
sad | 3 | i2c sca |
res | 不连可以 | 未用到 |
现在树莓派终端中执行 sudo raspi-config ,选择 Interfacing Options > I2C ,使能树莓派的i2c功能后,确认后重启。 接好后执行
sudo apt-get install -y i2c-tools sudo i2cdetect -y
在0x3C处有输出,说明接线OK。
树莓派环境准备
安装可以进行在 Python 2.7 或 Python 3 里,推荐使用 Python 3。
Python 3 的可以执行下面的一系列命令进行自查:
sudo apt install -y python3-dev sudo apt install -y python-imaging python-smbus i2c-tools sudo apt install -y python3-pil sudo apt install -y python3-pip sudo apt install -y python3-setuptools sudo apt install -y python3-rpi.gpio
Python 2.7 的:
sudo apt install -y python-dev sudo apt install -y python-imaging python-smbus i2c-tools sudo apt install -y python-pil sudo apt install -y python-pip sudo apt install -y python-setuptools
树莓派下载安装 SSD1306 屏幕驱动库
Adafruit
有很多开源的 SSD1306 屏幕驱动库,使用的是 Adafruit 的 Python 库,可以用于 128x32 和 128x64 的显示屏。地址是:https://github.com/adafruit/Adafruit_Python_SSD1306。
下载安装方式有两种:
直接从 gitHub 上 clone 到本地
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git cd Adafruit_Python_SSD1306 Python 3 下: sudo python3 setup.py install ;Python 2 下:sudo python setup.py install
用 pip 下载
sudo pip install Adafruit-SSD1306
我用到是第一种下载安装方式。
测试代码
下载的 Python 库中有很多现成的例子,在 examples 文件夹中。终端进入该文件夹下,执行 python shapes.py 或 python3 shapes.py 进行测试即可
在显示屏上显示文字
想要显示中文,就需要下载中文的字体,有很多免费网站可以下载到,需要是 ttf 文件。我下载了一个楷体的 ttf,然后需要将这个 ttf 文件和代码放在同一路径下(如果不同路径,代码中的路径需要修改正确)。
直接贴代码吧,
#!/usr/bin/python
# -*- coding: utf-8 -*-
#import RPi.GPIO as GPIO
#import time
#import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
# Raspberry Pi pin configuration:
RST = 24
# 128x32 display with hardware I2C:
disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST)
# Initialize library.
disp.begin()
# Clear display.
disp.clear()
disp.display()
# Create blank image for drawing.
# Make sure to create image with mode '1' for 1-bit color.
width = disp.width
height = disp.height
image = Image.new('1', (width, height))
# Get drawing object to draw on image.
draw = ImageDraw.Draw(image)
# Load default font.
#font = ImageFont.load_default()
# Alternatively load a TTF font. Make sure the .ttf font file is in the same directory as the python script!
# Some other nice fonts to try: http://www.dafont.com/bitmap.php
font = ImageFont.truetype('kaiti.ttf', 30)
# First define some constants to allow easy resizing of shapes.
padding = 0
top = padding
bottom = height-padding
# Move left to right keeping track of the current x position for drawing shapes.
# 增加 x 值可以将文字向右移动
x = 0
draw.text((x, top), u'你好!宝贝', font=font, fill=255) # 字段前加 u 表示是文字
disp.image(image)
disp.display()
这里使用的是luma.oled
这里使用的是luma.oled https://github.com/rm-hull/luma.oled
git clone https://github.com/rm-hull/luma.oled.git
cd luma.oled
python setup.py install
测试
可以使用 luma 配套的一些测试例程,https://github.com/rm-hull/luma.examples
git clone https://github.com/rm-hull/luma.examples.git
cd luma.examples/examples/
python demo.py
在前文 树莓派SSD1306屏幕180度旋转 中,因为我的屏幕要旋转180度,代码大概如下:
from luma.core.interface.serial import i2c
from luma.core.render import canvas
from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106
serial = i2c(port=1, address=0x3C)
#rotate参数,整数值,可选0(默认)、1、2、3
#其中0为无旋转,1为顺时针旋转90°,2为180°,3为270°
device = ssd1306(serial, rotate=2)
……
另外其默认调用是,执行完毕后清除当前屏幕内容
如果需要执行完毕代码,并保留内容的话,需要重新定义 cleanup 方法
from luma.core.interface.serial import i2c
from luma.core.render import canvas
from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106
serial = i2c(port=1, address=0x3C)
device = ssd1306(serial, rotate=2)
#定义cleanup为空,覆盖原方法,可保留内容
device.cleanup = ""
题外话
python中如果想查询某个指定库的目录,可以通过如下方法得到
import a_module
print a_module.__file__
例如,我想用opencv,那个库的名字叫做cv2,如果我想找到他的地址,那么我就应该这样:
import cv2
print cv2.__file__
可以看到执行这两行就会打印出地址:
/usr/local/lib/python2.7/dist-packages/cv2/cv2.so