在树莓派中安装wiringPi库
wiringPi库其实已经很熟悉了,在香橙派中大量使用过,这个库中集成了很多使用的功能性函数。
现在在树莓派上也安装wiringPi库:
1. wget https://project-downloads.drogon.net/wiringpi-latest.deb
2. sudo dpkg -i wiringpi-latest.deb
安装完成后,使用“gpio readall” 来测试是否安装完成:
wiringPi库安装完成 !
wiringPi的使用
对于wiringPi的使用,其实和香橙派中是一样一样的,简单总结一下:
- 要记得包含库“#include <wiringPi.h> ”
- 使用前要初始化“wiringPiSetup () ”
- 使用“pinMode (XXX, OUTPUT/INPUT)”设置IO口输入输出模式
- 使用“digitalWrite (XXX, LOW/HIGH) ”写高低电平
- 使用“digitalRead(XXX) ”读电平
- 编译时加上“-lwiringPi ”链库
写一个简单的距离接近报警的demo:
将蜂鸣器的IO连接到物理引脚7;HC-SR04的Trig和Echo分别连到物理引脚11和13
dist_test.c:
#include <stdio.h>
#include <wiringPi.h>
#include <sys/time.h>
#define BEEP 7
#define Trig 0
#define Echo 2
void startHC() //先要给Trig一个至少10us/ms的高电平方波
{
digitalWrite (Trig, LOW) ;
delay(5);
digitalWrite (Trig, HIGH) ;
delay(5);
delay(5);
digitalWrite (Trig, LOW) ;
}
int main (void)
{
double diffTime;
double dist;
struct timeval startTime;
struct timeval stopTime;
wiringPiSetup () ; //初始化wiringPi库
pinMode (Trig, OUTPUT); //设置输入输出模式
pinMode (Echo, INPUT);
pinMode (BEEP, OUTPUT);
digitalWrite (Trig, LOW) ; //IO口写数据
digitalWrite (Echo, LOW) ;
while(1){
startHC();
while(digitalRead(Echo) == 0);//程序会卡在这里直到Echo变高的一瞬间
gettimeofday(&startTime,NULL);
while(digitalRead(Echo) == 1); //程序会卡在这里直到Echo变低的一瞬间
gettimeofday(&stopTime,NULL);
diffTime = 1000000*(stopTime.tv_sec - startTime.tv_sec) + (stopTime.tv_usec - startTime.tv_usec);
dist = 0.034 * diffTime * 0.5;
// printf("time = %f us\n",diffTime);
// printf("dist = %f\n",dist);
if(dist < 10){
digitalWrite (BEEP, LOW) ;
delay(100);
digitalWrite (BEEP, HIGH) ;
}else{
digitalWrite (BEEP, HIGH) ;
}
}
return 0;
}
编译语句:
gcc dist_test.c -lwiringPi
之前香橙派的时候好像要链好多库来着:
gcc XXX.c -lwiringPi -lwiringPiDev -lpthread -lm -lcrypt -lrt
代码成功运行!