树莓派运行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
相关产品推荐
相关产品推荐

