Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124016
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 222
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-23 22:32
个人简介

这个博客已经停止更新,请访问blog.mxslly.com

文章分类
文章存档

2018年(4)

2016年(3)

2015年(8)

2014年(1)

我的朋友

分类: 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 

阅读(4563) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~