配置好Qt开发环境后,我们就可以进行树莓派的C++开发了。本次我们利用树莓派的GPIO,控制8位LED模块,完成流水灯的控制。
这也是树莓派类似于单片机的一种控制方法,如果你对单片机不陌生的话,相信你很快就可以上手。
树莓派 3B+开发板上有 40 个 GPIO 接口,如图所示。
GPIO(General Purpose Input/Output)的意思就是通用型输入输出,可以使用第三方库wiringPi进行控制,支持wiringPi Pin和BCM GPIO两种编号。
当你完成系统和Qt的安装后,第三方的wiringPi库就应该已经安装完成了。或者你可以在终端输入:
sudo apt-get install wiringpi
来进行安装。安装完毕后,可以输入以下指令查看版本号和读取io状态:
gpio -v
gpio readall
之后我们能够在终端中看到如下图所示的GPIO状态图。
可以看到BCM编号和wiringPi编号有区别,下面我们会使用wiringPi编号对GPIO进行开发。
本次开发装置采用一个8位 LED 流水灯模块来作为被控对象,完成流水灯的控制。
D0~D7 这8个脚位分别控制这8个LED,所以只要跟树莓派的GPIO数字引脚连接起来就好。另外旁边有三个 RGB 的脚位,需要跟 GND 相连,跟R相连就亮红色,跟G相连就亮绿色,跟B相连就亮蓝色,三个同时连起来就全都亮。
首先新建一个Qt工程,在pro文件的最后添加一行代码:
LIBS += -lwiringPi
LIBS += -lwiringPiDev
然后在cpp文件中包含wiringPi的头文件:
#include "wiringPi.h"
使用前首先要初始化,在MainWindow的构造函数中添加如下初始化代码:
wiringPiSetup();
若希望将GPIO设定为输入/输出模式,则使用pinMode(pin,mode)来定义,例如将GPIO的0号引脚设定为输出模式:
pinMode(0,OUTPUT);
进行控制时,可以采用自己的控制逻辑编写代码,如:
digitalWrite(0,HIGH);
digitalWrite(0,LOW);
下面附上完整的代码
gpio.h
#ifndef GPIO_H
#define GPIO_H
#define D0 0
#define D1 1
#define D2 2
#define D3 3
#define D4 4
#define D5 5
#define D6 6
#define D7 7
void GPIO_init(void);
void GPIO_blink(void)__attribute__((noreturn));
#endif // GPIO_H
gpio.cpp
#include "wiringPi.h"
#include "gpio.h"
static int D[8]={0,1,2,3,4,5,6,7};
void GPIO_init()
{
wiringPiSetup();
int i;
for(i=0;i<8;i++)
pinMode(D[i],OUTPUT);
}
void GPIO_blink()
{
int i,j;
while(1)
{
for(j=0;j<3;j++)
{
for(i=0;i<8;i++)
digitalWrite(D[i],HIGH);
delay(200);
for(i=0;i<8;i++)
digitalWrite(D[i],LOW);
delay(200);
}
for(i=0;i<8;i++)
digitalWrite(D[i],HIGH);
for(i=0;i<8;i++)
{
digitalWrite(D[i],LOW);
delay(100);
digitalWrite(D[i],HIGH);
delay(100);
}
for(i=0;i<8;i++)
{
digitalWrite(D[i],LOW);
delay(100);
}
for(i=0;i<8;i++)
{
digitalWrite(D[i],HIGH);
delay(100);
}
}
}