在這篇文章中,您將學習如何創建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文章
1272瀏覽量
69758 -
伺服電機
+關注
關注
85文章
2060瀏覽量
58257 -
樹莓派
+關注
關注
117文章
1710瀏覽量
105897 -
flask
+關注
關注
0文章
16瀏覽量
3636
發布評論請先 登錄
相關推薦
AWTK-WEB 快速入門(4) - JS Http 應用程序
![AWTK-<b class='flag-5'>WEB</b> 快速入門(4) - JS Http <b class='flag-5'>應用程序</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
SSM框架在Java開發中的應用 如何使用SSM進行web開發
HarmonyOS Web開發性能優化指導
AWTK-WEB 快速入門(2) - JS 應用程序
![AWTK-<b class='flag-5'>WEB</b> 快速入門(2) - JS <b class='flag-5'>應用程序</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
AWTK-WEB 快速入門(1) - C 語言應用程序
![AWTK-<b class='flag-5'>WEB</b> 快速入門(1) - C 語言<b class='flag-5'>應用程序</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
伺服電機原理及控制應用
華納云:java web和java有什么區別java web和java有什么區別
![華納云:java <b class='flag-5'>web</b>和java有什么區別java <b class='flag-5'>web</b>和java有什么區別](https://file1.elecfans.com/web2/M00/FD/AC/wKgaomaWBouAMAnAAAAglmvluP4293.png)
通過I2C PWM IC控制伺服,可以為伺服控制進行高優先級中斷嗎?
鴻蒙原生應用元服務開發-Web相關說明
使用Docker部署Go Web應用程序步驟
![使用Docker部署Go <b class='flag-5'>Web</b><b class='flag-5'>應用程序</b>步驟](https://file1.elecfans.com/web2/M00/D1/67/wKgZomYjG8yAboHUAAAU3ZokeRA952.png)
評論