app inverter 制作视频小车
用 App Inventor(常被误写为 App Inverter)制作视频遥控小车,核心是:ESP32‑CAM 负责视频流 + 控制、L298N/TC118S 驱动电机、App Inventor 做手机 App(显示视频 + 发指令),全程图形化编程,无需写复杂代码。
![]()
![image]()
一、硬件清单(一套配齐)
- 小车底盘套件(含 4 个 N20 电机 + 轮子 + 车架)
- ESP32‑CAM 开发板(OV2640/OV3660 摄像头,带烧录座)
- 电机驱动:L298N(两路)或 TC118S(四路,麦克纳姆轮可选)
- 电源:18650 锂电池(2 节,配电池盒)+ 5V 稳压模块(给 ESP32‑CAM 供电)
- 杜邦线、螺丝、扎带若干
二、硬件接线(关键!别接错)
1. ESP32‑CAM ↔ L298N(两轮小车)
表格
| ESP32‑CAM GPIO | L298N 引脚 | 说明 |
|---|---|---|
| GPIO12 | IN1 | 左电机方向 |
| GPIO13 | IN2 | 左电机方向 |
| GPIO14 | IN3 | 右电机方向 |
| GPIO15 | IN4 | 右电机方向 |
| 5V | 12V(L298N 供电) | 接电池正极 |
| GND | GND | 共地 |
2. 电源分配
- 电池 → L298N(12V 端)→ 驱动电机
- 电池 → 5V 稳压模块 → ESP32‑CAM(5V/GND)
- 注意:ESP32‑CAM 不能直接接 12V,会烧!
三、ESP32‑CAM 固件烧录(Arduino IDE)
1. 环境配置
- 安装 Arduino IDE,添加 ESP32 开发板支持:
文件→首选项→附加开发板管理器网址填入https://dl.espressif.com/dl/package_esp32_index.json - 安装库:
ESP32 Camera Library、WiFi、WebServer
2. 核心代码(简化版)
cpp
运行
#include "esp_camera.h"
#include <WiFi.h>
#include <WebServer.h>
// WiFi 配置
const char* ssid = "你的WiFi名";
const char* password = "你的WiFi密码";
// 电机引脚
#define IN1 12
#define IN2 13
#define IN3 14
#define IN4 15
WebServer server(80);
// 摄像头配置
camera_config_t config = {
.pin_pwdn = 32, .pin_reset = -1, .pin_xclk = 0,
.pin_sscb_sda = 26, .pin_sscb_scl = 27,
.pin_d7 = 35, .pin_d6 = 34, .pin_d5 = 39, .pin_d4 = 36,
.pin_vsync = 25, .pin_href = 23, .pin_pclk = 22,
.xclk_freq_hz = 20000000, .pixel_format = PIXFORMAT_JPEG,
.frame_size = FRAMESIZE_QVGA, .jpeg_quality = 12, .fb_count = 1
};
// 电机控制函数
void forward() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); }
void backward() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); }
void left() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); }
void right() { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); }
void stop() { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); }
// 视频流接口
void handleStream() {
camera_fb_t *fb = esp_camera_fb_get();
server.send_P(200, "image/jpeg", (const char*)fb->buf, fb->len);
esp_camera_fb_return(fb);
}
// 控制接口
void handleControl() {
String cmd = server.arg("cmd");
if (cmd == "F") forward();
else if (cmd == "B") backward();
else if (cmd == "L") left();
else if (cmd == "R") right();
else if (cmd == "S") stop();
server.send(200, "text/plain", "OK");
}
void setup() {
// 初始化电机引脚
pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
stop();
// 初始化摄像头
esp_camera_init(&config);
// 连接WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
// 注册接口
server.on("/stream", HTTP_GET, handleStream); // 视频流地址:http://ESP32_IP/stream
server.on("/control", HTTP_GET, handleControl); // 控制地址:http://ESP32_IP/control?cmd=F
server.begin();
}
void loop() { server.handleClient(); }
3. 烧录步骤
- ESP32‑CAM 的 GPIO0 接 GND(进入烧录模式),接 USB 转串口工具
- 选择开发板:
工具→开发板→AI Thinker ESP32‑CAM,端口选对应 COM 口 - 点击上传,烧录完成后断开 GPIO0 与 GND,重启 ESP32‑CAM
- 打开串口监视器(波特率 115200),获取 ESP32‑CAM 的 IP(如
192.168.1.100)
四、App Inventor 手机 App 制作(图形化,超简单)
1. 进入开发平台
打开:
https://appinventor.mit.edu/,注册登录,新建项目2. 界面设计(Screen1)
- 1 个
WebViewer(显示视频流,宽高占满屏幕) - 4 个
Button:前进(F)、后退(B)、左转(L)、右转(R)、停止(S) - 1 个
Label:显示连接状态
3. 逻辑设计(Blocks)
- 初始化:
Screen1.初始化→ 设置WebViewer.网址为http://ESP32_IP/stream(替换为你的 ESP32 IP) - 按钮点击事件(以 “前进” 为例):
按钮F.点击→WebViewer.访问网址→ 填入http://ESP32_IP/control?cmd=F- 同理,后退(cmd=B)、左转(cmd=L)、右转(cmd=R)、停止(cmd=S)
4. 打包安装
- 点击
Build→App(保存到手机),生成 APK - 手机开启 “允许安装未知应用”,安装 APK
- 手机连接与 ESP32‑CAM 同一 WiFi,打开 App,即可看到视频并控制小车
五、常见问题解决
- 视频打不开:
- 手机与 ESP32‑CAM 必须同 WiFi(或手机开热点给 ESP32 连)
- 关闭电脑端占用视频流的浏览器(部分路由限制多设备访问)
- 小车不动:
- 检查 L298N 电源是否接好(12V 端必须接电池正极)
- 电机引脚定义是否与接线一致(代码里的 IN1~IN4 别接反)
- ESP32‑CAM 烧录失败:
- 烧录时 GPIO0 必须接 GND,烧完断开
- 串口工具必须支持 3.3V 电平(避免烧 ESP32)
六、进阶扩展(可选)
- 加 麦克纳姆轮:换 TC118S 驱动,App 增加斜向移动按钮
- 加 舵机云台:控制摄像头上下左右转动,增加视角
- 加 超声波避障:ESP32 接 HC‑SR04,App 显示距离,自动避障
浙公网安备 33010602011771号