如何用Tinkerboard S GPIO按键触发Shell脚本切换循环视频
Tinkerboard S GPIO按键切换循环播放视频脚本实现
一、GPIO引脚准备
- 先通过
gpio readall命令确认你接按键的GPIO引脚编号(注意区分物理引脚与BCM编号) - 示例假设使用BCM编号17(对应物理引脚11),按键一端接该引脚,另一端接地
二、完整脚本实现
#!/bin/bash # 配置GPIO参数(根据实际接线修改) GPIO_PIN=17 # 视频文件列表,按切换顺序添加 VIDEOS=("video_loop1.mp4" "video_loop2.mp4" "video_loop3.mp4") # 当前播放视频索引(从0开始) CURRENT_IDX=0 # 记录播放进程ID PLAY_PID="" # 初始化GPIO init_gpio() { echo $GPIO_PIN > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIO_PIN/direction echo "falling" > /sys/class/gpio/gpio$GPIO_PIN/edge } # 清理资源(脚本退出时执行) cleanup_gpio() { echo $GPIO_PIN > /sys/class/gpio/unexport [ -n "$PLAY_PID" ] && kill $PLAY_PID 2>/dev/null exit 0 } # 后台监听按键事件 listen_key() { while true; do cat /sys/class/gpio/gpio$GPIO_PIN/value > /dev/null # 防抖处理,避免误触 sleep 0.1 # 循环更新视频索引 CURRENT_IDX=$(( (CURRENT_IDX + 1) % ${#VIDEOS[@]} )) # 终止当前播放进程,触发切换 [ -n "$PLAY_PID" ] && kill $PLAY_PID 2>/dev/null done } # 注册退出信号,确保资源清理 trap cleanup_gpio EXIT INT TERM # 初始化并启动按键监听 init_gpio listen_key & # 主播放循环 while true; do CURRENT_VIDEO=${VIDEOS[$CURRENT_IDX]} gst-play-1.0 "$CURRENT_VIDEO" & PLAY_PID=$! # 等待播放进程结束(被按键终止也会走到此处) wait $PLAY_PID sleep 1 done
三、关键细节说明
- GPIO适配:若按键接VCC+下拉电阻,需将边缘检测参数改为
rising - 防抖调整:
sleep 0.1可根据按键实际抖动情况修改时长 - 循环切换逻辑:通过取模运算实现视频列表循环,播完最后一个自动回到第一个
- 进程管理:每次切换时终止旧播放进程,避免资源占用导致新视频无法启动
四、使用步骤
- 将脚本保存为
video_switch.sh - 赋予执行权限:
chmod +x video_switch.sh - 运行脚本:
./video_switch.sh
内容的提问来源于stack exchange,提问作者Overflow467
相关产品推荐
相关产品推荐

