ESP32 Dev Kit与ESP32-WebCam项目开发问题求助
ESP32-WebCam项目问题与解决方案
原始问题
本人是嵌入式编程新手,计划实现一个项目:按下按键后录制15秒视频并发送至程序指定联系人,采用ESP32-WebCam采集视频并通过WiFi传输。使用Arduino IDE 2.0.4开发,通过ESP32 Dev Kit为ESP32-WebCam烧录代码(未使用FTDI线)。
遇到以下问题:
- Arduino IDE中烧录程序应选择哪款开发板?
- 如何编写兼容ESP32与ESP32-WebCam的代码?
尝试将ESP32示例中的CameraWebServer代码以头文件形式导入主程序,文件结构为:main.ino、app_httpd.cpp、camera_index.h、camera_pins.h、esp32_webCam.h。
主程序代码片段:
#include "DHT.h" #define DHT11PIN 16 #define LIGHT_SENSOR_PIN 36 #include <Adafruit_MPU6050.h> #include <Adafruit_Sensor.h> #include <Wire.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include "RTClib.h" #include "esp32_webCam.h" //This is the CameraWebServer file that i'm including in the main file
编译时出现错误:
In file included from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.4/tools/sdk/esp32/include/esp32-camera/driver/include/esp_camera.h:71, from G:\All_Program\all_program\esp32_webCam.h:1, from G:\All_Program\all_program\all_program.ino:11: C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.4/tools/sdk/esp32/include/esp32-camera/driver/include/sensor.h:201:24: error: conflicting declaration 'typedef struct _sensor sensor_t' typedef struct _sensor sensor_t; ^~~~~~~~ In file included from c:\Users\Documents\Arduino\libraries\Adafruit_MPU6050/Adafruit_MPU6050.h:23, from G:\All_Program\all_program\all_program.ino:4: c:\Users\Documents\Arduino\libraries\Adafruit_Unified_Sensor/Adafruit_Sensor.h:157:3: note: previous declaration as 'typedef struct sensor_t sensor_t' } sensor_t; ^~~~~~~~ In file included from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.4/tools/sdk/esp32/include/esp32-camera/driver/include/esp_camera.h:71, from G:\All_Program\all_program\esp32_webCam.h:1, from G:\All_Program\all_program\all_program.ino:11: C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.4/tools/sdk/esp32/include/esp32-camera/driver/include/sensor.h:249:3: error: conflicting declaration 'typedef struct _sensor sensor_t' } sensor_t; ^~~~~~~~ In file included from c:\Users\Emb Lab\Documents\Arduino\libraries\Adafruit_MPU6050/Adafruit_MPU6050.h:23, from G:\All_Program\all_program\all_program.ino:4: c:\Users\Documents\Arduino\libraries\Adafruit_Unified_Sensor/Adafruit_Sensor.h:157:3: note: previous declaration as 'typedef struct sensor_t sensor_t' } sensor_t; ^~~~~~~~ In file included from G:\All_Program\all_program\all_program.ino:11: G:\All_Program\all_program\esp32_webCam.h: In function 'void cam_setup()': G:\All_Program\all_program\esp32_webCam.h:108:10: error: 'struct sensor_t' has no member named 'id' if (s->id.PID == OV3660_PID) { ^~ G:\All_Program\all_program\esp32_webCam.h:109:8: error: 'struct sensor_t' has no member named 'set_vflip' s->set_vflip(s, 1); // flip it back ^~~~~~~~~ G:\All_Program\all_program\esp32_webCam.h:110:8: error: 'struct sensor_t' has no member named 'set_brightness' s->set_brightness(s, 1); // up the brightness just a bit ^~~~~~~~~~~~~~ G:\All_Program\all_program\esp32_webCam.h:111:8: error: 'struct sensor_t' has no member named 'set_saturation'; did you mean 'resolution'? s->set_saturation(s, -2); // lower the saturation ^~~~~~~~~~~~~~ resolution G:\All_Program\all_program\esp32_webCam.h:115:8: error: 'struct sensor_t' has no member named 'set_framesize' s->set_framesize(s, FRAMESIZE_QVGA); ^~~~~~~~~~~~~ G:\All_Program\all_program\all_program.ino: In function 'void pulsesensor()': G:\All_Program\all_program\all_program.ino:72:19: error: 'LED_BUILTIN' was not declared in this scope digitalWrite(LED_BUILTIN,HIGH); ^~~~~~~~~~~ G:\All_Program\all_program\all_program.ino:76:19: error: 'LED_BUILTIN' was not declared in this scope digitalWrite(LED_BUILTIN,LOW); ^~~~~~~~~~~ G:\All_Program\all_program\all_program.ino: In function 'void setup()': G:\All_Program\all_program\all_program.ino:283:11: error: 'LED_BUILTIN' was not declared in this scope pinMode(LED_BUILTIN,OUTPUT); ^~~~~~~~~~~ exit status 1 Compilation error: 'struct sensor_t' has no member named 'id'
解决方案
1. 开发板选择
- 若使用AI-Thinker ESP32-CAM模块,直接在Arduino IDE的
ESP32 Arduino分类下选择AI-Thinker ESP32-CAM。 - 若为通用ESP32-Wrover核心的WebCam模块,选择
ESP32 Wrover Module。 - 烧录操作:将GPIO0引脚接地,重启模块后点击烧录按钮;烧录完成后断开GPIO0接地并重启模块,退出烧录模式。
2. 代码兼容与编译错误修复
(1)解决sensor_t命名冲突
Adafruit_Sensor库与ESP32-Camera库的sensor_t结构体命名冲突,通过宏定义重命名Adafruit的结构体解决:
// 先重命名Adafruit的sensor_t,避免冲突 #define sensor_t Adafruit_sensor_t #include <Adafruit_Sensor.h> #undef sensor_t // 再导入其他库与摄像头头文件 #include "DHT.h" #define DHT11PIN 16 #define LIGHT_SENSOR_PIN 36 #include <Adafruit_MPU6050.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include "RTClib.h" #include "esp32_webCam.h"
(2)修复LED_BUILTIN未定义错误
ESP32-CAM的内置LED引脚为GPIO4,在代码开头手动定义:
#define LED_BUILTIN 4
(3)优化代码结构
不建议将CameraWebServer示例作为头文件导入,正确做法:
- 复制官方CameraWebServer示例的所有文件(
CameraWebServer.ino、app_httpd.cpp、camera_index.h、camera_pins.h)到项目文件夹。 - 在
CameraWebServer.ino中添加自己的传感器(DHT、MPU6050等)代码,避免头文件包含顺序和编译链路问题。
内容的提问来源于stack exchange,提问作者DEVENDRAN M
相关产品推荐
相关产品推荐

