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)
dekit 发表于 2021-10-7 11:43
#在这里快速回复#请问图中的DF电源模块是什么型号?淘宝中找不到。 我用移动电源直接接esp32和电动机驱动板 ...
只要是5V2A电源就行。有的移动电源有5V1A和5V2A两个USB输出口的。我用的ROMOSS电源(充电宝),在咸鱼里有卖的。电机驱动板和我图示的一样?不一样要测试其启动电流的,如果用掉电流大,那就无法启动。因为ESP32-CAM耗电大。 永夜星空 发表于 2021-4-30 11:52
博主,新人请教一个问题,设置方向按钮在屏幕中的位置和具体功能的代码是哪部分? ...
在它C++这个文件里改html界面。界面部分是html的代码。打开这个文件,一直往下找,看到button。stop什么的就是要改的界面文字和按钮位置
本帖最后由 gada888 于 2021-10-28 13:07 编辑
阿冲 发表于 2021-10-28 01:00
您好,博主,下载了您提供的 car.rar 文件 进行了编译结果 如网友 所说 报错一样,请博主帮看下怎么回事吧 ...
文件已更新了,你试一下在这里给我个反馈,我很久没测试ESP32-CAM版子了。那个主文件(ESP32-CAM Remote Control Car.ino)我记得后来用的是乐鑫官方文件,稍稍改了一下而已。 很好的教程 高级高级 很厉害啊 请问这个可以连接arduino uno用吗 BUILDERlym 发表于 2020-8-2 18:32
请问这个可以连接arduino uno用吗
不可以,虽然都用同一个ide编译程序。这个从硬件到软件都是和arduino的设计思路不同。 按照sample程序没有问题,按照您的程序怎么解析失败呢?
本帖最后由 gada888 于 2021-2-4 18:04 编辑
春爷 发表于 2020-12-10 02:52
按照sample程序没有问题,按照您的程序怎么解析失败呢?
肯定有步骤操作错了,不是只有这一个主程序,一共四个程序文件。
你好,我在网上找了很多ESP32cam的例子,只要博主的案例比较清晰而且开发深度高。请问我可以请教一下ESP32cam这主板能和测距传感器在Arduion上编译程序吗。我好像遇到不知道怎么分配引脚的问题了 1906017327 发表于 2021-2-19 17:04
你好,我在网上找了很多ESP32cam的例子,只要博主的案例比较清晰而且开发深度高。请问我可以请教一下ESP32c ...
不好意思,刚刚看到。你如果用普通的超声模块的话,连线引脚如下:
Trig -> IO2
Echo -> IO13
VCC -> 3.3V or VCC
GND -> GND 博主,新人请教一个问题,设置方向按钮在屏幕中的位置和具体功能的代码是哪部分? C:\Users\测评\Desktop\1.jpg
报错啊…… 报错啊…… 本帖最后由 gada888 于 2021-5-5 17:41 编辑
永夜星空 发表于 2021-5-4 11:23
报错啊……
你学点html和html5就很快会改了。我最后这个是改的乐鑫官方app-httpd.cpp里的html5代码。
请问图中的DF电源模块是什么型号?淘宝中找不到。
我用移动电源直接接esp32和电动机驱动板cam会开启不了。 #在这里快速回复#请问图中的DF电源模块是什么型号?淘宝中找不到。 我用移动电源直接接esp32和电动机驱动板cam会开启不了
你好,我的2A的充电宝,直接一个USB口输出2路电源线到esp32 cam和电动机驱动板,估计电压互相干扰了。
想找图中的这个电源控制器,分别输出到esp32 cam 和 电动机驱动板。但是不知具体型号,找不到地方购买。
dekit 发表于 2021-10-7 23:16
你好,我的2A的充电宝,直接一个USB口输出2路电源线到esp32 cam和电动机驱动板,估计电压互相干扰了。
想 ...
你可以试试双电源分别独立供电给ESP32-cam和电机驱动 本帖最后由 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