在启动时执行 .py 来触发 GPIO 按钮

在启动时执行 .py 来触发 GPIO 按钮

我是个菜鸟,这个任务并不像我乍一看想象的那么容易。我在一台 raspberryPi4 上Raspberry Pi OS 桌面及推荐软件已安装(与每个 ubuntu 非常相似,但 GPIO 从第一次启动开始就可以工作)。

成功之后,我编写了一个.py程序(名为按钮标签.py)改变了我的物理按钮,通过树莓派的GPIO引脚连接,被按下。
我需要在系统启动时启动这个.py脚本

#name of the file: button_tab.py
import RPi.GPIO as GPIO
import subprocess
import time

GPIO.setmode(GPIO.BOARD)


buttonPin = 36

GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:
    buttonState = GPIO.input(buttonPin)
    if buttonState == False:
        subprocess.call(["xdotool", "key", "ctrl+Tab"])
        time.sleep(0.5) 
   

当我通过以下方式执行该程序时,它运行良好:

python3 button_tab.py

每次我按下按钮,它都会更改所选中的选项卡窗口就像我按下键盘键一样Ctrl+Tab,并且它有0.5秒的冷却时间,以避免同时多次触发它。
我甚至创建了一个监听按钮脚本以便通过 bash 执行它。

#! /bin/sh
echo "Starting listen-for-button.py"
python3 /usr/bin/button_tab.py

当我手动启动它时,它也能工作

./listen_for_button.sh

现在的问题是:
我需要在启动时启动这个脚本
,所以我安装了所有 sudo 的 pip3 模块
(如sudo -H pip3 install subprocess.run)并开始尝试不同的解决方案:

  • 通过 crontab 运行它:( @reboot /home/pi/listen_for_button.sh不行)
  • 移动监听按钮/etc/init.d/ 通过 来启用它sudo rcconf(通过 安装后sudo aptitute install rcconf sysv-rc-conf)(不行)
  • 感谢@Ra,我已经编辑了sudo nano /etc/profile~/bashrc配置文件,/bin/bash /home/pi/listen_for_button.sh在文件底部添加了(有东西在动,但登录可能停留在我的进程上,因为没有显示桌面,只有黑屏)
  • 建造/lib/systemd/system/button_tab.service(剧透……没有)

#这button_tab.服务文件:

[Unit]
Description=Button Tab Service
After=multi-user.target
[email protected]
DefaultDependencies=false

[Service]
Type=simple
Environment="PATH=/home/{{ user }}/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
ExecStart=/usr/bin/python3 /usr/bin/button_tab.py
Restart=on-abort
User=pi
    
[Install]
WantedBy=multi-user.target

并通过以下方式启用它:

sudo systemctl daemon-reload
sudo systemctl enable button_tab.service
sudo systemctl start button_tab.service

进程运行正常(通过 询问状态时亮绿灯sudo systemctl status button_tab.service),但即使进程正在运行,按钮也不起作用。我尝试了不同的 .service 文件构造:这是最后一个版本。对 .service 文件的所有更改都产生了相同的结果:不行

我发现让按钮起作用的唯一方法是手动启动或按钮标签.py脚本或监听按钮脚本。

所有自动化方法均不起作用。

可能我忽略了一些基本的东西,比如 xdotool 的行为......我真的不知道!

请,我援引sudo help
感谢

答案1

解决了!感谢 @Ray 的评论,足以做到这一点:

sudo nano /etc/profile

并添加到文件底部:

nohup /bin/bash /home/pi/listen_for_button.sh

这样做后,~/bashrc 会在后台执行 .sh 文件,没有任何输出。因此登录过程可以顺利进行,并且 .sh 文件就像由用户执行一样 <3

我希望这可以帮助别人。祝一切顺利

答案2

最简单的方法。编辑sudo nano /etc/rc.local并添加sudo python3 /home/pi/sample.py &之前的内容exit 0,然后重新启动。

相关内容