
破烂号
简介
使用ESP32为主控的蓝牙遥控小车,通过ESP32自带的蓝牙模块接受信号来控制小车运动。
简介:使用ESP32为主控的蓝牙遥控小车,通过ESP32自带的蓝牙模块接受信号来控制小车运动。开源协议
:Public Domain
描述
原理图设计说明

原理图中的电机驱动部分使用了L298N,同时附带了隔离光耦增加电路稳定性,ESP32部分则是使用两排排针来方便插入开发板。原理图中引出了ESP32的全部引脚,同时还将ESP32的物理SPI通信口引出以方便SPI通信的oled屏幕使用。
PCB设计说明

增加了电源和输出电源的线宽以防止电路因为电流过大而烧毁。
软件说明
使用MicroPython编程实现:
from machine import Pinfrom machine import Timerfrom time import sleep_msfrom machine import PWMimport timeimport bluetooth
Left_Front1 = Pin(2,Pin.OUT)Left_Front0 = Pin(4,Pin.OUT)Left_Rear1 = Pin(16,Pin.OUT)Left_Rear0 = Pin(17,Pin.OUT)Right_Front1 = Pin(25,Pin.OUT)Right_Front0 = Pin(33,Pin.OUT)Right_Rear1 = Pin(32,Pin.OUT)Right_Rear0 = Pin(19,Pin.OUT)Left_Run = PWM(Pin(5),freq = 1000,duty = 0)Right_Run = PWM(Pin(18),freq = 1000,duty = 0)
Left_Front1.value(0)Left_Front0.value(0)Left_Rear1.value(0)Left_Rear0.value(0)Right_Front1.value(0)Right_Front0.value(0)Right_Rear1.value(0)Right_Rear0.value(0) BLE_MSG = "" # 定义一个空的变量 class ESP32_BLE(): def __init__(self, name): self.led = Pin(21, Pin.OUT) # 创建LED对象,此LED为板载的蓝色LED,它用的是GPIO口2 self.timer1 = Timer(0) # 定时器,ESP32有4个硬件定时器,此处使用的是0 self.name = name # 传进来的参数name self.ble = bluetooth.BLE() # 创建BLE对象 self.ble.active(True) # 启动蓝牙 self.ble.config(gap_name=name) # 配置蓝牙,给蓝牙起个名字 self.disconnected() # 调用函数执行计时器 self.ble.irq(self.ble_irq) #蓝牙调用中断函数。当手机发送数据给ESP32, ESP32蓝牙收到数据后自动执行此中断 self.register() # 注册 self.advertiser() # 广播 def connected(self): self.led.value(1) # 值为1表示蓝色LED亮 self.timer1.deinit() # 取消计时器 def disconnected(self): # 初始化定时器,设定周期100ms,模式为周期性的,回调函数 self.timer1.init(period=100, mode=Timer.PERIODIC, callback=lambda t: self.led.value(not self.led.value())) def ble_irq(self, event, data): global BLE_MSG if event == 1: #_IRQ_CENTRAL_CONNECT 手机已连接此设备 self.connected() # 调用函数,实现蓝牙没连上时闪烁,连上后长亮的效果 elif event == 2: #_IRQ_CENTRAL_DISCONNECT 手机已断开此设备 self.advertiser() # 调用函数,进行蓝牙广播 self.disconnected() # 蓝牙断开连接后,蓝色LED又会闪烁 elif event == 3: #_IRQ_GATTS_WRITE 手机发送数据给此设备 buffer = self.ble.gatts_read(self.rx) # 接收来自手机的数据 BLE_MSG = buffer.decode('UTF-8').strip() # 将受到的数据安装utf-8进行解码,所以手机发送数据时应该为utf-8编码 def register(self): service_uuid = '6E400001-B5A3-F393-E0A9-E50E24DCCA9E' reader_uuid = '6E400002-B5A3-F393-E0A9-E50E24DCCA9E' sender_uuid = '6E400003-B5A3-F393-E0A9-E50E24DCCA9E' # 蓝牙是通过服务来工作的 services = ( # 定义一个控制灯的服务 ( # 这个括号里的代表一个服务 bluetooth.UUID(service_uuid), # 服务的ID ( (bluetooth.UUID(sender_uuid), bluetooth.FLAG_NOTIFY), # 服务类型:通知 (bluetooth.UUID(reader_uuid), bluetooth.FLAG_WRITE), # 服务类型:写入 ) ), # 下面也可以定义别的服务 # -- 其他服务 ) ((self.tx, self.rx,), ) = self.ble.gatts_register_services(services) def send(self, data): self.ble.gatts_notify(0, self.tx, data + '\n') # 蓝牙发送通知信息 def advertiser(self): # 当断开连接时,开始广播 name = bytes(self.name, 'UTF-8') # 将设备名字转为utf-8格式 adv_data = bytearray('\x02\x01\x02') + bytearray((len(name) + 1, 0x09)) + name self.ble.gap_advertise(100, adv_data) print(adv_data) print("\r\n") def buttons_irq(pin): # 创建BOOT按键函数 led.value(not led.value()) print('LED is ON.' if led.value() else 'LED is OFF') ble.send('LED is ON.' if led.value() else 'LED is OFF') if __name__ == "__main__": ble = ESP32_BLE("ESP32 BLE") # 创建一个对象,带1个实参,后面用来给BLE起名字用 but = Pin(0, Pin.IN) # 创建对象,ESP32开发板的USB接口的右边的BOOT按键的GPIO口为0 but.irq(trigger=Pin.IRQ_FALLING, handler=buttons_irq) # 设置中断 led = Pin(21, Pin.OUT) # 创建蓝色LED对象 while True: print("接收到的信息:>>%s<<" % BLE_MSG) if BLE_MSG == "!B11:": # 按下app上数字1 Left_Front1.value(0) Left_Front0.value(0) Left_Rear1.value(0) Left_Rear0.value(0) Right_Front1.value(0) Right_Front0.value(0) Right_Rear1.value(0) Right_Rear0.value(0) print("stop") elif BLE_MSG == "!B516": # 按下app上up键 Left_Front1.value(1) Left_Front0.value(0) Left_Rear1.value(1) Left_Rear0.value(0) Right_Front1.value(1) Right_Front0.value(0) Right_Rear1.value(1) Right_Rear0.value(0) print("go") elif BLE_MSG == "!B714": # 按下app上left键 Left_Front1.value(0) Left_Front0.value(1) Left_Rear1.value(1) Left_Rear0.value(0) Right_Front1.value(1) Right_Front0.value(0) Right_Rear1.value(0) Right_Rear0.value(1) print("left") elif BLE_MSG == "!B813": # 按下app上right键 Left_Front1.value(1) Left_Front0.value(0) Left_Rear1.value(0) Left_Rear0.value(1) Right_Front1.value(0) Right_Front0.value(1) Right_Rear1.value(1) Right_Rear0.value(0) print("right") elif BLE_MSG == "!B615": # 按下app上right键 Left_Front1.value(1) Left_Front0.value(0) Left_Rear1.value(0) Left_Rear0.value(1) Right_Front1.value(0) Right_Front0.value(1) Right_Rear1.value(1) Right_Rear0.value(0) print("back") BLE_MSG = "" sleep_ms(100)
蓝牙控制APP为:BluefruitConnect(IOS)
实物展示说明

演示视频
见附件
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论