ESP32 MicroPython WEB蓝牙红外遥控小车⑬
- 1、蓝牙遥控小车
- 2 、红外遥控小车
- 3 、WEB网页摄像头遥控小车
1、蓝牙遥控小车
实验目的
使用“YQD蓝牙小车”APP控制小车
实验内容
使用小车显示屏显示蓝牙连接情况,开启蓝牙名称为“yqd-car”,并设置连接到小车蓝牙后接收数据回调函数,在回调函数里面我们APP软件发送控制小车的前进、后退、左转和右转去控制小车。
蓝牙APP软件按按下时发送的数据为:
前进按钮按下时发送蓝牙数据:0x01 松开按钮时发送0x00
后退按钮按下时发送蓝牙数据:0x02 松开按钮时发送0x00
左转按钮按下时发送蓝牙数据:0x03 松开按钮时发送0x00
右转按钮按下时发送蓝牙数据:0x04 松开按钮时发送0x00
参考代码
参考代码文件可以在资料包文件夹“智能小车mpy例程\综合实验\01-蓝牙遥控小车”文件夹下的main.py ,下面为完整代码内容:
from machine import Pin,Timer
import ble_peripheral
import bluetooth
import time
import car #导入小车控制模块
from lcd import LCD20 #导入2.0寸LCD模块
##########################################
#颜色值定义,(R,G,B) 0~255代表颜色值
red = (255,0,0) #红色
green = (0,255,0) #绿色
blue = (0,0,255) #蓝色
white = (255,255,255) #白色
back = (0,0,0) #黑色
##########################################
#构建显示屏对象,并返回对象句柄ld
ld=LCD20(dir=1) #创建LCD对象 dir 显示方向为竖屏,1、3竖屏,2、4横盘
ld.fill(back) # 整屏填充指定颜色
ld.dText("蓝牙遥控小车",20,10,color=white,size=3)
##########################################
myCar=car.SERIAL_CAR() #构建小车控制对象
##########################################
##构建蓝牙BLE对象##############
mBle = bluetooth.BLE() #构建蓝牙对象
myble = ble_peripheral.BLE(mBle) #构建蓝牙外设对象,ble_peripheral.py文件
bMAC = mBle.config('mac') #读取蓝牙设备MAC地址
print('MAC->',bMAC) #打印出mac地址
#显示蓝牙名称
ld.dText("蓝牙名称:yqd-car",20,60,color=white,size=2)
##########################################
'''
蓝牙app
前进按钮:0x01
后退按钮:0x02
左转按钮:0x03
右转按钮:0x04
所有按钮按下后弹起发送数据为:0x00
'''
#定义蓝牙接收数据函数
def ble_rx(v):
#print("rx data->",str(v)) #打印接收到的数据
if v[0] == 0x00: #停止按钮
myCar.stop() #小车停止控制
ld.dText("小车停止",50,160,color=white,size=2)
pass
elif v[0] == 0x01: #前进按钮
myCar.forward(50) #小车前进 参数值0~100表示 占空比0% ~ 100%
ld.dText("小车前进",50,160,color=white,size=2)
pass
elif v[0] == 0x02: #后退按钮
myCar.back(50) #小车后退
ld.dText("小车后退",50,160,color=white,size=2)
pass
elif v[0] == 0x03: #左转按钮
myCar.left(50) #小车左转
ld.dText("小车左转",50,160,color=white,size=2)
pass
elif v[0] == 0x04: #右转按钮
myCar.right(50) #小车右转
ld.dText("小车右转",50,160,color=white,size=2)
pass
##########################################
myble.on_write(ble_rx) #注册蓝牙接收数据函数
IsConnected = 0 #用于判断是否连接蓝牙,显示屏提示显示
LsatIsConnected = 1
while True:
if myble.is_connected(): #判断蓝牙是否已经有连接
# print("conn")
# myble.notify("text")
IsConnected = 1
else:
IsConnected = 0
pass
if LsatIsConnected != IsConnected:
if IsConnected==1:
ld.dText("蓝牙已连接",50,120,color=white,size=2)
else:
ld.dText("蓝牙未连接",50,120,color=white,size=2)
pass
LsatIsConnected = IsConnected
time.sleep_ms(500) #延时
pass
本实验实验的代码可以在文件夹:“智能小车mpy例程\综合实验\01-蓝牙遥控小车”文件夹路径下找到,先将文件ble_peripheral.py和main.py两个文件同时上传到小内部文件系统有,关闭小车电源再打开电源后,即可看到显示屏显示信息。
实验结果
打开资料包文件夹“智能小车mpy例程\开发工具”目录下的“YQD蓝牙小车.apk”安卓APP安装文件,发送到手机上进行安装。
开发工具:
https://download.csdn.net/download/lu330274924/88524967
安装好app后打开软件,点击右上角按钮进入后选择“连接设备”
搜索到小车蓝牙名称“yqd-car”后,点击名称进行连接,连接成功后小车显示平显示连接成功。关闭app搜索界面,进入到主页控制即可遥控小车。
到此我们就可以使用APP来遥控小车了
2 、红外遥控小车
实验目的
使用红外遥控器控制小车
实验内容
使用小车顶板的红外接收传感器进行解码红外遥控的值,将接收到的值进行控制小车前进、后退、左转和右转。
参考代码
参考代码文件可以在资料包文件夹“智能小车mpy例程\综合实验\02-红外遥控小车”文件夹下的main.py ,下面为完整代码内容:
import time
from lcd import LCD20 #导入2.0寸LCD模块
import car #导入小车控制模块
import ex_sensor #导入外部传感器模块
###############################################################
s = ex_sensor.sensor() #构建传感器对象
myCar=car.SERIAL_CAR() #构建小车控制对象
###############################################################
#颜色值定义,(R,G,B) 0~255代表颜色值
red = (255,0,0) #红色
green = (0,255,0) #绿色
blue = (0,0,255) #蓝色
white = (255,255,255) #白色
back = (0,0,0) #黑色
#构建显示屏对象,并返回对象句柄ld
ld=LCD20(dir=1) #创建LCD对象 dir 显示方向为竖屏,1、3竖屏,2、4横盘
ld.fill(back) # 整屏填充指定颜色
#LCD显示信息
ld.dText("红外遥控小车",25,10,color=white,size=2)
ld.dText("红外遥控:",25,100,color=green,size=2)
###############################################################
#定义读取变量数据
irData = 0 #红外数据
###############################################################
while True:
irData = s.read_ir() #读取红外遥控解码数据
ld.dText("{:3d}".format(irData),130,100,color=white,size=2) #红外遥控
if irData == 2: #前进
myCar.forward(80)
if irData == 152: #后退
myCar.back(80)
if irData == 224: #左转
myCar.left(30)
if irData == 144: #右转
myCar.right(30)
if irData == 168: #停止
myCar.stop()
time.sleep_ms(100) #延时等待100ms
实验结果
我们将代码上传到小车后,使用红外遥控器。按下遥控器的“+”加号时控制小车前进,“-”减号时小车后退,“向左”时小车左转,“向右”时小车右转,“播放”按钮时小车停止。可以看到显示屏显示红外接收解码的值。
3 、WEB网页摄像头遥控小车
实验目的
使用WEB网页方式控制小车,并可以在网页上查看摄像头图像。
实验内容
初始化好摄像头参数和显示屏,开启WIFI连接路由器,并显示连接路由器状态,连接成功后显示出IP地址,方便我们连接。连接成功后我们开启HTTP按钮回调,把摄像头采集图像数据上传到HTTP网页端。在回调函数里面我们解析来自HTTP网页的按钮值来控制小车的前进、后退、左转和右转。
参考代码
参考代码文件可以在资料包文件夹“智能小车mpy例程\综合实验\03-WEB网页摄像头遥控小车”文件夹下的main.py ,下面为完整代码内容:
网络遥控小车
'''
from machine import UART #串口模块
from machine import Pin,Timer #导入Pin引脚和Time定时器模块
from lcd import LCD20 #导入2.0寸LCD模块
import cam #导入摄像头模块
import time,network
import car #导入小车控制模块
myCar=car.SERIAL_CAR() #构建小车控制对象
myCar.stop() #停止下
#颜色值定义,(R,G,B) 0~255代表颜色值
red = (255,0,0) #红色
green = (0,255,0) #绿色
blue = (0,0,255) #蓝色
white = (255,255,255) #白色
back = (0,0,0) #黑色
#创建LCD对象 dir 显示方向为竖屏,1、3竖屏,2、4横盘
ld=LCD20(dir=1)
# 整屏填充指定颜色
ld.fill(back)
ld.dText("网络遥控小车",20,10,color=white,size=3) #显示屏提示信息
#frame - 摄像头图层,默认为1层 只有特殊情况才用2层
myCam = cam.OV2640(frame=1) #创建摄像头对象
#设置摄像头尺寸QVGA
myCam.framesize(cam.QVGA)
#定义http网页数据流回调函数
def streamok_ok_cb(cbok): #网页OK按下回调函数
myCar.stop()
def streamok_up_cb(cbok): #网页下键按下回调函数
myCar.forward(60) # 前进
def streamok_down_cb(cbok): #网页上键按下回调函数
myCar.back(60) #后退
def streamok_left_cb(cbok): #网页左键按下回调函数
myCar.left(30) #左转
def streamok_right_cb(cbok): #网页右键按下回调函数
myCar.right(30) #右转
#连接WIFI函数
def connectWIFI():
wlan = network.WLAN(network.STA_IF) #构建网络STA模式
wlan.active(True) #激活网络接口
time_out = time.time() #获取当前时间,用于判断超时
if not wlan.isconnected():
ld.dText("连接网络 YQDKJ",20,60,color=white,size=2) #显示屏显示信息
wlan.connect('YQDKJ', 'D405YQDKJ') #开启连接wifi名称:YQDKJ,密码:D405YQDKJ
while not wlan.isconnected(): #等待连接wifi
time.sleep_ms(500)
lastTime = time.time()-time_out
if lastTime > 30: #30S超时退出等待
ld.dText("连接网络超时",20,60,color=white,size=2) #显示屏显示信息
break
if wlan.isconnected():
ld.dText("连接网络成功! ",20,60,color=white,size=2) #显示屏显示信息
ipstr = str(wlan.ifconfig()[0]) + "." + wlan.ifconfig()[1] + "." + wlan.ifconfig()[2]
ld.dText("IP:" +wlan.ifconfig()[0],20,100,color=white,size=2) #显示屏显示信息
print('network info:', wlan.ifconfig())
return True #连接成功返回真
isconnect = 0 #标志是否连接成功网络
if connectWIFI(): #连接WIFI成功后网络
myCam.stream() #开启网络数据流
isconnect = 1
httpstream = cam.http_stream() #创建http数据流回调
httpstream.set_ok_callable(callback=streamok_ok_cb) #设置OK按钮回调
httpstream.set_up_callable(callback=streamok_up_cb) #设置上键按钮回调
httpstream.set_down_callable(callback=streamok_down_cb) #设置下按钮回调
httpstream.set_left_callable(callback=streamok_left_cb) #设置左边按钮回调
httpstream.set_right_callable(callback=streamok_right_cb) #设置右边按钮回调
while True:
httpstream.stream_task() #循环处理网页按钮回调事件
time.sleep_ms(100)
我们需要把里面的路由器的名称和密码,改成我们自己路由器的名称和密码。将代码的wlan.connect(‘YQDKJ’, ‘D405YQDKJ’) YQDKJ修改成自己路由器的WIFI名称,D405YQDKJ改成自己WIFI的密码后保存。
实验结果
运行程序后,显示屏显示屏网络连接信息。等待连接成功后显示出路由器给小车分配的IP地址。
我们打开谷歌或者火狐浏览器后,在输入网站框输入显示的IP地址(如本次的IP地址为19.168.2.104,使用者输入显示屏显示的IP地址)
回车后进入小车控制界面,点击“Start Stream”按钮后打开视频显示界面
开启视频显示界面后,进行按钮遥控小车。
相关代码及固件:
https://download.csdn.net/download/lu330274924/88549191
智能小车购买链接
技术支持抖音:易驱达Easy Drive Coming
淘宝官方商城:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-18887194911.15.135014bdaKI6mV&id=715385110550