每次开机都需要查询树莓派的ip地址,比较烦人,就在网上找了一个oled进行显示,这样就可以查看到oled的ip地址了,其中OLED显示屏模块,IIC接口,128*32点阵,驱动芯片SSD1306。

目录

树莓派学习(oled使用)

安装

  1. 接线
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 不连可以 未用到
  1. 现在树莓派终端中执行 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。

  1. 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
    
  2. 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。

下载安装方式有两种:

  1. 直接从 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
    
  2. 用 pip 下载

    sudo pip install Adafruit-SSD1306
    

    我用到是第一种下载安装方式。

  3. 测试代码

下载的 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