Wiring Pi下载与安装
树莓派使用C语言编程操纵GPIO时, 主要有 BCM2835 C Library和Wiring Pi两种, 其中, Wiring Pi 的API函数封装基本与Arduino的相同, 使用更广泛, 也更容易上手.
参考 Wiring Pi官网Download and Install
①安装GIT
sudo apt-get install git-core
如果出现错误, 可以先升级下Raspbian
sudo apt-get update
sudo apt-get upgrade
②使用GIT安装WiringPi
git clone git://git.drogon.net/wiringPi
然后编译安装
cd wiringPi
./build
但是我的git那里出错了:
Cloning into ‘wiringPi’…
fatal: unable to connect to git.drogon.net:
git.drogon.net: Name or service not known
作者给出的解释是
the most likely cause is that your work/school/college/university/palace firewall is blocking GIT. A lot do for some reason.
大概是GIT被防火墙屏蔽了, 然后作者建议使用Plan B:
从 https://git.drogon.net/?p=wiringPi;a=summary 下载最新版, 然后
tar xfz wiringPi-98bcb20.tar.gz
cd wiringPi-98bcb20
./build
有些麻烦, 没用它, 在stackoverflow上发现用 https:// 代替 git:// 效果不错, 于是在GitHub上找到WiringPi的地址: https://github.com/WiringPi/WiringPi
然后使用以下命令下载到当前目录(/home/pi):
git clone https://github.com/WiringPi/WiringPi
下载完后, 切换到WiringPi文件夹:
cd WiringPi
运行build脚本自动编译安装:
./build
完成后会给出提示:
NOTE: To compile programs with wiringPi, you need to add:
-lwiringPi
to your compile line(s) To use the Gertboard, MaxDetect, etc.
code (the devLib), you need to also add:
-lwiringPiDev
to your compile line(s).
③测试WiringPi的安装
输入命令 gpio -v
查看版本信息:
输入命令 gpio readall
读取所有的GPIO的状态:
这个图很有用, 当我们对GPIO编程时, 可以查看对应的引脚编号.
Blink
Blink is the “Hello World” of the microcontroller world.
①接线
参考上面使用 gpio readall
命令读出的引脚图wPi一栏, 我们接树莓派wPi编号的0到LED的正极, LED的负极通过一个1kΩ的电阻连接到GND:
②编写程序
我们把路径切换到桌面, 新建一个Blink的文件夹, 然后切换到Blink文件夹新建一个blink.c的文件:
cd /home/pi/Desktop
mkdir Blink
cd Blink
sudo nano blink.c
写入以下代码:
#include <stdio.h>
#include <wiringPi.h> //使用wringPi的库
// LED Pin - wiringPi pin 0 is BCM_GPIO 17.
#define LED 0
int main (void)
{
printf ("Raspberry Pi - Gertboard Blink\n") ;
wiringPiSetup () ; //必须包含, 用来打开GPIO使得程序可以使用
pinMode (LED, OUTPUT) ; //设置LED(0)引脚为输出
for (;;)
{
digitalWrite (LED, 1) ; // On LED引脚输出高电平
delay (500) ; // mS 延时500ms
digitalWrite (LED, 0) ; // Off LED引脚输出低电平
delay (500) ;
}
return 0 ;
}
按下Ctrl + X 离开, 按下Y写入, 回车, 然后输入命令编译:
gcc blink.c -o myBlink -lwiringPi
表示gcc使用wiringPi编译源文件blink.c, 输出到文件myBlink.
输入命令:
sudo ./myBlink
运行当前路径下的myBlink文件. 这时, 可以看到终端打印出 Raspberry Pi - Gertboard Blink
并且LED闪烁.
如果想结束程序运行, 按下Ctrl+C即可, 不过注意树莓派的引脚电平保持在我们离开的那一刻而不是恢复默认, 这是上面的一个程序中不尽如人意的地方. 使用C时不太清楚, 使用Python编程时, 可以很方便的捕获键盘异常, 然后退出时清除所有的GPIO配置.
消除delay
20160327更新
上面的程序中使用了delay(500)来延时, 但如果我们想在for( ; ; )死循环中写其他程序, 又不想等这500ms, 同时还要保证每隔500ms LED变换一下状态, 可以使用WiringPi提供的函数:
unsigned int millis (void)
This returns a number representing the number of milliseconds since your program called one of the wiringPiSetup functions. It returns an unsigned 32-bit number which wraps after 49 days.
这个函数返回程序运行wiringPiSetup()函数开始后程序的运行时间. 我们再创建一个blink_plus.c的文件如下:
cd /home/pi/Desktop/Blink
sudo nano blink_plus.c
写入以下代码
#include <stdio.h>
#include <wiringPi.h>
//LED Pin - wiringPi pin 0 is BCM_GPIO 17.
#define LED 0
int main (void)
{
int tempTime = 0;
int passedTime = 0;
int totalTime = 100; //100ms
int count = -1;
printf ("Raspberry Pi - Gertboard Blink\n") ;
wiringPiSetup () ; //必须包含, 用来打开GPIO使得程序可以使用
pinMode (LED, OUTPUT) ; //设置LED(0)引脚为输出
tempTime = millis();
for (;;)
{
passedTime = millis() - tempTime;
if (passedTime > totalTime) {
tempTime = millis();
//totalTime = 100; //可以改变周期
++count;
if (count%10 == 0) {
digitalWrite (LED, 1) ;
} else if (count%10 == 5) {
digitalWrite (LED, 0) ;
} else {
;
}
}
//add your other codes;
}
return 0 ;
}
按下Ctrl+X, 然后Y, 然后回车, 编译运行:
gcc blink_plus.c -o myBlinkPlus -lwiringPi
sudo ./myBlinkPlus
可以看到LED不断的闪烁. 按下Ctrl+C停止程序的运行. 关于软件定时器的封装, 我后面会单独开一篇来讲.
参考:
http://wiringpi.com/examples/gertboard-and-wiringpi/blink/
How to Write and Run a C Program on the Raspberry Pi
http://wiki.jikexueyuan.com/project/raspberry-pi/gpio.html
http://blog.csdn.net/weifengdq/article/details/50598490