1. 前言
树莓派「raspberry pi」小车控制是一个经典的项目,很多人都喜欢尝试。而微信小程序则成为了这个项目的一个新的控制方式。在本篇文章中,我们将分步骤介绍如何将树莓派小车与微信小程序相连,并通过小程序远程控制小车。
2. 准备工作
2.1 硬件准备
在控制小车前,我们需要准备以下硬件:
树莓派(Raspberry Pi)
L298N电机驱动模块
4个直流电机
3个电池盒(4节干电池)
杜邦线若干(选用长度适当的杜邦线可能会更方便)
小车底盘(一般买小车的同时就有)
2.2 软件准备
在树莓派上,我们需要安装以下软件:
Python 2.7
RPi.GPIO库
Flask框架
3. 程序流程
在树莓派上,我们需要编写一个Python程序,使得树莓派能够接受来自微信小程序的请求,并通过L298N电机驱动模块控制小车的运动。程序具体流程如下:
3.1 微信小程序端
在微信小程序端,在前端页面设计时,我们需要提供以下功能:
方向控制按钮:控制小车前进、后退、左转或右转
速度控制按钮:控制小车行驶速度
3.2 树莓派端
在树莓派端,我们需要实现以下步骤:
创建一个Flask应用,用于接收来自微信小程序的请求
根据请求的内容,控制L298N电机驱动模块,实现小车的运动
3.2.1 创建Flask应用
首先,我们需要在树莓派上安装Flask框架。在终端中执行以下命令:
sudo pip install flask
接下来,我们创建一个新的Python文件app.py,并编写以下代码:
from flask import Flask,request
app = Flask(__name__)
@app.route('/',methods=['POST'])
def hello_world():
cmd = request.get_data().decode('utf-8')
print(cmd)
# 在此处添加控制L298N电机驱动模块的代码,控制小车运动
return 'success'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=80)
在以上代码中,我们创建了一个Flask应用,并在路由/处定义了POST请求处理函数hello_world,在此处我们可以接收微信小程序发送的请求,并获取请求内容cmd,最后返回'success'表示成功处理请求。
3.2.2 控制L298N电机驱动模块实现小车运动
在hello_world函数中,我们需要根据请求的内容cmd实现小车的运动。我们假设以下几个方向控制指令:
'forward' :小车前进
'backward' :小车后退
'left' :小车左转
'right' :小车右转
'stop' :小车停止
根据以上指令,我们需要构造L298N电机驱动模块的命令,并通过GPIO口发送给树莓派,实现小车的控制。以下是一个简单的实现示例:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
IN1 = 37
IN2 = 38
IN3 = 40
IN4 = 36
ENA = 33
ENB = 35
def forward():
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.HIGH)
def backward():
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.HIGH)
GPIO.output(IN3, GPIO.HIGH)
GPIO.output(IN4, GPIO.LOW)
def left():
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.HIGH)
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.HIGH)
def right():
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.HIGH)
GPIO.output(IN4, GPIO.LOW)
def stop():
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.LOW)
GPIO.output(IN3, GPIO.LOW)
GPIO.output(IN4, GPIO.LOW)
GPIO.setup(IN1,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(IN2,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(IN3,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(IN4,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(ENA,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(ENB,GPIO.OUT,initial=GPIO.LOW)
ENA_PWM = GPIO.PWM(ENA,1000)
ENB_PWM = GPIO.PWM(ENB,1000)
ENA_PWM.start(10)
ENB_PWM.start(10)
while True:
cmd = input()
if cmd == 'forward':
forward()
ENA_PWM.ChangeDutyCycle(30)
ENB_PWM.ChangeDutyCycle(30)
elif cmd == 'backward':
backward()
ENA_PWM.ChangeDutyCycle(30)
ENB_PWM.ChangeDutyCycle(30)
elif cmd == 'left':
left()
ENA_PWM.ChangeDutyCycle(30)
ENB_PWM.ChangeDutyCycle(30)
elif cmd == 'right':
right()
ENA_PWM.ChangeDutyCycle(30)
ENB_PWM.ChangeDutyCycle(30)
elif cmd == 'stop':
stop()
ENA_PWM.ChangeDutyCycle(0)
ENB_PWM.ChangeDutyCycle(0)
在以上代码中,我们通过GPIO口控制L298N电机驱动模块的IN1到IN4引脚,实现小车的不同运动方向。其中,我们通过ENA和ENB控制小车的速度。在程序运行时,我们通过input函数不断获取指令,在此处我们假设控制指令都通过键盘输入,方便我们的测试。
4. 总结
通过以上流程,我们可以掌握通过微信小程序控制树莓派小车的基本方法。当然,以上程序仅仅是一个简单的实现示例,在实际项目中,我们还需要考虑很多方面:比如如何在小程序中获取小车的状态反馈信息、如何控制小车的转向角度等等。希望本文的内容能够对读者有所帮助。