网上搜”树莓派 oled”或者”树莓派 SPI”,会有
树莓派raspberry使用spi接口oled显示屏:基于python和c
http://www.embbnux.com/2014/08/10/raspberry_use_spi_oled_screen_python_c/
等等一些大神搞的教程,利用树莓派的python或者c语言驱动OLED,但是那些教程都是针对树莓派1版本的,我刚买的是最新的2B,管脚图都对不上,自然不能用
OLED的芯片是SSD1306
http://www.embbnux.com/2014/08/10/raspberry_use_spi_oled_screen_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
#include
在用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 clonehttps://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