本文介绍树莓派上GPIO引脚的三种编号方式,同时介绍控制引脚的方式。并以BCM-17引脚为例,动手点亮led灯并使其闪烁。

GPIO是通用输入输出接口。树莓派上有40个引脚,对这40个引脚主要有两种编号方式。

  • BOARD 和引脚物理顺序一致
  • BCM
  • wiringpi编号

wiringPi是一个用来控制GPIO的库,它对40个引脚的编号方式如下:

详细信息参考此网址

wiringpi引脚定义

wiringPi 安装方式

  • 应用于C语言和shell
git clone git://git.drogon.net/wiringPi
cd wiringPi
git pull origin
./build
# 测试安装成功
gpio -vmake
gpio readall
  • 应用于Python
sudo pip install wiringpi2

测试example程序

  1. 将发光二极管的阳极连接BOARD的pin11,也就是BCM17,wiringPi 0,中间需要串一个100-500欧姆的限流电阻。阴极连接到GND引脚(BOARD 9)。 命令行输入:

    gpio write 0 1

    可观察到发光二极管被点亮

    gpio函数其他用法参见文档

  2. 编译示例C语言程序程序,使led闪烁

cd wiringPi/examples/
./blink.sh
# 或者
make blink
./blink

使用Python控制GPIO

树莓派原生系统内置的python已经安装了RPi.GPIO库,通过它可以方便的控制GPIO

可以参考以下两份文档:

General-RPIO

Python-RPIO

Python实现LED闪烁,引脚依然是BCM-17

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
print("All set in Python! Let's blink the LCD on BCM-17")
for i in range(1,10):
   GPIO.output(17,GPIO.HIGH)
   sleep(1)
   GPIO.output(17,GPIO.LOW)
   sleep(1)

GPIO.cleanup()

使用wiringpi库来控制连接BCM-17的led灯闪烁,具体使用说明参看: python-wiringpi使用教程

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import wiringpi
from time import sleep
# 设置wiringpi编号0引脚为输出模式
wiringpi.wiringPiSetup()
wiringpi.pinMode(0,1)

while True:
    wiringpi.digitalWrite(0,True)
    sleep(1)
    wiringpi.digitalWrite(0,False)
    sleep(1)

以下为wiringpi的三种引脚编号:

  • BCM
  • BOARD
  • wiringpi

三种控制模式:

  • input
  • output
  • pwm

设置示范如下:


# GPIO 引脚号就是BCM编号 
import wiringpi  
wiringpi.wiringPiSetupGpio()  
wiringpi.pinMode(25, 0) # sets GPIO 25 to input  
wiringpi.pinMode(24, 1) # sets GPIO 24 to output  
wiringpi.pinMode(18, 2) # sets GPIO 18 to PWM mode  

# wiringpi 编号 
import wiringpi  
wiringpi.wiringPiSetup()  
wiringpi.pinMode(6, 0) # sets WP pin 6 to input  
wiringpi.pinMode(5, 1) # sets WP pin 5 to output  
wiringpi.pinMode(1, 2) # sets WP pin 1 to PWM mode  

# 物理编号 BOARD编号 
import wiringpi  
wiringPiSetupPhys()  
wiringpi.pinMode(22, 0) # sets P1 pin 22 to input  
wiringpi.pinMode(18, 1) # sets P1 pin 18 to output  
wiringpi.pinMode(12, 2) # sets P1 pin 12 to PWM mode