树莓派自带SPI和I2C接口,因此可以方便地控制带SPI的控制芯片的OLED显示屏。要想成功实现树莓派与oled的通信,最好是买一个以SSD1306为主控芯片的oled,因为关于这个芯片的驱动库是最容易搜到的,当然如果有能力自己写驱动程序的话就无所谓了。这是我买的128X64,SPI接口的OLED模块,不到20块。
网上对树莓派SPI操作OLED的大多数文章我猜应该是参考了这个链接里的教程https://learn.adafruit.com/ssd1306-oled-displays-with-raspberry-pi-and-beaglebone-black?view=all,这是Adafruit公司专门为配合SSD1306的驱动库写的教程,按照该教程很快就能调通了。
1 关于SPI
SPI是串行外设接口(Serial Peripheral Interface)的简写,其实就是一种总线通信协议,该总线以主从方式工作,通常是一个主设备和一个或多个从设备,一般需要4根线来进行数据通信,即SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选),相应的,有一套时序逻辑规定了通信过程。一般使用SPI的设备都配备了现成的SPI模块,只需要对相应的寄存器写入指令就可以进行通信了,如果没有SPI接口,也可以软件实现,就是根据时序图手动操作GPIO来实现通信,这就比较费劲了。
树莓派已经带了SPI接口,不过默认是关闭的。执行sudo raspi-config
进入配置页,打开SPI接口。
然后有的教程里说要把/etc/modprobe.d/raspi-blacklist.conf文件里的”blacklist spi-bcm2708”注释掉,但是我的这个文件是空的。重启后,可以执行lsmod
查看是否有spi模块存在;同时,在/dev下是否存在spidev0.0和spidev0.1两个文件,这两个文件代表了树莓派SPI模块可以使能两个SPI从设备,也对应了GPIO上的CE0和CE1脚。
2 接线
把模块的引脚接到树莓派的GPIO上, 需要注意这里要分清GPIO引脚号是BCM编号还是实际编号。GND脚和树莓派的GND连接;VCC接到3.3V脚;D0接到树莓派的SCLK脚(第23号脚),即BCM.11脚;D1接到MOSI脚(第19号脚),即BCM.10;RES接到BCM.17脚,即第11号脚;DC接到BCM.22脚,即第15号脚;CS接到CE0脚(第24号脚)。总之,除了RES和DC是可以任意指定GPIO口,其他引脚是必须和树莓派上的指定脚连接的。