python - 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
- 请注意,我也尝试
After=Network.target
过After=Network-online.target
- 我还启用
NetworkManager-wait-online.service
了systemd-networkd-wait-online.service
我的 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)
解决方案
您可以通过在 .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)
推荐阅读
- javascript - 逻辑运算符 JavaScript &&
- flutter - 仅控制一页的颤动页面浏览小部件或变量
- apache-spark - 提供的 Maven 坐标必须采用 'groupId:artifactId:version' PySpark 和 Kafka 的形式
- r - 将 dfm 转换为数据框
- python - pygame.mixer.init() 在加载文件时出现奇怪的错误
- python - 如何在遇到特定数据类型之前索引到列表中?
- typescript - 为什么我们要为编程语言编写一个额外的测试文件夹,它也可以在 src 文件夹中运行测试?
- javascript - 制表器的内部 API 是否有备忘单,例如类似于 cell.getData()?
- python-3.x - CentOS切换用户会话时找不到python3.8
- jquery - $(this).val() 在加载时复制