ESP32 MicroPython WEB蓝牙红外遥控小车⑬

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/209401.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hdoop学习笔记(HDP)-Part.16 安装HBase

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

2023年AI时代中小企业智能化发展报告

今天分享的是AI系列深度研究报告:《2023年AI时代中小企业智能化发展报告》。 (报告出品方:创业邦) 报告共计:47页 AI——中小企业的智能化增长利器 继蒸汽机、电气化、信息化时代之后,由第四次工业革命开…

基于STM32 + TIM _定时器的基本机构和工作原理详解

前言 本篇博客主要学习了解定时器的基本结构和工作原理,掌握定时器的驱动程序和设计。本篇博客大部分是自己收集和整理,如有侵权请联系我删除。 本次博客板子使用的是正点原子精英版,芯片是STM32F103ZET6,需要资料可以我拿取。 本博客内容原…

校园门禁可视化系统解决方案

随着科技的持续进步,数字化校园在教育领域中的地位日益上升,各种智能门禁、安防摄像头等已遍布校园各个地方,为师生提供安全便捷的通行体验。然而数据收集分散、缺乏管理、分析困难等问题也逐渐出现,在这个数字化环境中&#xff0…

【漏洞复现】大华智慧园区综合管理平台deleteFtp接口远程命令执行

漏洞描述 大华智慧园区综合管理平台deleteFtp接口存在远程命令执行,攻击者可利用该漏洞执行任意命令,获取服务器控制权限。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益…

高速风梳的方案特点--【其利天下技术】

风梳作为美容美发用的一种设备,一直受国内外很多女性用户的喜爱。它对比高速风筒来说,因其设计的用途略有区别,一方面风梳可以做梳子用,换了头还可以作为风筒使用,所以在一定意义上,风梳更受人欢迎。 近年…

ES-ELSER 如何在内网中离线导入ES官方的稀疏向量模型(国内网络环境下操作方法)

ES官方训练了稀疏向量模型,用来支持语义检索。(目前该模型只支持英文) 最好是以离线的方式安装。在线的方式,在国内下载也麻烦,下载速度也慢。还不如用离线的方式。对于一般的生产环境,基本上也是网络隔离的…

Vulhub-信息泄露

1.Jetty WEB-INF 敏感信息泄露漏洞(CVE-2021-28164) docker-compose up -d 启动环境,显示8080端口被占用 修改 docker-compose.yml 中的映射端口 curl 访问 http://192.168.48.129:8090/WEB-INF/web.xml 显示404: 通过 %2e 绕过…

「C++」类和对象2

🎇个人主页:Ice_Sugar_7 🎇所属专栏:C启航 🎇欢迎点赞收藏加关注哦! 文章目录 🍉前言🍉构造函数🍌参数🍌默认构造函数🥝两种类型🥝编译…

设计模式---第三篇

系列文章目录 文章目录 系列文章目录前言一、模板方法模式二、知道享元模式吗?三、享元模式和单例模式的区别?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一…

mac修改默认shell为bash

1. 打开系统偏好设置 2. 点击用户群组 3. 按住ctrl,点击用户名 4. 点击高级选项,修改登录shell 参考:在 Mac 上将 zsh 用作默认 Shell - 官方 Apple 支持 (中国)

js 搜索记录

背景: 移动端的搜索记录,不可能通过调取接口来记录瑟,所以通过在某某.js一个文件定义和处理逻辑。 代码: //某某.js var yumingSearch {init: function () {initF7.GloblalF7.onPageInit("yumingSearch", function …

go开发之个微机器人的二次开发

简要描述: 下载消息中的语音 请求URL: http://域名地址/getMsgVoice 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型…

Tkinter 面向对象框架《二》

一、说明 Tkinter 教程 开发完整的 Tkinter 面向对象应用程序开发完整的 Tkinter 面向对象应用程序。 即使OOP的高手,也未必对面向对象全部掌握。至于 Tkinter的OOP编程,其实高手们也是在摸索实践中。 为了面向对象和Tkinter参与本教程。如果你来这里纯…

三、Zookeeper数据模型

目录 1、Znode兼具文件和目录两种特点 2、Znode具有原子性操作 3、Znode存储数据大小有限制 4、Znode通过路径引用 如下图中的每个节点称为一个Znode, 每个Znode由3部分组成: ZooKeeper的数据模型,在结构上和标准文件系统的非常相似,拥有…

力扣15题 三数之和 双指针算法

15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三…

013 OpenCV copyMakeBorder(padding)

目录 一、环境 二、原理 三、完整代码 一、环境 本文使用环境为: Windows10Python 3.9.17opencv-python 4.8.0.74 二、原理 cv.copyMakeBorder是OpenCV库中的一个函数,用于在图像周围添加边框(padding)。这个函数可以用于图…

Mongodb 开启oplog,java监听oplog并写入关系型数据库

开启Oplog windows mongodb bin目录下找到配置文件/bin/mongod.cfg,配置如下: replication:replSetName: localoplogSizeMB: 1024双击mongo.exe 执行 rs.initiate({_id: "local", members: [{_id: 0, host: "localhost:27017"}]})若出现如…

人工智能|机器学习——感知器算法原理与python实现

感知器算法是一种可以直接得到线性判别函数的线性分类方法,它是基于样本线性可分的要求下使用的。 一、线性可分与线性不可分 为了方便讨论,我们蒋样本增加了以为常数,得到增广样向量 y(1;;;...;),则n个样本的集合为&a…

[论文精读]利用大语言模型对扩散模型进行自我修正

本博客是一篇最新论文的精读,论文为UC伯克利大学相关研究者新近(2023.11.27)在arxiv上上传的《Self-correcting LLM-controlled Diffusion Models》 。 内容提要: 现有的基于扩散的文本到图像生成模型在生成与复杂提示精确对齐的图像时仍然存在困难,尤其是需要数值和…