ESP32-CAM WiFi小车:浏览器实时遥控

2026-10-26 09:04:44 67阅读

这块25元的板子,能跑能拍能遥控

ESP32-CAM这块板子玩家圈子里几乎人手一块,25块钱包邮,自带OV2640摄像头、WiFi和蓝牙。但多数人拿它当个网络摄像头玩玩就搁置了。今天这篇教程,把它变成一台能通过浏览器实时遥控的视频监控小车——手机打开网页就能看画面、打方向,控制延迟大概100ms左右,室内玩完全够用。

项目综合了Instructables上两个高赞ESP32-CAM小车方案和keyestudio开源文档(10月26日查),我重新整理了接线和代码,确保新手也能一次跑通。

材料清单:120块搞定全套

ESP32-CAM模块(AI-Thinker版,带OV2640摄像头)×1,大概25元。CP2102 USB转TTL模块×1,约8元。L298N电机驱动板×1,约12元。四驱小车底盘套件(含4个N20电机+4个轮子),约35元。18650锂电池×2+电池盒,约25元。杜邦线若干、开关一个。

总价大概120元以内,比买成品遥控车便宜,而且你能完全掌控底层逻辑。

接线:ESP32-CAM和L298N的硬连线

这是最关键的一步,接错了板子可能直接烧。L298N有4个输入引脚需要接到ESP32-CAM的GPIO上:

L298N的IN1接ESP32-CAM的GPIO 14;IN2接GPIO 15;IN3接GPIO 13;IN4接GPIO 12。电机的正极接L298N的Motor A和Motor B输出端,电池正极接L298N的+12V端子,负极共地。

注意一个坑:ESP32-CAM的5V供电要从L298N的+5V端子取电,需要把L298N板上的电源跳线帽装上。如果你用USB供电烧录代码时电机不转,那就是供电没接对——L298N需要独立供电才能驱动电机。

CP2102只在烧录固件时使用:TX接ESP32-CAM的RX,RX接TX,GPIO 0接地进入下载模式。烧录完成后拔掉CP2102,改用电池供电。

代码核心:40行控制逻辑

完整代码比较长,我把核心控制逻辑摘出来:

#include "esp_camera.h"
#include "WiFi.h"
#include "WebServer.h"

#define IN1 14
#define IN2 15
#define IN3 13
#define IN4 12

const char* ssid = "ESP32CAM_Car";
const char* password = "12345678";
WebServer server(80);

void stopMotors() {
  digitalWrite(IN1, LOW);  digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);  digitalWrite(IN4, LOW);
}
void moveForward() {
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
void moveBackward() {
  digitalWrite(IN1, LOW);  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW);  digitalWrite(IN4, HIGH);
}
void turnLeft() {
  digitalWrite(IN1, LOW);  digitalWrite(IN2, HIGH);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
void turnRight() {
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW);  digitalWrite(IN4, HIGH);
}

void setup() {
  Serial.begin(115200);
  pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
  stopMotors();
  WiFi.softAP(ssid, password);
  Serial.println("AP: " + WiFi.softAPIP().toString());
  server.on("/forward", moveForward);
  server.on("/backward", moveBackward);
  server.on("/left", turnLeft);
  server.on("/right", turnRight);
  server.on("/stop", stopMotors);
  server.on("/capture", []() {
    auto fb = esp_camera_fb_get();
    if (fb) {
      server.send_P(200, "image/jpeg",
        (const char*)fb->buf, fb->len);
      esp_camera_fb_return(fb);
    }
  });
  server.begin();
}

这段代码做了三件事:创建WiFi热点、注册HTTP路由控制方向、通过/capture接口返回JPEG画面。手机连上ESP32-CAM的热点后,浏览器访问192.168.4.1/forward就是前进,/capture就是抓一帧画面。

实际表现:延迟和距离实测

WiFi热点模式下,手机连ESP32-CAM的热点,拍一张照片大概200-300ms,遥控指令响应约100ms。如果在STA模式(ESP32-CAM连家里路由器),延迟能降到50-80ms。

传输距离方面,室内环境(隔两堵墙)大概20-30米,空旷环境能到50米以上。OV2640默认分辨率QVGA(320×240),帧率约5-8fps。想更流畅可以降到QQVGA(160×120),帧率能到10fps以上,但画面比较糊。

踩坑记录

烧录时如果一直报"problem uploading to board",按住ESP32-CAM的RST键再松开同时点上传,就能进下载模式。摄像头报错"camera not detected",大概率是排线没插紧或者供电不足。

L298N驱动板有个跳线帽问题:如果电机只转不反转,检查ENA和ENB跳线帽是否装好,不调速也要装上直通。WiFi热点密码至少8位,ESP32的softAP要求。

整体来说,ESP32-CAM做WiFi监控小车,性价比和可玩性都很高。25块钱的板子加百来块外设,一个下午搞定。适合给小朋友做STEM启蒙,或者研究嵌入式WiFi控制的入门项目。


作者:固件烧录仔
链接:https://www.aiddithome.com/p/4e465220723ff.html
本作版权归作者所有,未经允许请勿转载。若存在违规行为,您可以点击 “举报”。


登录 后发表评论
4条评论
胶佬憨憨
1楼 · 2026-10-26 09:06:03

L298N的跳线帽确实是个坑,我第一次玩的时候就是这里卡了半天

好说好说
2楼 · 2026-10-26 09:06:02

代码很清晰,新手友好,比那些上来就丢整个工程的强多了

默默点赞的路人
3楼 · 2026-10-26 09:06:00

ESP32-CAM这板子我之前买来吃灰了,看了这篇又想翻出来搞搞

深圳打工人Alan
4楼 · 2026-10-26 09:05:59

请问这个延迟打打游戏够不够用?