今天跟大家分享一個利用樹莓派和L298N模塊制作手機遙控小車的程序莫辨。具體小車的硬件鏈接我將不再這里贅述剩岳,網(wǎng)上會搜索到很多教程劈猿。在這只和大家交流分享利用Python實現(xiàn)的程序代碼。先上一張效果圖坎吻。
1.程序思路:
(1)在樹莓派上編寫一個控制小車運行的文件index.py缆蝉。
(2)在樹莓派上利用Python的bottle庫建立web應用服務,運行main.py瘦真。
(3)在手機瀏覽器訪問樹莓派上的遙控器網(wǎng)頁index.html刊头,實現(xiàn)與index.py程序交互,進而控制小車運行诸尽。
2.程序文件:
(1)控制小車運行的Python文件:index.py
#!/usr/bin/env python3
from bottle import get,post,run,request,template
import RPi.GPIO as GPIO
import time
IN1 = 11
IN2 = 12
IN3 = 13
IN4 = 15
def init():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(IN1,GPIO.OUT)
GPIO.setup(IN2,GPIO.OUT)
GPIO.setup(IN3,GPIO.OUT)
GPIO.setup(IN4,GPIO.OUT)
# 前進
def forward(tf):
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
time.sleep(tf)
GPIO.cleanup()
# 后退
def down(tf):
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.HIGH)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.HIGH)
time.sleep(tf)
GPIO.cleanup()
# 左轉(zhuǎn)彎
def left(tf):
GPIO.output(IN1,GPIO.LOW)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.HIGH)
GPIO.output(IN4,GPIO.LOW)
time.sleep(tf)
GPIO.cleanup()
# 右轉(zhuǎn)彎
def right(tf):
GPIO.output(IN1,GPIO.HIGH)
GPIO.output(IN2,GPIO.LOW)
GPIO.output(IN3,GPIO.LOW)
GPIO.output(IN4,GPIO.LOW)
time.sleep(tf)
GPIO.cleanup()
# 停止
def stop():
GPIO.output(IN1,False)
GPIO.output(IN2,False)
GPIO.output(IN3,False)
GPIO.output(IN4,False)
GPIO.cleanup()
@get("/")
def index():
return template("index")
@post("/cmd")
def cmd():
print("按下了按鈕: "+request.body.read().decode())
init()
sleep_time = 1
arg = request.body.read().decode()
if(arg=='up'):
forward(sleep_time)
elif(arg=='down'):
down(sleep_time)
elif(arg=='left'):
left(sleep_time)
elif(arg=='right'):
right(sleep_time)
elif(arg=='stop'):
stop()
else:
return False
#return "OK"
run(host="0.0.0.0",port="8080")
(2)建立Web服務的Python文件:main.py
#!/usr/bin/env python3
from bottle import get,post,run,request,template
@get("/")
def index():
return template("index")
@post("/cmd")
def cmd():
print("按下了按鈕: "+request.body.read().decode())
#return "OK"
run(host="0.0.0.0",port="8080")
(3)控制小車的網(wǎng)頁html文件:index.html
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>樹莓派遙控小車</title>
<link rel="stylesheet" media="screen">
<script src="http://code.jquery.com/jquery.js"></script>
<style type="text/css">
#up {
margin-left: 55px;
margin-bottom: 3px;
}
#down {
margin-top: 3px;
margin-left: 55px;
}
</style>
<script>
$(function(){
$("button").click(function(){
$.post("/cmd",this.id,function(data,status){});
});
});
</script>
</head>
<body>
<div id="container" class="container">
<div>
<button id="up" class="btn btn-lg btn-primary glyphicon glyphicon-circle-arrow-up"></button>
</div>
<div>
<button id='left' class="btn btn-lg btn-primary glyphicon glyphicon-circle-arrow-left"></button>
<button id='stop' class="btn btn-lg btn-primary glyphicon glyphicon-stop"></button>
<button id='right' class="btn btn-lg btn-primary glyphicon glyphicon-circle-arrow-right"></button>
</div>
<div>
<button id='down' class="btn btn-lg btn-primary glyphicon glyphicon-circle-arrow-down"></button>
</div>
</div>
<script src="http://cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>
3.程序原理及代碼解析
(1)main.py 文件中通過使用Python最輕量級的web框架bottle在樹莓派上建立web應用服務原杂,并設置服務開放的端口號為8080,進而實現(xiàn)通過手機等客戶端訪問樹莓派上的html網(wǎng)頁文件您机。
(2)index.py 文件中通過引用Python的GPIO庫穿肄,實現(xiàn)通過樹莓派的11、12际看、13咸产、14號GPIO接口鏈接控制L298N模塊,進而控制小車的馬達實現(xiàn)小車的運動仲闽。
(3)index.html通過使用js的click事件脑溢,檢測網(wǎng)頁中的button點擊情況并反饋給index.py文件,從而實現(xiàn)通過點擊按鈕實現(xiàn)對小車的控制赖欣。
(4)以上三個文件需放置到同一文件路徑下屑彻。
在這里推薦一篇bottle框架學習文章:Bottle手冊(0.13-dev)中文翻譯r