【问题标题】:arduino yun uhttpd flask setuparduino yun uhttpd 烧瓶设置
【发布时间】:2014-02-14 23:19:13
【问题描述】:

我正在尝试在 arduino yun 上设置 python 和烧瓶。我已经设法通过 /etc/config/uhttpd 配置文件运行 python 文件:

...
list interpreter    ".py=/usr/bin/python"
...

网站根目录的默认路径是:/www,我在其中放置了指向 sd 卡的软链接(应用程序)。所以现在我可以运行 python 程序了:http://[ip arduino]/apps/helloworld.py

当我创建我的第一个 helloflask.py 程序并通过 python helloflask.py 运行它时,我可以在以下位置看到结果:http://[ip arduino]:5000

但现在我想配置 uhttpd 迷你网络服务器(能够通过 CGI 交换信息)以使用烧瓶设置。 URI:http://flask.pocoo.org/docs/deploying/cgi/#server-setup 显示了一些说明……但我就是不明白。我创建了一个目录 ../apps/uno,在其中放置了一个 __init__.py 文件,其内容如下:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "He Flask!"   

在应用程序目录中,我放置了一个文件:cgi.py,其中包含以下内容:

from wsgiref.handlers import CGIHandler
from uno import app

CGIHandler().run(app)

现在我浏览:http://[ip arduino]/cgi.py 出现服务器错误,联系管理员(我认为这是来自 uhttpd 的 CGI 接口)。

我只是不了解 Flask/uhttpd 的 CGI 配置

【问题讨论】:

    标签: python flask arduino cgi


    【解决方案1】:

    我也对此进行了研究,并且更进一步,我能够设置一个简单的 hello world,但是一旦我尝试做一些不平凡的事情,我遇到了一个大问题,即 uhttpd 不支持 URL 重写/别名。这意味着您的烧瓶应用程序只能在其 .py 文件的 URL 上提供服务,而不是像 http:// (arduino IP) /flaskapp/ 这样的根目录。应用程序内的所有路由都将不可见,并使整个程序无法使用。

    但是,我没有尝试强制烧瓶进入 uhttpd,而是在运行烧瓶提供的内置服务器方面取得了巨大成功。看看我写的这个指南,它使用烧瓶来提供来自云的数据:https://learn.adafruit.com/smart-measuring-cup/overview

    要做的是在脚本运行时添加对 app.run 的调用,例如让你的烧瓶应用看起来像:

    from flask import Flask
    app = Flask(__name__)
    
    @app.route("/")
    def hello():
        return "Hello Flask!"
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True, threaded=True)
    

    然后登录云并使用python运行脚本。 Flask 的内置服务器应该开始在 http:// (arduino IP) :5000/ 上为应用程序提供服务。确保包含 host='0.0.0.0' 因为它是侦听 Yun 的外部网络接口所必需的。您可能还需要 debug=True 以便有更好的错误消息(以及在代码更改时实时重新加载服务器),我发现 threaded=True 有帮助,因为默认服务器一次只处理一个连接。 Yun 是一个相对较慢的处理器,因此不要期望处理大量并发请求,但它非常有能力为少数用户提供简单的 REST API 或 Web 应用程序。

    如果您希望此服务器始终在启动时运行,请编辑 /etc/rc.local 文件以包含对 python 和您的脚本的调用。

    【讨论】:

    • 谢谢,希望这个周末我有空再去YUN!
    猜你喜欢
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2012-07-31
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多