注:本文翻译自respberry官方介绍文档

GPIO和40针头

Raspberry Pi的一个强大功能是沿着板的顶部边缘有一排GPIO(通用输入/输出)引脚。所有当前的Raspberry Pi板上都有一个40针的GPIO头(Raspberry-Pi-Zero、Raspberri-Pi-Zero-W和Raspber里-Pi-Zere-2 W上未安装)。在Raspberry Pi 1 Model B+(2014年)之前,董事会由一个较短的26针头组成。所有板(包括Raspberry Pi 400)上的GPIO头都有0.1英寸(2.54毫米)的针距。


树莓派引脚编程 python 树莓派控制引脚_stm32

任何GPIO引脚都可以(在软件中)指定为输入或输出引脚,并用于多种用途。

树莓派引脚编程 python 树莓派控制引脚_stm32_02

电压

板上有两个5V引脚和两个3.3V引脚,以及一些不可配置的接地引脚(0V)。其余引脚均为通用3.3V引脚,意味着输出设置为3.3V,输入为3.3V容差。

输入/出

输出:指定为输出引脚的GPIO引脚可以设置为高(3.3V)或低(0V)。
输入:指定为输入引脚的GPIO引脚可以读取为高(3.3V)或低(0V)。通过使用内部上拉或下拉电阻器,这变得更容易。引脚GPIO2和GPIO3具有固定的上拉电阻,但对于其他引脚,可以在软件中进行配置。

更多

除了简单的输入和输出设备外,GPIO引脚还可以与多种替代功能一起使用,其中一些可用于所有引脚,其他可用于特定引脚。

PWM(脉冲宽度调制)

    所有引脚上都有软件PWM

    GPIO12、GPIO13、GPIO18、GPIO19上提供硬件PWM

SPI公司

    SPI0:MOSI(GPIO10);MISO(GPIO9);SCLK(GPIO11);CE0(GPIO8)、CE1(GPIO7)

    SPI:MOSI(GPIO20);MISO(GPIO19);SCLK(GPIO21);CE0(GPIO18);CE1(GPIO17);CE2(GPIO16)

I2C型

    数据:(GPIO2);时钟(GPIO3)

    EEPROM数据:(GPIO0);EEPROM时钟(GPIO1)

序列号

    传输(GPIO14);接收(GPIO15)

GPIO引脚

通过打开终端窗口并运行命令,可以在Raspberry Pi上访问一个方便的参考pinput。此工具由GPIO零Python库,默认安装在Raspberry Pi OS中。

树莓派引脚编程 python 树莓派控制引脚_stm32_03


有关GPIO引脚高级功能的更多详细信息,请参阅gadgetoid交互式pinout图.

权限

为了使用GPIO端口,您的用户必须是gpio公司组。这个圆周率默认情况下,用户是成员,其他用户需要手动添加。

sudo usermod -a -G gpio <username>

Python中的GPIO

使用GPIO Zero该库使开始使用Python控制GPIO设备变得容易。该库在gpiozero.readthedocs.io.

LED

要控制连接到GPIO17的LED,可以使用以下代码:

from gpiozero import LED
from time import sleep

led = LED(17)

while True:
    led.on()
    sleep(1)
    led.off()
    sleep(1)

在类似Thonny的IDE中运行此操作,LED将反复闪烁。

LED方法包括打开(),关闭(),切换()、和闪烁().

按钮

要读取连接到GPIO2的按钮的状态,可以使用以下代码:

from gpiozero import Button
from time import sleep

button = Button(2)

while True:
    if button.is_pressed:
        print("Pressed")
    else:
        print("Released")
    sleep(1)

按钮功能包括属性按下(_P)和保留(_H); 回调按下时,发布时、和何时暂停; 和方法等待压力()和等待释放.

按钮+LED

要将LED和按钮连接在一起,可以使用以下代码:

from gpiozero import LED, Button

led = LED(17)
button = Button(2)

while True:
    if button.is_pressed:
        led.on()
    else:
        led.off()

或者

from gpiozero import LED, Button

led = LED(17)
button = Button(2)

while True:
    button.wait_for_press()
    led.on()
    button.wait_for_release()
    led.off()

from gpiozero import LED, Button

led = LED(17)
button = Button(2)

button.when_pressed = led.on
button.when_released = led.off