ESP32 MicroPython 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

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ESP32 Micropython支持功能,可以通过模块与其他设备进行通信,例如手机、电脑等。在Micropython中,可以使用Bluetooth模块来实现功能,包括扫描、连接、发送和接收数据等操作。同时,ESP32 Micropython还支持BLE(低功耗)功能,可以用于连接低功耗设备,例如传感器、智能家居设备等。 ### 回答2: ESP32是一款流行的微控制器,可以使用Micropython进行编程。该控制器集成了功能,这使得它非常适合用于开发与相关的应用。在使用Micropython编写代码时,用户可以使用Pybluez模块来进行通信。 Micropython中的Pybluez模块提供了与相关的函数和类,可以使用它来创建设备和服务,扫描设备,连接到其他设备,发送和接收数据等。用户还可以使用该模块来制作厂商特定的协议,以实现特定的功能。 使用ESP32和Micropython编写代码的一个例子是将ESP32连接到一个音箱。此时,用户需要使用Pybluez模块自动连接到音箱,然后使用ESP32将音频数据发送到音箱。用户还可以编写代码,使ESP32在音箱上播放特定的音频文件。 此外,使用ESP32和Micropython编写代码的另一个例子是通过与手机进行通信。此时,用户可以使用ESP32作为传输介质,以实现与智能手机的通信。通过Micropython编写的代码,可以让ESP32与手机交换数据,例如读取传感器数据、控制LED等。 总之,ESP32是一款可用于应用的微控制器,而Micropython则是一种方便且适合快速开发的编程语言。使用Micropython编写代码,可以让用户轻松地创建各种类型的应用程序。 ### 回答3: ESP32是一款广受欢迎的微控制器,它的热度得益于其高性能和低功耗,同时还拥有丰富的外设和传感器接口。ESP32采用的是双核处理器,其主频可以达到240MHz,同时还拥有Wi-Fi和通信模块,因此它是一款非常适合物联网应用开发的微控制器。 而Micropython则是一种面向物联网的Python语言,它可以在嵌入式系统上运行,包括ESP32这样的微控制器。Micropython通过提供易于阅读和编写的Python语法,降低了嵌入式开发的门槛,而且还可以通过REPL交互式命令行进行实时调试和测试。 在ESP32上使用Micropython,我们可以充分利用它所包含的丰富的外设和传感器接口,例如使用进行通信。ESP32内置有通信模块,因此可以通过Micropython轻松地实现通信。 使用Micropython编写ESP32程序通常需要进行以下几个步骤: 1. 导入必要的库:要使用模块,需要导入esp32和bluetooth库。 2. 确认是否开启:使用esp32库的ble启动函数确认是否开启。 3. 设置名称:使用bluetooth库的set_advertisement函数设置名字和服务UUID。 4. 设计通信协议:根据需求设计通信协议,例如使用串口将数据发送至模块或是使用socket套接字进行通信。 5. 进行数据传输:根据设计好的通信协议进行数据传输。 MicropythonESP32上的开发,可以应用于诸如控制智能家居、物联网传感器数据采集、机器人等应用。同时,由于Micropython的易学、易用、易读等特点,也使得开发和测试更加方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物联网程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值