树莓派自启动

本文介绍了如何在树莓派上将Python程序设置为开机自启动,包括在rc.local、autostart和/etc/init.d中添加启动项,以及创建并配置服务脚本。以控制LED灯闪烁的Python程序为例,还涉及到了Python版本兼容性问题的处理。
摘要由CSDN通过智能技术生成

一. 程序自启动

之前在树莓派上写的程序,都是通过ssh连接后在控制台上用命令行启动的,这种方式适合测试和调试,完善好程序后,比较好的方法是把程序设置为开机自启动,这样树莓派一上电就开始运行程序。查阅网上的资料,主要有三种方法,一是在rc.local添加启动项;二是在~/.config/autostart中添加桌面启动应用;三是在/etc/init.d/中添加服务项。

二. 编辑测试程序

首先编辑一个python程序用来测试,这里以一个简单树莓派控制LED灯闪烁为例,文件名为led.py 。

#!/usr/bin/env python
 
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.OUT)
#休眠20s等待系统初始化
time.sleep(10)
while True:
 try:
   GPIO.output(21,True)
   time.sleep(1)
   GPIO.output(21,False)
   time.sleep(1)
 except (KeyboardInterrupt, SystemExit):
   GPIO.close()
   print "exit"

1. #!/usr/bin/env python 不可以缺少。

2. 程序中如果有cv2.imshow('frame', frame),一定要注释掉。

3. 在程序开始尽量加上time.sleep(10),延时10ms,等待系统初始化。

终端输入
sudo chmod 777  /home/pi/led.py
给你的py文件增加权限

三. 通过服务脚本自启动

执行ls /etc/init.d 可以看到该目录下有很多服务程序文件,在这里添加自己的服务文件,就可以对其进行配置从而实现自启动。在该目录下新建文件Auto_Start_Test,编辑内容:

可以使用sudo nano /etc/init.d/Auto_Start_Test来编辑Auto_Start_Test文件。

#!/bin/bash
#/etc/init.d/Auto_Start_Test

### BEGIN INIT INFO
# Provides: Auto_Start_Test
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Auto Start Test 
# Descrption: This service is used to test auto start service
### END INIT INFO

case "$1" in
    start)
        echo "Start"
        nohup python3 /home/pi/led.py&
        ;;
    stop)
        echo "Stop"
        killall led.py
        exit 1
        ;;
    *)
        echo "Usage:service Auto_Start_Test start|stop"
        exit 1
        ;;
esac
exit 0

这是一个bash脚本,指定了用start和stop命令进行服务的启动和停止,“BEGIN INIT INFO”那段注释是LSB标准说明,有的博客可能会说写不写都行,但我建议一定要留下,因为我之前删除了就一直不好使。保存文件,执行sudo chmod 777 Auto_Start_Test 开放权限。

设置python脚本开机启动

sudo service Auto_Start_Test start #启动 操作A
sudo service Auto_Start_Test stop #停止

#最后设置开机启动就好了 操作B
sudo update-rc.d Auto_Start_Test defaults
这样就完工了,重启树莓派就会发现led自己闪烁了。

操作A失败则报错:


操作B失败则报错:

操作B成功则:

重启后!!! ps -ef | grep Auto_Start  查看线程信息

最后sudo systemctl enable Auto_Start_Test.service开启服务。重要!!!

sudo systemctl status Auto_Start_Test.service ,查看服务状态。通过这个命令可详细查看为啥自启动服务无法运行。服务启动状态报错:

若出现如下情况

是因为ubuntu系统启动程序默认使用python2.7,而opencv则安装在python3.7环境中。

先使用ls /usr/bin/python *查看系统中存在的python版本
然后移除软连接,更改python默认版本
sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3.7 /usr/bin/python

四. 参考链接

1. 树莓派笔记10:测试几种开机自启动的方法 - 古月居

2.  树莓派程序自启动-CSDN博客

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值