ESP32-CAM模块集成了ESP32芯片和OV2640摄像头,支持WiFi和蓝牙,成本不到30元。用它做一台手机遥控视频小车,全套下来不到100元。
一、材料清单
ESP32-CAM模块(带OV2640摄像头)× 1
FT232 USB转串口模块(用于烧录程序)× 1
L298N电机驱动模块 × 1
直流减速电机 × 2 + 小车底盘
7.4V锂电池 + 降压模块(输出5V给ESP32)
杜邦线若干
二、ESP32-CAM引脚说明
ESP32-CAM的GPIO资源有限,但做视频小车刚好够用:
GPIO 1:U0TXD(串口发送)
GPIO 3:U0RXD(串口接收)
GPIO 2:内置LED(可用于指示状态)
GPIO 4:摄像头闪光灯(也可以做普通IO)
GPIO 12/13/14/15:可用于电机控制
注意:GPIO 0 拉低进入下载模式。
三、烧录程序
1. 将ESP32-CAM的U0TXD接FT232的RXD,U0RXD接FT232的TXD。
2. GPIO 0 接 GND(进入下载模式),FT232的3.3V接ESP32的3.3V,GND共地。
3. 在Arduino IDE中安装ESP32开发板支持包。
4. 选择开发板 AI Thinker ESP32-CAM。
5. 烧录完成后,断开GPIO0的GND连接,按RST复位。
四、Web视频遥控代码
#include "esp_camera.h"
#include <WiFi.h>
#include <WebServer.h>
// WiFi配置
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
// 摄像头引脚配置(ESP32-CAM)
#define PWDN_GPIO_NUM 32
#define RESET_GPIO_NUM -1
#define XCLK_GPIO_NUM 0
#define SIOD_GPIO_NUM 26
#define SIOC_GPIO_NUM 27
#define Y9_GPIO_NUM 35
#define Y8_GPIO_NUM 34
#define Y7_GPIO_NUM 39
#define Y6_GPIO_NUM 36
#define Y5_GPIO_NUM 21
#define Y4_GPIO_NUM 19
#define Y3_GPIO_NUM 18
#define Y2_GPIO_NUM 5
#define VSYNC_GPIO_NUM 25
#define HREF_GPIO_NUM 23
#define PCLK_GPIO_NUM 22
// 电机引脚
#define MOTOR_A1 12
#define MOTOR_A2 13
#define MOTOR_B1 14
#define MOTOR_B2 15
WebServer server(80);
void handleRoot() {
String html = "<!DOCTYPE html><html><body>";
html += "<h2>ESP32-CAM 智能小车</h2>";
html += "<img src=\"/stream\" width=320 height=240><br>";
html += "<button onmousedown='fetch(\"/fwd\")' onmouseup='fetch(\"/stop\")'>前进</button><br>";
html += "<button onmousedown='fetch(\"/left\")' onmouseup='fetch(\"/stop\")'>左转</button>";
html += "<button onmousedown='fetch(\"/right\")' onmouseup='fetch(\"/stop\")'>右转</button><br>";
html += "<button onmousedown='fetch(\"/bwd\")' onmouseup='fetch(\"/stop\")'>后退</button>";
html += "</body></html>";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
// 电机引脚初始化
pinMode(MOTOR_A1, OUTPUT);
pinMode(MOTOR_A2, OUTPUT);
pinMode(MOTOR_B1, OUTPUT);
pinMode(MOTOR_B2, OUTPUT);
// 摄像头初始化
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
// ...(完整配置见ESP32-CAM示例代码)
esp_camera_init(&config);
// WiFi连接
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
Serial.println(WiFi.localIP());
// 路由
server.on("/", handleRoot);
server.on("/stream", HTTP_GET, handleStream);
server.on("/fwd", forward);
server.on("/bwd", backward);
server.on("/left", turnLeft);
server.on("/right", turnRight);
server.on("/stop", stopMotor);
server.begin();
}
void loop() {
server.handleClient();
}
五、运行效果
烧录成功后,打开串口监视器查看ESP32获取的IP地址。手机浏览器输入该IP,即可看到实时画面和遥控按钮。按住按钮小车前进/转向,松开停止。
六、常见问题
Q:烧录失败怎么办?
A:确认GPIO0已接GND,FT232选择3.3V模式,串口波特率建议115200。
Q:摄像头画面卡顿?
A:在代码中降低图片质量(增加压缩比),或降低分辨率到QVGA(320x240)。

微信联系
淘宝联系