ESP32 遥控小车
时间: 2025-06-01 07:55:32 浏览: 43
### ESP32 遥控小车开发教程
#### 1. 硬件准备
ESP32 是一款功能强大的微控制器,集成了 Wi-Fi 和蓝牙模块,适合用于开发遥控小车项目。硬件部分通常包括以下组件:
- **ESP32 开发板**:作为核心控制单元。
- **电机驱动模块**(如 L298N 或 TB6612FNG):用于驱动直流电机。
- **直流电机**:提供动力给小车轮子。
- **超声波传感器 (HC-SR04)**:实现障碍物检测[^2]。
- **电池组**:为整个系统供电。
#### 2. 软件环境搭建
为了编写和上传代码到 ESP32,需要安装以下工具:
- **Arduino IDE**:支持 ESP32 的固件开发。
- 安装 ESP32 支持包:通过 Arduino IDE 的 `Preferences` -> `Additional Boards Manager URLs` 添加 URL 并安装 ESP32 板级支持。
#### 3. 示例代码解析
##### (1)基于单摇杆的远程遥控小车
此示例展示了如何利用 ESP-NOW 协议实现两块 ESP32 之间的无线通信,一块负责发送指令,另一块接收并执行命令。
###### 发送端代码
```cpp
#include <esp_now.h>
#include <WiFi.h>
// 接收设备 MAC 地址
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
typedef struct {
int leftSpeed;
int rightSpeed;
} SpeedData;
SpeedData speedData;
void onDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_MODE_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_register_send_cb(onDataSent);
if (!esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0)) {
Serial.println("Failed to add peer");
return;
}
}
void loop() {
// 假设左速度为 50%,右速度为 -50% 表示向左转
speedData.leftSpeed = 50;
speedData.rightSpeed = -50;
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *)&speedData, sizeof(speedData));
if (result == ESP_OK) {
Serial.println("Sent with success");
} else {
Serial.println("Error sending the data");
}
delay(1000);
}
```
###### 接收端代码
```cpp
#include <esp_now.h>
#include <WiFi.h>
typedef struct {
int leftSpeed;
int rightSpeed;
} SpeedData;
SpeedData speedData;
void onReceive(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&speedData, incomingData, sizeof(SpeedData));
Serial.printf("Left Speed: %d, Right Speed: %d\n", speedData.leftSpeed, speedData.rightSpeed);
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_MODE_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_register_recv_cb(onReceive);
}
void loop() {}
```
以上代码实现了简单的双向通信机制,其中发送端可以调整两个电机的速度来改变方向[^3]。
##### (2)带超声波避障的小车
如果希望增加自动避障功能,则可以在原有基础上加入 HC-SR04 超声波测距模块。
以下是完整的 Python 实现:
```python
from HCSR04 import HCSR04
from machine import Pin
import time
import car
trig = Pin(26, Pin.OUT)
echo = Pin(25, Pin.IN)
HC = HCSR04(trig, echo)
while True:
distance = HC.getDistance()
print(f"{distance:.2f} CM")
if distance <= 15:
car.back(500) # 后退
else:
car.go(500) # 前进
time.sleep(1)
```
这段脚本会持续监测前方是否有物体接近,并根据情况决定前进还是后退[^2]。
---
###
阅读全文
相关推荐

















