1. 树莓派GPIO引脚对照表 2. GPIO引脚用途 3. GPIO编程

 

 

1. 树莓派GPIO引脚对照表

           

注:本表格适用于各版本,并且兼容26Pin的树莓派B,树莓派B为26Pin,其引脚对应于上表的前26Pin。

尺寸图:

2. GPIO引脚用途

   

在这个40Pin管脚中,除了12个电源类外,其余28个都是可编程的GPIO,其中部分GPIO可以复用为IIC,SPI,UART,PWM等等,可以用来驱动各种外设。

I2C是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。树莓派通过I2C接口可控制多个传感器和组件。它们的通信是通过SDA(数据引脚)和SCL(时钟速度引脚)来完成的。每个从设备都有一个唯一的地址,允许与许多设备间快速通信。ID_EEPROM引脚也是I2C协议,它用于与HATs通信。

SPI是串行外设接口,用于控制具有主从关系的组件,采用从进主出和主进从出的方式工作,树莓派上SPI由SCLK、MOSI、MISO接口组成,SCLK用于控制数据速度,MOSI将数据从树莓派发送到所连接的设备,而MISO则相反。

有使用Arduino的朋友一定听说过UART或Serial,通用异步收/发器接口用于将Arduino连接到为其编程的计算机上,也用于其他设备与 RX 和 TX 引脚之间的通信。如果树莓派在 raspi-config 中启用了串口终端,则可以使用这些引脚通过电脑来控制树莓派,也可以直接用于控制Arduino。

在树莓派上,所有的引脚都可以实现软件PWM,而GPIO12、GPIO13、GPIO18、GPIO19可以实现硬件脉宽调制。

 

3. GPIO编程

3.1 主流GPIO库介绍

       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三种编号

 

3.2 GPIO版本及接口编号定义

1. 输入“gpio -v”看下我们树莓派内置的版本。

2. 输入“gpio readall”查看我们接口编号的定义。

3. Python 代码举例(LED闪烁)

import RPi.GPIO as GPIOimport time# blinking functiondef blink(pin):GPIO.output(pin,GPIO.HIGH)time.sleep(1)GPIO.output(pin,GPIO.LOW)time.sleep(1)return# to use Raspberry Pi board pin numbersGPIO.setmode(GPIO.BOARD)# set up GPIO output channelGPIO.setup(11, GPIO.OUT)# blink GPIO17 50 timesfor i in range(0,50):blink(11)GPIO.cleanup()
import RPi.GPIO as GPIO  //引入函数库
import time
RPi.GPIO.setmode(GPIO.BOARD)  //设置引脚编号规则
RPi.GPIO.setup(12, RPi.GPIO.OUT)    //将12号引脚设置成输出模式
while TrueGPIO.output(channel, 1)   //将引脚的状态设置为高电平,此时LED亮了time.sleep(1)   //程序休眠1秒钟,让LED亮1秒GPIO.output(channel, 0)   //将引脚状态设置为低电平,此时LED灭了time.sleep(1)   //程序休眠1秒钟,让LED灭1秒
GPIO.cleanup()    //程序的最后别忘记清除所有资源

4.  Wiring Pi      C语言编程举例(物理针脚11为例,对应的wPi为GPIO0)

#include <stdio.h>
#include <wiringPi.h>int main(void)
{int LED = 0;wiringPiSetup();pinMode(LED, OUTPUT);printf("LED is blinking...\r\n");while(1){printf("LED:%d is on \r\n", LED);digitalWrite(LED, HIGH);delay(500);printf("LED:%d is off \r\n", LED);digitalWrite(LED, LOW);delay(500);}return 0;
}
#include <wiringPi.h>
int main(void)
{wiringPiSetup();pinMode (1, OUTPUT);for(;;){digitalWrite(1, HIGH); delay (500);digitalWrite(1, LOW); delay (500);}
}

 

5. BCM2835 C Library           Blinks RPi GPIO pin 11 on and off

// blink.c
//
// Example program for bcm2835 library
// Blinks a pin on an off every 0.5 secs
//
// After installing bcm2835, you can build this 
// with something like:
// gcc -o blink blink.c -l bcm2835
// sudo ./blink
//
// Or you can test it before installing with:
// gcc -o blink -I ../../src ../../src/bcm2835.c blink.c
// sudo ./blink
//
// Author: Mike McCauley
// Copyright (C) 2011 Mike McCauley
// $Id: RF22.h,v 1.21 2012/05/30 01:51:25 mikem Exp $#include <bcm2835.h>
#include <stdio.h>// Blinks on RPi Plug P1 pin 11 (which is GPIO pin 17)
#define PIN RPI_GPIO_P1_11int main(int argc, char **argv)
{// If you call this, it will not actually access the GPIO// Use for testing
//    bcm2835_set_debug(1);if (!bcm2835_init())return 1;// Set the pin to be an outputbcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);// Blinkwhile (1){// Turn it onbcm2835_gpio_write(PIN, HIGH);// wait a bitbcm2835_delay(500);// turn it offbcm2835_gpio_write(PIN, LOW);// wait a bitbcm2835_delay(500);}bcm2835_close();return 0;
}