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

树莓派Python:基于按键布尔值控制GoPro拍照 解决sleep阻塞检测问题

树莓派Python相机控制脚本延时阻塞问题

核心需求

  • 运行环境:树莓派设备上运行Python脚本
  • 功能目标:
    • 当某布尔值为True时,控制相机每5秒拍摄一张照片
    • 该布尔值由物理按键触发切换,需求要求布尔值初始状态设为True
    • 初步设计方案:在主while(True)循环中检测变量状态,若值为True则启动每5秒拍照的逻辑

当前遇到的核心问题

  • 若在拍照逻辑分支中使用time.sleep(5),会冻结整个程序的运行流程,连带按键状态检测的逻辑也会被阻塞
  • 结合开发中使用的按键消抖逻辑,程序实际运行时几乎无法触发布尔值切换——必须精准卡在5秒等待结束、变量检测的时间点按下按键,操作才能生效

前期尝试的解决思路

  • 查阅相关资料后判断,可行的解决方案大概率需要引入线程实现,但暂时无法理清线程的落地逻辑
  • 曾构思一个变通方案:在主循环中读取系统时间,当秒数为5的倍数时触发拍照,但认为该方案可靠性不足

当前使用的脚本代码

from goprocam import GoProCamera, constants
import board
import digitalio
from adafruit_debouncer import Debouncer
import os
import shutil
import time


# GoPro 初始化设置
goproCamera = GoProCamera.GoPro()


# 物理按键初始化设置
pin = digitalio.DigitalInOut(board.D12)
pin.direction = digitalio.Direction.INPUT
pin.pull = digitalio.Pull.UP
switch = Debouncer(pin, interval=0.1)

save = False # 状态控制布尔变量

while(True):
    switch.update()
    if switch.fell:
        print("Pressed, toggling value")
        save = not save
        
    if save:
        goproCamera.take_photo()
        goproCamera.downloadLastMedia()
        time.sleep(5)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 19:54:08