You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派5使用gpiozero出现KeyError及SOC外设基址错误求助

树莓派5使用gpiozero控制LED报错:Cannot determine SOC peripheral base address

问题场景

我用全新树莓派5测试LED闪烁功能,电路已排除故障,LED连接GPIO17引脚,使用以下Python代码:

from gpiozero import LED
from time import sleep

led = LED(17)

try:
    while True:
        led.on()
        print('...LED ON')
        sleep(0.5)
        led.off()
        print('LED OFF...')
        sleep(0.5)
except KeyboardInterrupt:
    pass

运行脚本时出现如下错误:

/usr/lib/python3/dist-packages/gpiozero/devices.py:295: PinFactoryFallback: Falling back from lgpio: 'can not open gpiochip'
  warnings.warn(
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/gpiozero/pins/pi.py", line 408, in pin
    pin = self.pins[info]
          ~~~~~~~~~^^^^^^
KeyError: PinInfo(number=11, name='GPIO17', names=frozenset({'17', 'GPIO17', 17, 'WPI0', 'BOARD11', 'J8:11', 'BCM17'}), pull='', row=6, col=1, interfaces=frozenset({'', 'spi', 'gpio', 'dpi', 'uart'}))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/kevinkrupa13/raphael-kit/python-pi5/1.1.1_BlinkingLed_zero.py", line 6, in <module>
    led = LED(17)
          ^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 103, in __call__
    self = super().__call__(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/output_devices.py", line 192, in __init__
    super().__init__(pin, active_high=active_high,
  File "/usr/lib/python3/dist-packages/gpiozero/output_devices.py", line 74, in __init__
    super().__init__(pin, pin_factory=pin_factory)
  File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 75, in __init__
    super().__init__(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 549, in __init__
    pin = self.pin_factory.pin(pin)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/pins/pi.py", line 410, in pin
    pin = self.pin_class(self, info)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/gpiozero/pins/rpigpio.py", line 101, in __init__
    GPIO.setup(self._number, GPIO.IN, self.GPIO_PULL_UPS[self._pull])
RuntimeError: Cannot determine SOC peripheral base address

脚本已获取完整权限,求可行解决方案。


解决方案

1. 全量更新系统及GPIO相关库

树莓派5的硬件架构更新后,旧版本的GPIO控制库不支持新的SOC外设基地址,先更新系统和依赖:

sudo apt update && sudo apt full-upgrade -y
sudo apt install --reinstall python3-gpiozero python3-lgpio

2. 指定使用lgpio引脚工厂运行脚本

错误提示中提到从lgpio fallback失败,可强制gpiozero使用lgpio库(树莓派5官方推荐的GPIO控制库):

  • 方法一:运行脚本时通过环境变量指定
GPIOZERO_PIN_FACTORY=lgpio python3 1.1.1_BlinkingLed_zero.py
  • 方法二:在代码中直接指定引脚工厂
    修改后的代码如下:
from gpiozero import LED, Device
from gpiozero.pins.lgpio import LGPIOFactory
from time import sleep

# 指定使用lgpio引脚工厂
Device.pin_factory = LGPIOFactory()

led = LED(17)

try:
    while True:
        led.on()
        print('...LED ON')
        sleep(0.5)
        led.off()
        print('LED OFF...')
        sleep(0.5)
except KeyboardInterrupt:
    pass

3. 替换为支持树莓派5的RPi.GPIO替代库

旧版RPi.GPIO不兼容树莓派5,可安装新版替代库rpi-lgpio:

pip install rpi-lgpio

安装完成后重新运行原脚本即可。


内容的提问来源于stack exchange,提问作者KevinKrupa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 16:13:19