站内搜索
更多
Esp32无限制距离WIFI履带小车
专业版

Esp32无限制距离WIFI履带小车

工程标签

Arduino

ESP系列

1.2k
0
0
1

简介

基于ESP32S3R8的无限制距离Wifi小车,上电自动连接WIFI,只有手机端联网就能在有网络的地方任意操作小车

简介:基于ESP32S3R8的无限制距离Wifi小车,上电自动连接WIFI,只有手机端联网就能在有网络的地方任意操作小车
复刻成本:350

开源协议

GPL 3.0

创建时间:2025-04-07 23:49:37更新时间:2025-04-10 10:55:17

描述

项目简介

基于ESP32S3R8的无限制距离Wifi小车,上电自动连接WIFI,只有手机端联网就能在有网络的地方任意操作小车
参考:
https://wiki.lckfb.com/zh-hans/esp32s3r8n8/projects/unlimited-distance-remote-control-car.html

项目功能

  • 无限制距离

环境准备

  1. Arduino开发环境,类似keil,为ESP32提供强大的库
    https://www.arduino.cc/en/software
  2. 然后配置esp32环境
    https://wiki.lckfb.com/zh-hans/esp32s3r8n8/arduino-beginner/install.html
    参考环境配置内容,在线和离线下载都可,离线下载资料在附录。
  3. 手机端下载点灯科技App
    https://diandeng.tech/doc/app-download

导入配置

{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨}}¨dashboard¨|{¨type¨¨btn¨¨ico¨¨fal fa-power-off¨¨mode¨Ê¨t0¨¨文本1¨¨t1¨¨文本2¨¨bg¨É¨cols¨Ë¨rows¨Ë¨key¨¨btn-stop¨´x´Ì´y´Ò}{ßBßCßD¨fad fa-arrow-alt-circle-left¨ßFÉßG¨左行¨ßIßJßKÉßLËßMËßN¨btn-left¨´x´Ê´y´Ò¨lstyle¨É}{ßBßCßD¨fad fa-arrow-alt-circle-down¨ßFÉßG¨后退¨ßIßJßKÉßLËßMËßN¨btn-back¨´x´Ì´y´¤B}{ßBßCßD¨fad fa-arrow-alt-circle-up¨ßFÉßG¨前进¨ßIßJßKÉßLËßMËßN¨btn-frt¨´x´Ì´y´ÐßSÉ}{ßBßCßD¨fad fa-arrow-alt-circle-right¨ßFÉßG¨右移¨ßIßJßKÉßLËßMËßN¨btn-right¨´x´Î´y´Ò}{ßB¨vid¨ßKÉßLÑßMÎßN¨video¨´x´É´y´ÊßSɨstr¨¨mjpg¨}{ßBßCßD¨fad fa-toggle-off¨ßFÉßG¨开关灯¨ßIßJßKÉßLËßMËßN¨btn-led¨´x´Î´y´Ð}{ßB¨deb¨ßFÉßKÉßLÑßMÌßN¨debug¨´x´É´y´¤E}{ßB¨num¨ßGßHßD¨fal fa-question¨¨clr¨¨#389BEE¨¨min¨É¨max¨¢1c¨uni¨¨单位¨ßKÉßLËßMËßN¨num-abc¨´x´É´y´Ð}÷¨actions¨|¦¨cmd¨¦¨switch¨‡¨text¨‡¨on¨¨打开?name¨¨off¨¨关闭?name¨—÷¨triggers¨|{¨source¨ßw¨source_zh¨¨开关状态¨¨state¨|ßyß10÷¨state_zh¨|´打开´´关闭´÷}÷´rt´|÷}

  1. 下载监控APP
  2. 配置点灯科技库入Arduino

硬件基础

1、放反接电池电路

2、DC-DC:BUCK降压电路

3、电机驱动(内部就是H桥电路)

4、USB插入接口

5、地分割(功率地、数字地)通过磁珠汇总到大地,防止电机感性电压突变影响电路

6、单片机ESP32S3R8(S3是系列,R8是有8M flash)

7、预留OLED显示屏,实际没用到,可以删了

为什么选择ESP32S3R8
1、 主频240MHZ
2、 国产芯片,乐鑫科技,支持国产
3、 支持Arduino强大的库,写代码简单
4、 IO MUX(任意引脚分配任意功能)
例如:
LED PWM

I2C

代码

1.	#define BLINKER_WIFI  
2.	#include   
3.	  
4.	//宏  
5.	#define Resolution 9     //分辨率  
6.	char auth[] = "e6fab95e8ac0";  
7.	char ssid[] = "XinXun-8633";  
8.	char pswd[] = "12345678";  
9.	//IO宏  
10.	#define LED 48  
11.	#define Lin1 15  
12.	#define Lin2 16  
13.	#define Rin1 18  
14.	#define Rin2 17  
15.	  
16.	//函数宏  
17.	void motor_init();  
18.	void motor_left();  
19.	void motor_right();  
20.	void motor_forward();  
21.	void motor_stop();  
22.	void control(void);  
23.	  
24.	// 按下按键即会执行该函数  
25.	void button1_callback(const String & state) {  
26.	    digitalWrite(LED, !digitalRead(LED));  
27.	}  
28.	//对象  
29.	BlinkerNumber Number1("num-abc");  
30.	BlinkerButton Button1("btn-led");  
31.	  
32.	int counter = 0;  
33.	String KeyName;  
34.	String KeyValue;  
35.	  
36.	  
37.	void setup() {  
38.	  // put your setup code here, to run once:  
39.	  // 初始化串口  
40.	  Serial.begin(115200);  
41.	  BLINKER_DEBUG.stream(Serial);  
42.	  
43.	  //初始化电机  
44.	  motor_init();  
45.	  pinMode(LED,OUTPUT);  
46.	  digitalWrite(LED, LOW);    
47.	  
48.	  // 初始化blinker  
49.	  Blinker.begin(auth, ssid, pswd);  
50.	  Blinker.attachData(dataRead);  
51.	  Button1.attach(button1_callback);  
52.	}  
53.	  
54.	void loop() {  
55.	  // put your main code here, to run repeatedly:  
56.	    Blinker.run();  
57.	    control();  
58.	}  
59.	  
60.	  
61.	/**************************WIFI链接端******************************/  
62.	/* 
63.	函数名:dataRead 
64.	功能:对发送来的数据做处理,储存键名、键值,日志加一 
65.	说明: 
66.	    发送过来的数据格式:   
67.	    {"btn-fnt":"tap"} 
68.	    {"num-abc":{"val":5}} 
69.	    在第一次出现" ",这两个夹着的是按键名KeyName 
70.	    后边出现的"",中间夹得是KeyValue 
71.	*/  
72.	void dataRead(const String & data)  
73.	{  
74.	  //日志+1  
75.	    BLINKER_LOG("Blinker readString: ", data);  
76.	    counter++;  
77.	    Number1.print(counter);  
78.	  
79.	  //储存键值和键名  
80.	    int startPos = data.indexOf('"') + 1;       //提取第一次"出现的索引位置  
81.	    int endPos = data.indexOf('"', startPos);   //从第一次"往后第一个出现"的位置  
82.	    // 提取双引号内的内容  
83.	    KeyName = data.substring(startPos, endPos);  
84.	    Serial.println(KeyName);  
85.	  
86.	    startPos = data.indexOf('"', endPos+1) + 1;  
87.	    endPos = data.indexOf('"', startPos);  
88.	    // 提取双引号内的内容  
89.	    KeyValue = data.substring(startPos, endPos);  
90.	    Serial.println(KeyValue);  
91.	      
92.	}  
93.	  
94.	void control(void)  
95.	{  
96.	  
97.	//键名:前进  
98.	  if(KeyName.equals("btn-frt"))  
99.	  {//键值判断  
100.	    if(KeyValue.equals("press")) //长按  
101.	    {  
102.	      motor_forward();  
103.	    }  
104.	    else if(KeyValue.equals("pressup"))//长按松开  
105.	    {  
106.	      motor_stop();      
107.	    }  
108.	  }  
109.	//键名:左转  
110.	  if(KeyName.equals("btn-left"))  
111.	  {//键值判断  
112.	    if(KeyValue.equals("press")) //长按  
113.	    {  
114.	      motor_left();  
115.	    }  
116.	    else if(KeyValue.equals("pressup"))//长按松开  
117.	    {  
118.	      motor_stop();           
119.	    }  
120.	  }  
121.	//键名:右转  
122.	  if(KeyName.equals("btn-right"))  
123.	  {//键值判断  
124.	    if(KeyValue.equals("press")) //长按  
125.	    {  
126.	      motor_right();  
127.	    }  
128.	    else if(KeyValue.equals("pressup"))//长按松开  
129.	    {  
130.	      motor_stop();          
131.	    }  
132.	  }  
133.	//键名:后退  
134.	  if(KeyName.equals("btn-back"))  
135.	  {//键值判断  
136.	    if(KeyValue.equals("press")) //长按  
137.	    {  
138.	      motor_back();  
139.	    }  
140.	    else if(KeyValue.equals("pressup"))//长按松开  
141.	    {  
142.	      motor_stop();          
143.	    }  
144.	  }  
145.	//键名:停车  
146.	  if(KeyName.equals("btn-stop"))  
147.	  {//键值判断  
148.	    if(KeyValue.equals("tap")) //轻触  
149.	    {  
150.	      motor_stop();  
151.	    }  
152.	    else if(KeyValue.equals("press")) //长按  
153.	    {  
154.	      motor_stop();  
155.	    }  
156.	    else if(KeyValue.equals("pressup"))//长按松开  
157.	    {  
158.	      motor_stop();  
159.	    }  
160.	  }  
161.	}  
162.	  
163.	/**************************底盘******************************/  
164.	void motor_init()  
165.	{  
166.	    //L_IN1  
167.	    ledcAttach(Lin1,10000,Resolution);     
168.	    //L_IN2  
169.	    ledcAttach(Lin2,10000,Resolution);     
170.	    //R_IN1  
171.	    ledcAttach(Rin1,10000,Resolution);           
172.	    //R_IN2  
173.	    ledcAttach(Rin2,10000,Resolution);     
174.	    motor_stop();    
175.	}  
176.	  
177.	void motor_left(void)  
178.	{  
179.	  ledcWrite(Lin1, 340); // 左  
180.	  ledcWrite(Lin2, 0);  
181.	  
182.	  ledcWrite(Rin1, 400); // 右  
183.	  ledcWrite(Rin2, 0);   
184.	}  
185.	void motor_right(void)  
186.	{  
187.	  ledcWrite(Lin1, 400); // 左  
188.	  ledcWrite(Lin2, 0);  
189.	  
190.	  ledcWrite(Rin1, 340); // 右  
191.	  ledcWrite(Rin2, 0);   
192.	}  
193.	// speed range from 0-100  
194.	void motor_forward(void)  
195.	{  
196.	  ledcWrite(Lin1, 400); // 左  
197.	  ledcWrite(Lin2, 0);  
198.	  
199.	  ledcWrite(Rin1, 400); // 右  
200.	  ledcWrite(Rin2, 0);   
201.	}  
202.	  
203.	void motor_back(void)  
204.	{  
205.	  
206.	  ledcWrite(Lin1, 0); // 左  
207.	  ledcWrite(Lin2, 400);  
208.	  
209.	  ledcWrite(Rin1, 0); // 右  
210.	  ledcWrite(Rin2, 400);   
211.	}  
212.	void motor_stop()  
213.	{  
214.	  ledcWrite(Lin1, 0); // 输出PWM  
215.	  ledcWrite(Lin2, 0); // 输出PWM  
216.	  ledcWrite(Rin1, 0); // 输出PWM  
217.	  ledcWrite(Rin2, 0); // 输出PWM  
218.	}  

图片

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
无限制距离智能救援小车.rar
28
2
无限制距离小车.mp4
12
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航