树莓派GPIO的简单控制
General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器。也就是树莓派上那一堆引脚。
GPIO库
- wiringPi C,有Perl,PHP,Ruby,Node.js和Golang的扩展,支持wiringPi Pin 和BCM GPIO两种编号
- RPi.GPIO Python, 支持Board Pin和BCM GPIO两种编号
- Webiopi,Python,使用BCM GPIO编号
- BCM2835, 使用BCM GPIO编号
- WiringPi-GO,GO语言,支持以上三种编号
具体情况如下图:
Board Pin 编号为板上的自然编号,左边引脚为1、3、5……39;右边引脚为2、4、6……40。RPi.GPIO.setmode(GPIO.BOARD)采用这列编号
BCM GPIO为树莓派主芯片提供商Broadcom的编号方法,相当于调用了WiringPiSetupGpio()或RPi.GPIO.setmode(GPIO.BCM)采用这列编号

Python
安装:
新的系统(2015/11月的)好像自带了
sudo apt-get install python-dev
安装python pip
sudo apt-get install python-pip
安装python的GPIO库
sudo apt-get install rpi.gpio
代码示例
#python
import RPi.GPIO as GPIO
import time
a = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(a,GPIO.OUT)
while True:
GPIO.output(a,GPIO.HIGH)
time.sleep(1)
GPIO.output(a,GPIO.LOW)
time.sleep(1)
GPIO.cleanup()
C
wiringPi库
安装:
git clone git://git.drogon.net/wiringPi
cd wiringPi
./build
测试有没有安装好
$gpio -v
$gpio readall
//c
#include <wiringPi.h>
// LED Pin - wiringPi pin 0 is BCM_GPIO 17.
#define LED 21
int main ()
{
wiringPiSetup () ;
pinMode (LED, OUTPUT) ;
for (;;)
{
digitalWrite (LED, HIGH) ; // On
delay (500) ; // mS
digitalWrite (LED, LOW) ; // Off
delay (500) ;
}
return 0 ;
}
编译需要用
gcc -Wall -o test test.c -lwiringPi
然后sudo ./test
BCM2835库
安装
- 下载:
$ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.35.tar.gz - 解压缩:
$tar xvzf bcm2835-1.35.tar.gz - 进入压缩之后的目录:
$cd bcm2835-1.35 - 配置:
$./configure - 从源代码生成安装包:
$make - 执行检查:
$sudo make check - 安装 bcm2835库:
$sudo make install
//c
#include <bcm2835.h>
// P1插座第11脚
#define PIN RPI_GPIO_P1_11
int main(int argc, char **argv)
{
if (!bcm2835_init())
return 1;
// 输出方式
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
while (1)
{
bcm2835_gpio_write(PIN, HIGH);
bcm2835_delay(100);
bcm2835_gpio_write(PIN, LOW);
bcm2835_delay(100);
}
bcm2835_close();
return 0;
}
