在這篇文章中,您將學(xué)習(xí)如何創(chuàng)建Raspberry Pi上的Web應(yīng)用程序,使用Flask Web Framework控制伺服電機(jī),以創(chuàng)建Web應(yīng)用程序。我們將在Web應(yīng)用程序上創(chuàng)建兩個(gè)滑塊,它們將發(fā)送相應(yīng)的值,導(dǎo)致伺服電機(jī)在按下按鈕時(shí)移動(dòng)。
Flask是一個(gè)用Python編寫并由Armin Ronacher開發(fā)的Web應(yīng)用程序框架。領(lǐng)導(dǎo)一個(gè)名為Pocco的國(guó)際Python愛好者群體。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。兩者都是Pocco項(xiàng)目。
先決條件
確保您的Raspberry Pi是最新的。要更新Raspberry Pi,請(qǐng)鍵入以下命令: sudo apt-get update
要安裝Flask,我們需要有pip,因此請(qǐng)鍵入以下命令來(lái)安裝pip: sudo apt-get install python-pip
然后輸入以下命令來(lái)安裝Flask: sudo pip install flask
必需組件
Raspberry Pi
SG90伺服電機(jī)
跳線電纜
電路圖和說(shuō)明
這個(gè)項(xiàng)目的電路圖很簡(jiǎn)單 - 你只需要連接你的兩個(gè)伺服電機(jī)。進(jìn)行以下連接:
伺服電機(jī)1伺服電機(jī)2Raspberry Pi
黃色或橙色線
GPIO 26
Red Wire
5V
黑色或棕色線
GND
黃色或橙色線GPIO 19
紅線5V
黑色或棕色線GND
代碼演練
讓我們分析一下這個(gè)項(xiàng)目中使用的代碼。完整的代碼可以在文章的最后找到。
首先,我們導(dǎo)入了這個(gè)項(xiàng)目所需的燒瓶模塊。 render_template_string 模塊允許我們?cè)陧?xiàng)目中使用HTML。 請(qǐng)求模塊允許我們從HTML獲取數(shù)據(jù)。 RPi.GPIO 庫(kù)允許我們控制Raspberry Pi的GPIO引腳。
from flask import Flask, render_template_string, request
import RPi.GPIO as GPIO
from time import sleep
現(xiàn)在,我們啟用調(diào)試模式我們的項(xiàng)目。啟用調(diào)試模式的優(yōu)點(diǎn)是它可以在更改代碼時(shí)自動(dòng)重新加載服務(wù)器。它還提供了一個(gè)有用的調(diào)試器來(lái)跟蹤應(yīng)用程序中的錯(cuò)誤。
app.config[‘DEBUG’] = True
伺服電機(jī)在不動(dòng)時(shí)會(huì)抖動(dòng)一下。為了阻止它,我們使用以下行:
p.ChangeDutyCycle(0)
p1.ChangeDutyCycle(0)
如何運(yùn)行程序
創(chuàng)建Python文件并上傳代碼。接下來(lái),使用sudo命令運(yùn)行此文件以在端口5000 上的localhost啟動(dòng)服務(wù)器。
打開瀏覽器并輸入在https://127.0.0.1:5000中,打開一個(gè)網(wǎng)頁(yè),如下所示。
現(xiàn)在,按提交按鈕將發(fā)送值根據(jù)我們控制的伺服電機(jī)的滑塊。
完全代碼
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
+關(guān)注
關(guān)注
2文章
1263瀏覽量
69470 -
伺服電機(jī)
+關(guān)注
關(guān)注
85文章
2048瀏覽量
57869 -
樹莓派
+關(guān)注
關(guān)注
116文章
1707瀏覽量
105633 -
flask
+關(guān)注
關(guān)注
0文章
16瀏覽量
3614
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論