gada888 发表于 2020-7-31 20:57:41

ESP32-CAM做的摄像头小车

本帖最后由 gada888 于 2021-10-28 12:49 编辑

引言:ESP32系列模块由于可以用arduino ide来进行编程,因此广受欢迎。而ESP32 CAM模块由于经济小巧并自带摄像头而更为创客们所青睐。今天给大家介绍一个互动性强的ESP32 CAM游戏,用ESP32 CAM来做一款摄像头小车,带LED灯光控制和伺服电机控制。当然稍加改动,就可以做出许多更实用的项目https://v.youku.com/v_show/id_XNDc5ODg1NTEyOA==.html?spm=a2hzp.8244740.0.0
第一步:展示内容打开摄像头,获取静态照片,获取流视频,小车的前进,后退和左右转弯。LED的灯光开闭,伺服电机的控制等
第二步:IP地址的获取ESP32模块的IP地址是通过手机上下载的Fing软件获取的。第三步:硬件搭建所需器材:(1) ESP32-CAM控制器(2);小车底盘(3);电机驱动(4);电源转接头;(5);USB数据线;(6);DF的电源模块 (7);5v2A移动电源;
第四步:了解一下ESP32-CAM的连线和烧录ESP32-CAM的烧录需要FTDI模块的帮助,然后安装支持文件和进行相关的板子的设置。


第五步:发一些硬件的图片。让人有个直观的认识DF的电源模块5v2A移动电源,必须是用2A来驱动,否则无法工作电机驱动的型号不详,某宝里买的-MX1508-2路直流电机驱动模块 正反转 PWM调速 双H桥步进电机迷你超L298N


小车底盘是自己改装的第六步:总体介绍摄像头小车的设计系统是由ESP32-cam,电机驱动和电源模块来完成的。可以实现小车的前进,后退,左转和右转。开灯,打开伺服等动作,操控起来没有迟滞感,流视频也很流畅。第七部:连线图第八部:代码部分的设计代码部分的WIFI密码等要填你自己的信息这个代码是主文件,其它几个支持文件是从样例里直接拷贝的。上图手写ok字样那张上面有支持文件的名称。/*
This sketch is made by gada888
2020-7-27
*/

const char* ssid = "xxxxx";
const char* password = "xxxxx";

#include "esp_camera.h"
#include <WiFi.h>
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"

// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
//            or another board which has PSRAM enabled

//CAMERA_MODEL_AI_THINKER
#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

void startCameraServer();

void setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);

Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println();

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;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
//init with high specs to pre-allocate larger buffers
if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;//0-63 lower number means higher quality
    config.fb_count = 2;
} else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;//0-63 lower number means higher quality
    config.fb_count = 1;
}

// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    delay(1000);
    ESP.restart();
}

//drop down frame size for higher initial frame rate
sensor_t * s = esp_camera_sensor_get();
s->set_framesize(s, FRAMESIZE_QVGA);// UXGA|SXGA|XGA|SVGA|VGA|CIF|QVGA|HQVGA|QQVGA

//Servo
ledcAttachPin(2, 3);
ledcSetup(3, 50, 16);
ledcWrite(3, 4850);

//Flash
ledcAttachPin(4, 4);
ledcSetup(4, 5000, 8);

//Wheel
ledcAttachPin(12, 5);//You can adjust the speed of the wheel. (gpio12, gpio13)
ledcSetup(5, 5000, 8);      
ledcAttachPin(13, 6);
ledcSetup(6, 5000, 8);
ledcWrite(6, 0);   
pinMode(15, OUTPUT);//If I output PWM to GPIO 15 using ledcWrite, it will lose control. Why?
pinMode(14, OUTPUT);

Serial.println("ssid: " + (String)ssid);
Serial.println("password: " + (String)password);

WiFi.begin(ssid, password);

long int StartTime=millis();
while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      if ((StartTime+10000) < millis()) break;
}

startCameraServer();

char* apssid = "ESP32-CAM";
char* appassword = "12345678";         //AP password require at least 8 characters.
Serial.println("");
Serial.println("WiFi connected");   
Serial.print("Camera Ready! Use 'http://");
if (WiFi.status() == WL_CONNECTED) {
    Serial.print(WiFi.localIP());
    Serial.println("' to connect");
    WiFi.softAP((WiFi.localIP().toString()+"_"+(String)apssid).c_str(), appassword);   
   
    for (int i=0;i<5;i++) {
      ledcWrite(4,10);
      delay(200);
      ledcWrite(4,0);
      delay(200);   
    }      
}
else {
    Serial.print(WiFi.softAPIP());
    Serial.println("' to connect");
    WiFi.softAP((WiFi.softAPIP().toString()+"_"+(String)apssid).c_str(), appassword);   
   
    for (int i=0;i<2;i++) {
      ledcWrite(4,10);
      delay(1000);
      ledcWrite(4,0);
      delay(1000);   
    }
}   
}

void loop() {
// put your main code here, to run repeatedly:
delay(10000);
}代码烧录完后,在手机上打开浏览器,在地址栏输入你在Fing软件里看到的ESP32的IP地址,之后便可以看到你想看的html页面了。
代码已更新(ok-Car-cam)

gada888 发表于 2021-10-7 20:58:24

dekit 发表于 2021-10-7 11:43
#在这里快速回复#请问图中的DF电源模块是什么型号?淘宝中找不到。 我用移动电源直接接esp32和电动机驱动板 ...

只要是5V2A电源就行。有的移动电源有5V1A和5V2A两个USB输出口的。我用的ROMOSS电源(充电宝),在咸鱼里有卖的。电机驱动板和我图示的一样?不一样要测试其启动电流的,如果用掉电流大,那就无法启动。因为ESP32-CAM耗电大。

gada888 发表于 2021-4-30 23:00:08

永夜星空 发表于 2021-4-30 11:52
博主,新人请教一个问题,设置方向按钮在屏幕中的位置和具体功能的代码是哪部分? ...

在它C++这个文件里改html界面。界面部分是html的代码。打开这个文件,一直往下找,看到button。stop什么的就是要改的界面文字和按钮位置


gada888 发表于 2021-10-28 12:46:36

本帖最后由 gada888 于 2021-10-28 13:07 编辑

阿冲 发表于 2021-10-28 01:00
您好,博主,下载了您提供的 car.rar 文件 进行了编译结果 如网友 所说 报错一样,请博主帮看下怎么回事吧 ...
文件已更新了,你试一下在这里给我个反馈,我很久没测试ESP32-CAM版子了。那个主文件(ESP32-CAM Remote Control Car.ino)我记得后来用的是乐鑫官方文件,稍稍改了一下而已。

pATAq 发表于 2020-7-31 22:12:23

很好的教程

rzyzzxw 发表于 2020-8-1 09:40:29

高级高级

BUILDERlym 发表于 2020-8-2 17:55:05

很厉害啊

BUILDERlym 发表于 2020-8-2 18:32:31

请问这个可以连接arduino uno用吗

gada888 发表于 2020-8-3 09:49:43

BUILDERlym 发表于 2020-8-2 18:32
请问这个可以连接arduino uno用吗

不可以,虽然都用同一个ide编译程序。这个从硬件到软件都是和arduino的设计思路不同。

春爷 发表于 2020-12-10 02:52:23

按照sample程序没有问题,按照您的程序怎么解析失败呢?

gada888 发表于 2021-2-4 18:02:23

本帖最后由 gada888 于 2021-2-4 18:04 编辑

春爷 发表于 2020-12-10 02:52
按照sample程序没有问题,按照您的程序怎么解析失败呢?
肯定有步骤操作错了,不是只有这一个主程序,一共四个程序文件。

1906017327 发表于 2021-2-19 17:04:15

你好,我在网上找了很多ESP32cam的例子,只要博主的案例比较清晰而且开发深度高。请问我可以请教一下ESP32cam这主板能和测距传感器在Arduion上编译程序吗。我好像遇到不知道怎么分配引脚的问题了

gada888 发表于 2021-3-6 21:09:37

1906017327 发表于 2021-2-19 17:04
你好,我在网上找了很多ESP32cam的例子,只要博主的案例比较清晰而且开发深度高。请问我可以请教一下ESP32c ...

不好意思,刚刚看到。你如果用普通的超声模块的话,连线引脚如下:
Trig -> IO2
Echo -> IO13
VCC -> 3.3V or VCC
GND -> GND

永夜星空 发表于 2021-4-30 11:52:49

博主,新人请教一个问题,设置方向按钮在屏幕中的位置和具体功能的代码是哪部分?

永夜星空 发表于 2021-5-4 11:18:33

C:\Users\测评\Desktop\1.jpg
报错啊……

永夜星空 发表于 2021-5-4 11:23:00

报错啊……

gada888 发表于 2021-5-4 15:26:34

本帖最后由 gada888 于 2021-5-5 17:41 编辑

永夜星空 发表于 2021-5-4 11:23
报错啊……


你学点html和html5就很快会改了。我最后这个是改的乐鑫官方app-httpd.cpp里的html5代码。

dekit 发表于 2021-10-7 11:42:18

请问图中的DF电源模块是什么型号?淘宝中找不到。
我用移动电源直接接esp32和电动机驱动板cam会开启不了。

dekit 发表于 2021-10-7 11:43:33

#在这里快速回复#请问图中的DF电源模块是什么型号?淘宝中找不到。 我用移动电源直接接esp32和电动机驱动板cam会开启不了

dekit 发表于 2021-10-7 23:16:42


你好,我的2A的充电宝,直接一个USB口输出2路电源线到esp32 cam和电动机驱动板,估计电压互相干扰了。
想找图中的这个电源控制器,分别输出到esp32 cam 和 电动机驱动板。但是不知具体型号,找不到地方购买。

gada888 发表于 2021-10-8 09:08:45

dekit 发表于 2021-10-7 23:16
你好,我的2A的充电宝,直接一个USB口输出2路电源线到esp32 cam和电动机驱动板,估计电压互相干扰了。
想 ...

你可以试试双电源分别独立供电给ESP32-cam和电机驱动

gada888 发表于 2021-10-9 12:52:55

本帖最后由 gada888 于 2021-10-9 12:55 编辑

dekit 发表于 2021-10-7 23:16
你好,我的2A的充电宝,直接一个USB口输出2路电源线到esp32 cam和电动机驱动板,估计电压互相干扰了。
想 ...
25W DC-DC 降压模块
https://www.dfrobot.com.cn/goods-604.html
https://wiki.dfrobot.com.cn/_SKU_DFR0205_25W_DC-DC_%E9%99%8D%E5%8E%8B%E6%A8%A1%E5%9D%97
不好意思,我一开始没明白你的意思,好久以前的项目了。

页: [1] 2
查看完整版本: ESP32-CAM做的摄像头小车