如何实现按下按钮启动无人机与树莓派时自动运行风速测量Python程序?
解决按钮触发开机+自动启动风速测量代码的方案
我来一步步帮你搞定这个问题,分三个核心部分实现,完美适配你的需求:
1. 配置树莓派GPIO开机按钮
首先得让按钮能触发树莓派开机,这样你可以用同一个按钮同时启动无人机(假设按钮是双联/带两路输出)和唤醒树莓派:
- 选一个空闲GPIO引脚(比如GPIO3,对应物理引脚第5针),把按钮一端接这个引脚,另一端接GND(物理引脚第6针)。
- 编辑树莓派启动配置文件:
sudo nano /boot/config.txt - 在文件末尾添加一行配置:
这行代码的作用是把GPIO3设为开机触发引脚,低电平有效,同时启用内部上拉电阻避免误触发。dtoverlay=gpio-shutdown,gpio_pin=3,active_low=1,gpio_pull=up - 保存退出后重启树莓派,之后按下按钮就能正常触发开机了。
2. 开机自动启动Screen会话并运行测量代码
你之前用screen管理进程,那我们用systemd服务实现开机自动创建Screen会话并运行脚本,不用再手动找PID:
具体步骤:
- 创建systemd服务文件:
sudo nano /etc/systemd/system/wind-speed-measurement.service - 粘贴以下内容(记得替换成你的实际路径和命令):
[Unit] Description=Wind Speed Measurement Screen Service After=multi-user.target # 确保系统进入多用户模式后再启动 [Service] User=pi # 换成你的树莓派用户名,一般是pi Type=forking # 创建名为wind_measurement的后台Screen会话,并运行测量脚本 ExecStart=/usr/bin/screen -dmS wind_measurement /usr/bin/python3 /home/pi/wind_measure.py Restart=always # 脚本意外退出时自动重启 RestartSec=5 [Install] WantedBy=multi-user.target - 重新加载systemd配置并启用服务:
sudo systemctl daemon-reload sudo systemctl enable wind-speed-measurement.service
后续访问会话的方式:
之后要查看或操作这个测量会话,直接用会话名访问就行,不用找PID:
screen -r wind_measurement
3. 同步无人机启动与测量流程
如果你的按钮是同时控制树莓派开机和无人机启动,只要把按钮做成双联开关:一路接树莓派的GPIO开机触发电路(或电源),另一路接无人机的启动电路。按下按钮后,树莓派开始开机,无人机同步启动,等树莓派开机完成,自动运行测量代码,刚好衔接上测量任务。
额外小提示:
- 先单独测试GPIO开机功能,确保按钮能正常唤醒树莓派
- 手动启动服务测试:
sudo systemctl start wind-speed-measurement.service,用screen -r确认脚本运行正常后再开自启 - 如果测量代码依赖网络或硬件模块,可以在
[Unit]部分添加After=network.target,确保依赖就绪后再启动脚本
内容的提问来源于stack exchange,提问作者Freeky_out
相关产品推荐
相关产品推荐

