You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32 Dev Kit与ESP32-WebCam项目开发问题求助

ESP32-WebCam项目问题与解决方案

原始问题

本人是嵌入式编程新手,计划实现一个项目:按下按键后录制15秒视频并发送至程序指定联系人,采用ESP32-WebCam采集视频并通过WiFi传输。使用Arduino IDE 2.0.4开发,通过ESP32 Dev Kit为ESP32-WebCam烧录代码(未使用FTDI线)。

遇到以下问题:

  1. Arduino IDE中烧录程序应选择哪款开发板?
  2. 如何编写兼容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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 13:33:12