上一章我们讲解了在linux系统下如何通过读写设备文件的方式控制GPIO点亮LED灯,本章我们继续讲解如果通过使用中间层库函数编程控制GPIO.
	一、wiringPi
	1、wiringPi安装
		(1)方案1-使用GIT工具
		通过GIT获得wiringPi的源码
build脚本会帮助你编译和安装wiringPi
	    (2)方案1-使用GIT工具
在windows上下载wiringPi库,并复制到树莓派中,运行如下命令解压安装。(xxx代表版本号)
	2、测试
	wiringPi包括一套gpio命令,使用gpio命令可以控制树莓派上的各种接口,通过以下指令可以测试wiringPi是否安装成功。

       从上图可以知道树莓派管脚有三种编号方式,下面以Pioneer600扩展板的LED1为例,第一种为板上编号(37),即中间两列,表示第几号插针。第二中为wiringPi编码(25),使用wiringPi库编程时是用wiringPi编号,第三种为BCM编号,这个是更加BCM管脚来编号的,使用bcm2835库或python的RPi.GPIO编程时使用BCM编号。
我们可以使用gpio命令操作树莓派GPIO,下面我们可以gpio命令控制Pioneer600扩展的LED1.
设置管脚为输出模式,-g参数表示是以BCM编号方式,如果去掉这个参数测以wiringPi编号方式,即为25。
设置管脚为高电平,点亮LED.
设置管脚为低电平,熄灭LED,
读取管脚当前状态
更多gpio命令请查看:https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/
     3、wiringPi程序:
  cpp代码:
| 06 |     if(wiringPiSetup() < 0)return1; | 
| 07 |     pinMode (LED,OUTPUT) ; | 
| 11 |         digitalWrite(LED, 1) ; | 
| 13 |         digitalWrite(LED, 0) ; | 
使用vi将代码添加到led.c文件中,运行如下命令编译并执行程序。按Ctrl+C终止程序。
| 1 | gcc -Wall -o led  led.c  -lwiringPi | 
注:(1)-Wall 表示编译时显示所有警告,-lwringPi表示编译时动态加载wringPi库
	(2)终止程序后,LED的状态为不确定,这和python程序相比显得有点不足。
关于更多wiringPi的库函数,可参看wiringPi官网,也可参考wiringPi用户手册。
http://wenku.baidu.com/link?url=U_APBvE_ga5pSSwPwWABIGJymLVwyC-0W9AEOT2cjhlZzoLywa0-QpElYNT2yHvNV0P7BbqTZCgG0ctaqZLi_ovkAGXREBOE6h68eTt-Q3y
          二、 bcm2835
	bcm2835库是树莓派cpu芯片的库函数,相当于stm32的固件库一样,底层是直接操作寄存器。而wiringPi库和python的RPi.GPIO库其底层都是通过读写linux系统的设备文件操作设备。
         1、安装bcm2835库
	从bcm22835官网(http://www.airspayce.com/mikem/bcm2835/)下载最新版本的库,然后解压安装。
| 1 | tar -zxvf bcm2835-1.xx.tar.gz | 
	2、示例程序
	新建名为led.c的文件,添加如下程序。
  cpp代码:
| 04 | intmain(intargc, char**argv) | 
| 06 |     if(!bcm2835_init())return1; | 
| 07 |     bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); | 
| 11 |         bcm2835_gpio_write(PIN, HIGH); | 
| 13 |         bcm2835_gpio_write(PIN, LOW); | 
编译并执行程序,按Ctrl+C可结束程序。
| 1 | gcc –Wall led.c –o led –lbcm2835 | 
注:(1)-lbcm2835表示动态加载bcm2835库
	(2)注意bcm2835程序管脚使用bcm编号,和wiringPi编号不一样。
	(3)和wiringPi一样,程序结束时GPIO的状态不确定。
	三、python
	1、安装RPi.GPIO
	(1)先安装python-dev,输入以下指令。
| 1 | sudo apt-get install python-dev | 
	(2)安装RPi.GPIO
| 1 | <span style="font-size: 9pt; line-height: 1.8em;">#下载 | 
| 4 | tar -zxvf RPi.GPIO-0.5.11.tar.gz | 
| 8 | sudo python setup.py install</span> | 
	2.示例程序
新建led.py文件,添加如下代码并保存。
| 03 | import RPi.GPIO asGPIO | 
| 09 | GPIO.setup(LED,GPIO.OUT) | 
| 12 |         GPIO.output(LED,GPIO.HIGH) | 
| 14 |         GPIO.output(LED,GPIO.LOW) | 
执行程序,按Ctrl+C结束程序
注:(1)#!/usr/bin/env python,定义python解析脚本的绝对路径。
    (2)# -*- coding: utf-8 -*- ,python文件为utf-8格式,否则无法写入中文注释。
         (3)  GPIO.setmode(GPIO.BCM),采用bcm编号方式。
    (4) python程序使用try except语言,当按下Ctrl+C结束程序是会触发异常,程序执行gpio.cleanup()语句清楚GPIO管脚状态。
对python语言不是很熟悉的孩童,可以查看Python基础教程:http://www.runoob.com/python/python-tutorial.html
这里有一个python语言的wiringPi库,有兴趣的可以参考:https://github.com/WiringPi/WiringPi2-Python