【原创】树莓派2B利用SPI驱动OLED

网上搜”树莓派 oled”或者”树莓派 SPI”,会有

树莓派raspberry使用spi接口oled显示屏:基于python和c

树莓派raspberry使用spi接口oled显示屏:基于python和c

等等一些大神搞的教程,利用树莓派的python或者c语言驱动OLED,但是那些教程都是针对树莓派1版本的,我刚买的是最新的2B,管脚图都对不上,自然不能用

OLED的芯片是SSD1306

树莓派raspberry使用spi接口oled显示屏:基于python和c

这个教程里说利用的库

git clone https://github.com/michaelKle/libssd1306.git

太旧了,是树莓派1版本的,可以编译成功但是运行没有任何效果

现在我说说我的方法:

1、sudo raspi-config

在高级设置里打开spi功能,然后重启

树莓派2B是没有什么black-list来打开SPI的,要用这个方法,重启后会在/dev下面看到spi0.0和spi0.1两个设备文件

2、git clone git://git.drogon.net/wiringPi
cd wiringPi
./build

安装并且编译wiringPi的库

其中example里面是很多wiringPi的例程,wiringPi里面是各种c文件h文件和编译生成的o文件。程序在编写的时候加上头文件

#include <wiringPi.h>
#include <wiringPiSPI.h>

在用gcc编译的时候

gcc –Wall –o 要输出的可执行文件名 要编译的c文件 –lwiringPi(动态链接wiringPi的库)

如果静态链接也应该是可以的,大家可以自己试一下

安装好后输入gpio –v可以查看自己的GPIO的版本,输入gpio readall 可以查看自己板子的引脚图

3、接着就是按照管脚图把OLED的线和树莓派接好,我们按照wiringPi的编码来

GND和VCC(VCC最好用3.3v的,虽然文档说5v也可以)就不说了,D0接14是SCLK(SPI时钟信号),D1接12是MOSI(主输入从输出),RST和DC随便接GPIO管脚都可以,我是RST接2,DC接3。

4、接下来就是最关键的移植了,我试过移植git clone https://github.com/michaelKle/libssd1306.git这个库,它没有调用wiringPi或者BCM任何第三方的库,而是完全自己调用用内核的IO实现的SPI通信,我看不懂,用wiringPi改写了一下,只能实现基本的初始化点亮OLED,不能显示图像和文字。

于是我试着移植了一下卖家给的例程,它是用飞思卡尔的机器,用软件模拟SPI实现的。我给加上了wiringPi的头文件,改写了关键的两个函数

LCD_WrDat()向OLED写数据

LDC_WrCmd()向OLED写命令

在OLED初始化函数里加上了

//初始化wiringPi和wiringPISPI
wiringPiSetup();
wiringPiSPISetup(0,12000000);
//初始化两个通用GPIO口,输出模式,上拉
pinMode(LCD_RST,OUTPUT);
pullUpDnControl(LCD_RST,PUD_UP);
pinMode(LCD_DC, OUTPUT);
pullUpDnControl(LCD_DC,PUD_UP);

大家可以下载我写好的文件

5、接下来就是用gcc编译了,编译完直接sudo ./输出的文件

OLED就亮了

gcc -Wall -o test1 main.c OLED12864.c –lwiringPi
sudo ./test1

D:\文档\IMG_20150731_165417.jpg

源代码下载地址: 链接: http://pan.baidu.com/s/1dDezZvN 密码: ty2w 
wiringPi用户手册: 链接: http://pan.baidu.com/s/1hqIV1vI 密码: rbnj 

原文链接:,转发请注明来源!

小礼物走一走,梦想失落乐园爱你么么哒!

赞赏支持

发表评论