在这篇文章中,您将学习如何创建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文章
1263浏览量
69446 -
伺服电机
+关注
关注
85文章
2046浏览量
57829 -
树莓派
+关注
关注
116文章
1707浏览量
105611 -
flask
+关注
关注
0文章
16浏览量
3614
发布评论请先 登录
相关推荐
评论