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

树莓派运行Python脚本:RPi.GPIO引脚模式设置后仍报RuntimeError求助

解决RPi.GPIO引脚模式设置报错的方案

以下是针对报错RuntimeError: Please set pin numbering mode using GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)的具体排查和解决步骤:

  • 优先检查setmode语句的执行顺序
    必须把GPIO.setmode(GPIO.BOARD)或GPIO.setmode(GPIO.BCM)放在所有GPIO操作的最前面,不能在设置模式前调用GPIO.setup()、GPIO.input()等函数。
    错误示例:

    import RPi.GPIO as GPIO
    GPIO.setup(10, GPIO.IN)  # 先执行了setup,未设置模式,触发报错
    GPIO.setmode(GPIO.BOARD)
    

    正确示例:

    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BOARD)  # 先设置引脚模式
    GPIO.setup(10, GPIO.IN)
    # 后续传感器读取代码
    
  • 排查重复设置或模块冲突
    如果脚本中多次调用GPIO.setmode(),或者引入的其他第三方模块也在操作GPIO,可能导致模式被覆盖。可以在设置前先检查当前模式状态:

    import RPi.GPIO as GPIO
    if not GPIO.getmode():  # 仅当未设置模式时执行设置
        GPIO.setmode(GPIO.BCM)
    
  • 确保运行脚本的权限
    GPIO操作需要root权限,直接用普通用户运行脚本会触发权限相关的隐性问题,尝试用sudo python3 your_script.py命令运行。

  • 更新RPi.GPIO库版本
    旧版本库可能存在模式设置的bug,执行以下命令更新到最新版:

    sudo pip3 install --upgrade RPi.GPIO
    
  • 清理残留的GPIO资源
    之前的脚本异常退出可能导致GPIO资源被占用,在脚本开头添加清理语句:

    import RPi.GPIO as GPIO
    GPIO.cleanup()  # 清理之前残留的GPIO配置
    GPIO.setmode(GPIO.BOARD)
    # 后续setup和读取代码
    

    也可以在终端执行sudo rmmod gpio_bcm2835清理模块,再用sudo modprobe gpio_bcm2835重新加载。

内容的提问来源于stack exchange,提问作者syed babar ali shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:10:05