顯示具有 Flask 標籤的文章。 顯示所有文章
顯示具有 Flask 標籤的文章。 顯示所有文章

2023年1月14日 星期六

用Python Flask搭配Raspberry pi設計GardenPi 魚菜共生控制系統

今天(2023/1/14)是台灣魚菜共生產業促進會之理監事聯誼會的聚會,因為疫情大家已經有一年沒有一起聚會,2023年對促進會推廣魚菜共生是很重要的,會中大家提出幾項建議,相信在不久後就可以看到促進會的活動。

回想起敏哥參與魚菜共生的學習,要從一位南開畢業生談起,故事發生在10年前(2013年),一位畢業生回來找敏哥,他說想留在老師的實驗室練功學習,老師說可是我付不起您的薪水,只能申請國科會的計畫-銀髮族健康促進暨魚菜共生情境感知系統之研製, 計畫通過後展開大學和農民、社區間的魚菜共生的共學旅程。

2016台北國際發明展_組合架式室內魚菜共生栽培暨情境感知技術_廖俊欽同學(南開科技大學)
台灣魚菜共生產業促進會成立大會圓滿落幕
工作退休但人生不退休 生命的脈動,因為有動而更精彩!

聯誼會結束後,總是想著Python教學,隨手查閱Githup,發現有一套很不錯的開源系統,這套系統是採用Python Flask來開發Web人機介面,利用Raspberry pi來設計控制系統。 GardenPi開源軟體: https://github.com/rjsears/GardenPi

GardenPi開源系統:

(摘自GardenPi開源軟體)

(摘自GardenPi開源系統)

(摘自GardenPi開源系統)

2022年1月31日 星期一

MindAR: 使用Python Flask來實現WebAR

MindAR教學網站:https://hiukim.github.io/mind-ar-js-doc/face-tracking-quick-start/webpage

 Flask教學網站:https://flask.palletsprojects.com/en/2.0.x/quickstart/#a-minimal-application

1. 安裝Flask套件,開啟cmd應用程式,輸入下列命令。
pip install Flask


2.使用IDLE來編輯程式,並儲存成test.html。


3.切換到工作目錄,使用python test.py來啟動網站。


4.開啟Chrome進行測試,並輸入127.0.0.1:5000。


5.編輯face_ar.html文件,並儲存在templates資料來中,範例程式摘自Minimal Example

程式碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script src="https://cdn.jsdelivr.net/gh/hiukim/mind-ar-js@1.0.0/dist/mindar-face.prod.js"></script>
    <script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script>
    <script src="https://cdn.jsdelivr.net/gh/hiukim/mind-ar-js@1.0.0/dist/mindar-face-aframe.prod.js"></script>
  </head>

  <body>
    <a-scene mindar-face embedded color-space="sRGB" renderer="colorManagement: true, physicallyCorrectLights" vr-mode-ui="enabled: false" device-orientation-permission-ui="enabled: false">
      <a-camera active="false" position="0 0 0"></a-camera>

      <a-entity mindar-face-target="anchorIndex: 1">
    <a-sphere color="green" radius="0.1"></a-sphere>
      </a-entity>
    </a-scene>
  </body>
</html>

6.改寫Flask程式-test.py,黃底是新增的部份。

1
2
3
4
5
6
7
8
from flask import Flask
from flask import render_template

app = Flask(__name__)

@app.route("/")
def hello_world(name=None):
    return render_template('face_ar.html', name=name)

7.測試時要記得在cmd中按下Ctrl+C來中止網站,再執行Python test.py命令重新啟動網站。
8.重新更新Chrome的內容,就可看到AR。


2019年11月28日 星期四

夠Python,神奇修飾器的語法糖


本篇文章將介紹修飾器,在這之前我們先說明Flask網站設計。

第一次看到Python微型網站框架Flask的程式,心中就有一種感覺,為何短短6行指令就能建構出網站的框架?

1
2
3
4
5
6
7
8
from flask import Flask, escape, request

app = Flask(__name__)

@app.route('/')
def hello():
    name = request.args.get("name", "World")
    return f'Hello, {escape(name)}!'

第一行程式大家都很熟悉的flask套件ask套件匯入三個元件Flask, escape, request,Flask用來建立flask的微型網站(第三行),request則是用來取得瀏覽器所送來的參數"name"(第七行),若無則預設為"world",escape則是用來處理脫逸符號(第八行),如:'<'和'>'等。

不過上面程式執行後並沒有結果,必須在加上主程式。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from flask import Flask, escape, request

app = Flask(__name__)

@app.route('/')
def hello():
    name = request.args.get("name", "World")
    return f'Hello, {escape(name)}!'

if __name__ == "__main__":
    app.run()

如上圖中的第11行,app.run(),啟動Flask物件的執行,請在命令列cmd上執行本範例。

執行127.0.0.1:500即可看到結果。
執行結果:

測試一下夾帶參數,注意在下圖網址欄中輸入參數。

查看一下命令列的訊

接下來我們來說明程式第五行
@app.route('/')
這是使用修飾器(Decorator)中的語法糖(Syntactic Sugar),就能夠把網址和想要執行函式挷定,以本範例為例,當使用者僅輸入127.0.0.1:5000時,表示要啟動首頁,這時就會呼叫hello()函式。


以下我們使用一個範例來說明修飾器的語法糖,當我們呼叫myfunc函式時,會把myfunc函式包括修飾器所指定的函式,用這種作法的好處是很容易實現框架,因為框架是先被設計出來,而網頁函式是較晚才被設計出來,如何讓以前的程式來叫未來函式,這種做法是不是很像魔法師中的魔法棒。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def decorate(func):
    def wrapper_func(*arg):
        print("執行前")
        func(*arg)
        print("執行後")
    return wrapper_func

@decorate
def myfunc(parameter):
    print(parameter)

myfunc("Hello")



執行結果: