树莓派之所以这么成功,除了超高性价比和完善的生态系统外,其开放的40Pin对外接口功不可没,这40Pin管脚中,除了12个电源类外,其余28个都是可编程的GPIO,其中部分GPIO可以复用为IIC,SPI,UART,PWM等等,可以用来驱动各种外设。但是这些GPIO的编号有些混乱,不同的API对于GPIO的编号不一样,而不同的API对于开发语言的支持也不同。其中比较主流的API库有以下几种:
1、wiringPi C,有Perl, PHP, Ruby, Node.JS和Golang的扩展,支持wiringPi Pin和BCM GPIO两种编号
2、RPi.GPIO Python,支持Board Pin和BCM GPIO两种编号
3、WiringPi-Go, Go语言,支持wiringPi Pin、BCM GPIO和Board Pin三种编号
看起来还是有些混乱,但是只要选择好自己需要的开发语言就可以了,比如选择Python语言,选择RPi.GPIO就好,其他语言选择wiringPi就好。
编写程序之前,先来连接硬件。
如图连接树莓派管脚和led灯,注意led的长管脚为正极,连接GPIO,短管脚连接GND。
首先我们来看看使用C语言如何控制GPIO。
使用Putty远程登录到树莓派后,执行命令:gpio -v,可以看到默认情况下树莓派是已经安装了wirpingPi了。
我们可以使用命令行gpio readall查看树莓派的管脚定义。
vi led.c
使用vi工具创建一个led.c。
输入如下代码:
#include <wiringPi.h>
int main(void)
{
wiringPiSetup();
pinMode (1, OUTPUT);
for(;;)
{
digitalWrite(1, HIGH); delay (500);
digitalWrite(1, LOW); delay (500);
}
}
代码很简单,不用做过多的解释,这里需要注意的是,数字1是wPi管脚编号,通过查表可以知道,这个是板子上的物理编号12号。我们已经在这个GPIO上接了一个LED灯,接下来就可以控制这个灯了。
保存文件并退出vi后,编译并运行。
gcc -Wall -o led led.c -lwiringPi
sudo ./led
可以看到外接的LED灯已经开始闪烁,C语言控制GPIO成功了。
本人虽然从事C语言开发多年,但是Python最近是在是太火了,藉此机会正好学习一下Python语言开发,所以接下来所有代码均由Python实现。
执行pyton命令后可以看到树莓派也已经默认安装好了python开发环境了,版本是2.7.13。此时我们看到提示符变成了三个大于号,说明已经进入pyton的交互环境了,退出可以使用quit()。
vi led.py
创建并编辑一个python文件。输入代码如下:
保存为led.py,然后运行这个Python程序。
sudu python led.py
此时外接的LED灯开始闪烁,说明Python控制LED灯成功。
有时候在执行上面的命令时,会遇到警告:
led.py:7: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(12, GPIO.OUT)
这个原因是我上次使用C语言控制了12号引脚的GPIO,系统认为被使用了,会有警告,但是程序还是会正常执行的。如果想去掉这个警告,一是重启系统,二是换一个GPIO去控制就好了。
总结:通过代码编写,发现整个Python代码还是很简洁的,适合于那些没有C语言基础的朋友学习,Python 不仅上手简单,而且其解释语言的特性使得程序不用编译,对代码做了任何修改之后就能直接运行,极大方便了调试。当然对于有多年C语言开发习惯的人,想学习一下Python也是不错的选择。