在树莓派上使用 GPIO Zero 控制 GPIO


树莓派的 40 Pin GPIO 引脚功能如下图。任何 GPIO 引脚都可以在软件中指定为输入或输出,可适用广泛的用途。



注意:GPIO 引脚的编号不按数字顺序排列,板上存在 GPIO 引脚 0 和 1(物理引脚 27 和 28),但进行了保留,用于高级用途(见下文)。

电压

两个5V引脚、两个3.3V引脚,以及一些不可配置的接地引脚(0V)。意味着输出设置为3.3V,输入为3.3V容差

输出

GPIO作为输出,可以设为高(3.3V) 或者低(0V).

输入

GPIO作为输入,可以读取为高(3.3V) 或者低(0V)。使用上拉或下拉电阻器可以更轻松地实现。GPIO2 和 GPIO3 固定上拉电阻,其他引脚可以在软件中配置。

其他

除了简单的输入和输出设备,GPIO引脚还可以用于各种替代功能,有些可用于所有引脚,有些可用于特定引脚。

  • PWM (脉冲宽度调制)
    • 软 PWM 适用于所有端口
    • 硬 PWM 只适用于 GPIO12, GPIO13, GPIO18, GPIO19
  • SPI
    • SPI0:MOSI (GPIO10); MISO (GPIO9); SCLK (GPIO11); CE0 (GPIO8), CE1 (GPIO7)
    • SPI1: MOSI (GPIO20); MISO (GPIO19); SCLK (GPIO21); CE0 (GPIO18); CE1 (GPIO17); CE2 (GPIO16)
  • I2C
    • Data: (GPIO2); Clock (GPIO3)
    • EPROM Data: (GPIO0); EEPROM Clock (GPIO1)
  • Serial
    • TX (GPIO14); RX (GPIO15)

GPIO pinout

可以在终端窗口,运行 pinout 查看参考信息。Raspberry Pi OS 默认已经安装好了 GPIO Zero Python 库。

有关 GPIO 引脚高级功能的更多详细信息,可参考这里

权限

为了能使用 GPIO 端口,你需要将用户加到 gpio 组。 pi 用户默认是在 gpio 组中,其他用户需要自己加入。

sudo usermod -a -G gpio <username>

GPIO in Python

GPIO Zero 可以很方便使用 Python 控制 GPIO。

LED
使用 GPIO17 控制 led,示例:

from gpiozero import LED
from time import sleep

led = LED(17)

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

使用 python file 运行示例,Led 将反复闪烁和熄灭。

LED 函数包括:on()、off()、toggle() 和 blink()。

按键
使用 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)

按钮功能包括
属性:is_pressed、is_held
回调函数:when_pressed()、when_released()、when_held()
方法:wait_for_press()、wait_for_release()

按键 + 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

更多关于 GPIO Zero Python 库,可参考这里

本文转自树莓派开发者公众号



5 评论

  1. 运行到led = LED(17)这一行代码报错:

    发生异常: BadPinFactory
    Unable to load any default pin factory!
    File “/home/fly/code/python/test/gpio_test.py”, line 4, in
    led = LED(17)
    ^^^^^^^
    gpiozero.exc.BadPinFactory: Unable to load any default pin factory!

发表评论

你的邮件地址不会公开


*