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 GPIO
import time
# blinking function
def 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 numbers
GPIO.setmode(GPIO.BOARD)
# set up GPIO output channel
GPIO.setup(11, GPIO.OUT)
# blink GPIO17 50 times
for 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 True
GPIO.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_11
int 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 output
bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);
// Blink
while (1)
{
// Turn it on
bcm2835_gpio_write(PIN, HIGH);
// wait a bit
bcm2835_delay(500);
// turn it off
bcm2835_gpio_write(PIN, LOW);
// wait a bit
bcm2835_delay(500);
}
bcm2835_close();
return 0;
}