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两个文件同时上传到小内部文件系统有,关闭小车电源再打开电源后,即可看到显示屏显示信息。

esp32 红外 接收 esp32 遥控_esp32 红外 接收

实验结果
打开资料包文件夹“智能小车mpy例程\开发工具”目录下的“YQD蓝牙小车.apk”安卓APP安装文件,发送到手机上进行安装。
开发工具:

esp32 红外 接收 esp32 遥控_机器学习_02

安装好app后打开软件,点击右上角按钮进入后选择“连接设备”

esp32 红外 接收 esp32 遥控_esp32 红外 接收_03

esp32 红外 接收 esp32 遥控_python_04

搜索到小车蓝牙名称“yqd-car”后,点击名称进行连接,连接成功后小车显示平显示连接成功。关闭app搜索界面,进入到主页控制即可遥控小车。

esp32 红外 接收 esp32 遥控_机器学习_05


esp32 红外 接收 esp32 遥控_python_06

到此我们就可以使用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

实验结果

我们将代码上传到小车后,使用红外遥控器。按下遥控器的“+”加号时控制小车前进,“-”减号时小车后退,“向左”时小车左转,“向右”时小车右转,“播放”按钮时小车停止。可以看到显示屏显示红外接收解码的值。

esp32 红外 接收 esp32 遥控_python_07

esp32 红外 接收 esp32 遥控_机器学习_08

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地址。

esp32 红外 接收 esp32 遥控_python_09


我们打开谷歌或者火狐浏览器后,在输入网站框输入显示的IP地址(如本次的IP地址为19.168.2.104,使用者输入显示屏显示的IP地址)

esp32 红外 接收 esp32 遥控_计算机视觉_10

回车后进入小车控制界面,点击“Start Stream”按钮后打开视频显示界面

esp32 红外 接收 esp32 遥控_机器学习_11

开启视频显示界面后,进行按钮遥控小车。

esp32 红外 接收 esp32 遥控_机器学习_12