在這篇文章中,您將學習如何創建Raspberry Pi上的Web應用程序,使用Flask Web Framework控制伺服電機,以創建Web應用程序。我們將在Web應用程序上創建兩個滑塊,它們將發送相應的值,導致伺服電機在按下按鈕時移動。
Flask是一個用Python編寫并由Armin Ronacher開發的Web應用程序框架。領導一個名為Pocco的國際Python愛好者群體。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。兩者都是Pocco項目。
先決條件
確保您的Raspberry Pi是最新的。要更新Raspberry Pi,請鍵入以下命令: sudo apt-get update
要安裝Flask,我們需要有pip,因此請鍵入以下命令來安裝pip: sudo apt-get install python-pip
然后輸入以下命令來安裝Flask: sudo pip install flask
必需組件
Raspberry Pi
SG90伺服電機
跳線電纜
電路圖和說明
這個項目的電路圖很簡單 - 你只需要連接你的兩個伺服電機。進行以下連接:
伺服電機1伺服電機2Raspberry Pi
黃色或橙色線
GPIO 26
Red Wire
5V
黑色或棕色線
GND
黃色或橙色線GPIO 19
紅線5V
黑色或棕色線GND
代碼演練
讓我們分析一下這個項目中使用的代碼。完整的代碼可以在文章的最后找到。
首先,我們導入了這個項目所需的燒瓶模塊。 render_template_string 模塊允許我們在項目中使用HTML。 請求模塊允許我們從HTML獲取數據。 RPi.GPIO 庫允許我們控制Raspberry Pi的GPIO引腳。
from flask import Flask, render_template_string, request
import RPi.GPIO as GPIO
from time import sleep
現在,我們啟用調試模式我們的項目。啟用調試模式的優點是它可以在更改代碼時自動重新加載服務器。它還提供了一個有用的調試器來跟蹤應用程序中的錯誤。
app.config[‘DEBUG’] = True
伺服電機在不動時會抖動一下。為了阻止它,我們使用以下行:
p.ChangeDutyCycle(0)
p1.ChangeDutyCycle(0)
如何運行程序
創建Python文件并上傳代碼。接下來,使用sudo命令運行此文件以在端口5000 上的localhost啟動服務器。
打開瀏覽器并輸入在https://127.0.0.1:5000中,打開一個網頁,如下所示。
現在,按提交按鈕將發送值根據我們控制的伺服電機的滑塊。
完全代碼
from flask import Flask, render_template_string, request # Importing the Flask modules required for this project
import RPi.GPIO as GPIO # Importing the GPIO library to control GPIO pins of Raspberry Pi
from time import sleep # Import sleep module from time library to add delays
# Pins where we have connected servos
servo_pin = 26
servo_pin1 = 19
GPIO.setmode(GPIO.BCM) # We are using the BCM pin numbering
# Declaring Servo Pins as output pins
GPIO.setup(servo_pin, GPIO.OUT)
GPIO.setup(servo_pin1, GPIO.OUT)
# Created PWM channels at 50Hz frequency
p = GPIO.PWM(servo_pin, 50)
p1 = GPIO.PWM(servo_pin1, 50)
# Initial duty cycle
p.start(0)
p1.start(0)
# Flask constructor takes the name of current module (__name__) as argument.
app = Flask(__name__)
# Enable debug mode
app.config[‘DEBUG’] = True
# Store HTML code
TPL = ‘’‘
Web Application to Control Servos
Slider 1
Slider 2
’‘’
# which URL should call the associated function.
@app.route(“/”)
def home():
return render_template_string(TPL)
@app.route(“/test”, methods=[“POST”])
def test():
# Get slider Values
slider1 = request.form[“slider1”]
slider2 = request.form[“slider2”]
# Change duty cycle
p.ChangeDutyCycle(float(slider1))
p1.ChangeDutyCycle(float(slider2))
# Give servo some time to move
sleep(1)
# Pause the servo
p.ChangeDutyCycle(0)
p1.ChangeDutyCycle(0)
return render_template_string(TPL)
# Run the app on the local development server
if __name__ == “__main__”:
app.run()
-
Web
+關注
關注
2文章
1241瀏覽量
68668 -
伺服電機
+關注
關注
83文章
1878瀏覽量
56660 -
樹莓派
+關注
關注
114文章
1654瀏覽量
104871 -
flask
+關注
關注
0文章
16瀏覽量
3589
發布評論請先 登錄
相關推薦
評論