您当前的位置:个人博客

【原创】树莓派3+L298Nwifi遥控小车


博主: neuhxy   2017-11-12 08:45

前一段时间买了两个树莓派,看了看板子的性能,跑个CentOS Minimal版还行,运行Ubuntu Mate发热非常严重,索性拿出来一个板子做个Wifi遥控小车,在Allen的帮助下,买了小车的底盘、电源控制模块、电池、杜邦线等。

安装之后的样子:

搭建过程:

首先,在SD卡里刷入了Ubuntu Mate系统,然后配置了开机自动登录,连接了常用的Wifi。在Ubuntu系统中安装了Python 3, 以及pip 接下来安装了 flask 及PIO模块。

编写核心代码:

'''
#=============================================================================
#     FileName: views.py
#         Desc: 
#       Author: wangheng
#        Email: wujiwh@gmail.com
#     HomePage: http://wangheng.org
#      Version: 0.0.1
#   LastChange: 2015-01-14 13:46:29
#      History:
#=============================================================================
'''
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
from contextlib import closing
from pi_car import app
import re
import RPi.GPIO as GPIO
@app.route('/')
def show_index():
	return render_template('home.html')

@app.route("/login", methods=["GET", "POST"])                                   
def login():                                                                    
	if request.method=="GET":                                                   
		return "get"+request.form["user"]
	elif request.method=="POST":                                                
		return "post"

@app.route('/ctl',methods=['GET','POST'])
def ctrl_id():
	if request.method == 'POST':
		id=request.form['id']
		freq= float(request.form['freq'])
		print('Freq:',freq)
		
		GPIO.setmode(GPIO.BOARD)
		GPIO.setwarnings(False)
		GPIO.setup(11,GPIO.OUT)
		GPIO.setup(12,GPIO.OUT)
		GPIO.setup(15,GPIO.OUT)
		GPIO.setup(16,GPIO.OUT)
		
		p11=GPIO.PWM(11, 1)
		p12=GPIO.PWM(12, 1)
		p15=GPIO.PWM(15, 1)
		p16=GPIO.PWM(16, 1)

		if id == 't_left':
			t_left(p11,p12,p15,p16, freq)
			return "left"
		elif id == 't_right':
			t_right(p11,p12,p15,p16, freq)
			return "right"
		elif id == 't_up':
			t_up(p11,p12,p15,p16, freq)
			return "up"
		elif id == 't_down':
			t_down(p11,p12,p15,p16, freq)
			return "down"
		elif id == 't_stop':
			t_stop(p11,p12,p15,p16, freq)
			return "stop"

	return redirect(url_for('show_index'))

def t_stop(p11,p12,p15,p16, freq):
	print('Stop.')
	GPIO.output(11, False)
	GPIO.output(12, False)
	GPIO.output(15, False)
	GPIO.output(16, False)
	p11.stop()
	p12.stop()
	p15.stop()
	p16.stop()

def t_up(p11,p12,p15,p16, freq):
	print('Turn up.')
	GPIO.output(11, True)
	GPIO.output(12, False)
	GPIO.output(15, True)
	GPIO.output(16, False)
# 	p11.start(freq)
# 	p12.stop()
# 	p15.start(freq)
# 	p16.stop()

def t_down(p11,p12,p15,p16, freq):
	print('Turn down.')
	GPIO.output(12, True)
	GPIO.output(16, True)
	GPIO.output(11, False)
	GPIO.output(15, False)
# 	p11.stop()
# 	p12.start(freq)
# 	p15.stop()
# 	p16.start(freq)

def t_right(p11,p12,p15,p16, freq):
	reset(p11, p12, p15, p16)
# 	t_up(p11,p12,p15,p16, freq)
	print('Turn right.')
	p11.stop()
	p12.stop()
	p15.ChangeDutyCycle(freq)
	p15.start(freq)
	p16.stop()
	#GPIO.output(11, False)
	#GPIO.output(12, True)
	#GPIO.output(15, True)
	#GPIO.output(16, False)

def t_left(p11,p12,p15,p16, freq):
	reset(p11, p12, p15, p16)
# 	t_up(p11,p12,p15,p16, freq)
	print('Turn left.')
	p11.ChangeDutyCycle(freq)
	p11.start(freq)
	p12.stop()
	p15.stop()
	p16.stop()
	#GPIO.output(11, True)
	#GPIO.output(12, False)
	#GPIO.output(15, False)
	#GPIO.output(16, True)
	
def reset(p11,p12,p15,p16):
	p11.stop()	
	p12.stop()
	p15.stop()
	p16.stop()

在调试过程中,遇到了一些问题,树莓派需要连接无线网络,如果系统需要使用Xshell登录才能联网,才能获取IP地址,这样每次都需要连接无线键鼠控制。

解决办法:

设置Ubuntu系统开机后自动登录。

 

评论请先 登录