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

Python类方法作为GPIO回调时提示收到2个参数是什么原因?

问题原因

GPIO.add_event_detect绑定的回调函数默认会自动传入触发事件的GPIO引脚编号作为额外参数。你的capture_image实例方法仅定义了self一个位置参数,实际运行时会收到self+引脚编号两个参数,参数数量不匹配触发报错。

查看传入参数的方法

修改capture_image方法的签名,新增参数接收GPIO传入的值,打印即可查看内容:

def capture_image(self, channel):
    # 新增这行打印传入的参数
    print(f"传入的额外参数为:{channel}")
    global wait
    wait = False 
    self.date = datetime.datetime.now().strftime('%m-%d-%Y_%H.%M.%S')
    self.camera.capture('/home/pi/Pictures/' + self.date + '.jpg')
    print("\r\nImage Captured! \r\n")
    wait = True

打印出来的参数值就是你绑定事件的23号引脚编号。

解决方案

有两种可选方案:

  • 方案1:保留新增的channel参数即可,即使你业务逻辑不需要用到这个参数,也可以留作占位接收GPIO的自动传参,不需要修改其他调用逻辑。
  • 方案2:如果不想修改原方法的定义,可以在绑定回调时用lambda表达式忽略额外参数:
GPIO.add_event_detect(23,GPIO.FALLING,callback = lambda channel: camera.capture_image(), bouncetime = 300)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 09:54:05