这个博客已经停止更新,请访问blog.mxslly.com
分类: C/C++
2015-07-31 17:11:37
树莓派2B利用SPI驱动OLED
网上搜”树莓派 oled”或者”树莓派 SPI”,会有 树莓派raspberry使用spi接口oled显示屏:基于python和c style="margin:0px;padding:0px;"> 等等一些大神搞的教程,利用树莓派的python或者c语言驱动OLED,但是那些教程都是针对树莓派1版本的,我刚买的是最新的2B,管脚图都对不上,自然不能用 OLED的芯片是SSD1306
style="margin:0px;padding:0px;"> 这个教程里说利用的库 git clone style="margin:0px;padding:0px;"> 太旧了,是树莓派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 style="margin:0px;padding:0px;font-family:宋体;">这个库,它没有调用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
源代码下载地址: 链接: 密码: ty2w
wiringPi用户手册: 链接: 密码: rbnj |