首页 > 解决方案 > Raspberry Pi Flask Server 关机后无法访问

问题描述

我按照YouTube 视频创建了一个带有 Raspberry Pi 的远程可视摄像头,教程的源代码可在此处获得。基本上,它创建了一个 Flask 服务器来流式传输 Pi 相机的实时信息,该信息可通过其他设备上的浏览器获得。我遇到的问题是在关闭并启动 Pi 后我无法获得提要。如果我重新启动 Pi,调试应用程序或手动启动服务,一切正常,但是如果我真的关闭 Pi,拔下它,重新插入并让它启动,服务器似乎无法启动并且尽管服务状态显示它正在运行,但无法从包括 Pi 本身在内的任何设备访问视频费用。每当我插入 Pi、操作系统启动并连接到预定义的网络时,我都需要启动此服务器。

sudo python3 /home/pi/pi-camera-stream-flask/main.py在 /etc/profile 文件末尾添加的教程状态的最后部分应该启动启动烧瓶服务器的 main.py 文件。这不起作用,所以我创建了一个服务来在有网络连接后启动应用程序,如下所示:

[Unit]
Description=Start Camera Flask
After=systemd-networkd-wait-online.service
Wants=systemd-networkd-wait-online.service

[Service]
User=pi
WorkingDirectory=/home/pi/pi-camera-stream-flask/
ExecStart=sudo python3 /home/pi/pi-camera-stream-flask/main.py
Restart=always

[Install]
WantedBy=multi-user.target

我的 Python 应用程序如下所示:

#Modified by smartbuilds.io
#Date: 27.09.20
#Desc: This web application serves a motion JPEG stream
# main.py
# import the necessary packages
from flask import Flask, render_template, Response, request
from camera import VideoCamera
import time
import threading
import os

pi_camera = VideoCamera(flip=False) # flip pi camera if upside down.

# App Globals (do not edit)
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html') #you can customze index.html here

def gen(camera):
    #get camera frame
    while True:
        frame = camera.get_frame()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')

@app.route('/video_feed')
def video_feed():
    return Response(gen(pi_camera),
                    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    
    app.run(host='192.168.0.14', port=5000, debug=False) # have also tried app.run(host='0.0.0.0', debug=False)

标签: pythonlinuxflaskraspberry-pi

解决方案


您可以通过在 .bashrc 中进行设置来尝试在每次连接电源时自动启动您的代码

sudo nano /home/pi/.bashrc

向下滚动到底部。添加这两行

echo running flask
sudo python3 /home/pi/pi-camera-stream-flask/main.py

尝试先删除 /etc/profile 中的编辑

并确保你在开始时有一些冷却时间,可能是 5 秒 time.sleep(5)


推荐阅读