使用Arduino开发esp32-cam踩坑实录

 上星期买了个esp32cam用来做课设,折腾了整整两天,踩坑无数,甚至被搞到自闭,但终于能正常运行esp32cam了。浅浅记录一下折腾途中踩到的所有坑。

一 软件及开发环境下载

1. Arduino下载可以在arduino社区下,或者上官网下也行,我这里就贴住arduino社区的网站了。Arduino IDE下载(2月21日更新到1.8.19)-Arduino中文社区 - Powered by Discuz!

2. esp32开发库下载
我推荐的方法依旧是在arduino社区进行下载

下载之后运行即可。然后在Arduino里打开 工具>开发板 看到这样的画面,那应该就是正常的

 

二 测试过程中的踩坑一览

1.硬件连线问题

esp32cam与ch340的连接


想要将arduino里面的代码烧录进esp32里,必须要有一个类似ch340的usb转串口装置,或者你可以购买esp32cam的专用下载器。(淘宝有些商家卖的板子,不太稳定,可能必须还要专用下载器才可以进行烧录)。

如果使用下载器,直接将引脚插入依次插入即可。

如果是使用ch340,切记

  1. 电源线接5v电压,如果接3.3v电压,之后是运行不了的。
  2. ch340上的TX连接 esp32cam的U0R,ch340上的RX连接esp32cam上的U0T。
  3. 在烧录代码时,一定要将IO0与GND连接起来;之后运行代码时,一定要将IO0与GND取下

 请在连线时,依次检查以上3点是否做到,没一点都很重要。我就是因为一开始接的3.3v电压,之后怎么都运行不了。

2. 烧录过程中的报错

选中你对应的开发板,然后使用示例的代码,正常连接电脑和arduino之后就可以开始上传。

 

 期间可能会报这样的错

A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header

在connecting时候按按键没反应,上传程序失败。

 解决方案:

  1. 按一下esp32cam板子上的RST按键
  2. 检查一下IO0和GND有没有相连
  3. 考虑使用esp32cam自带的下载器
  4. 检查电源有没有换成5v

如果以上方案都没法解决问题的话,就考虑一下是不是板子的质量问题(本人真的经历过...)

 3. 运行过程中的报错

烧录完毕后,再去点击串口监视器,按一下板子上的RST按钮,串口监视器里应当会跳出相应的信息。如果报这样的错

 考虑摄像头有没有选择正确,对应到代码上,就是此处的一堆#define有没有注释正确。 

 如果注释都正确的话,那再考虑一下esp32cam接的是不是5v电压(这很重要!3.3v电压的话是运行不了的)

以上都正确的话,那么串口监视器那边应该会弹出一个ip地址。在浏览器那边输入这个ip地址就可以查看esp32cam的图像了。

  • 5
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要实现ArduinoESP32-CAM建立网页视频流,可以参考以下步骤: 1. 首先,需要安装ESP32-CAM库,可以在Arduino IDE中搜索并安装该库。 2. 在代码中引入必要的库,如WiFi、AsyncTCP、ESPAsyncWebServer和esp_camera。 3. 设置WiFi连接信息,并连接WiFi。 4. 初始化相机,设置分辨率、帧率等参数。 5. 创建ESPAsyncWebServer实例,并设置路由。 6. 在路由中处理视频流请求,通过调用相机API获取图像数据,将其转换为JPEG格式,并以流的形式发送到客户端。 以下是示例代码: ``` #include <WiFi.h> #include <AsyncTCP.h> #include <ESPAsyncWebServer.h> #include "esp_camera.h" // Replace with your network credentials const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; // Create AsyncWebServer object on port 80 AsyncWebServer server(80); // Initialize camera void init_camera() { camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = 5; config.pin_d1 = 18; config.pin_d2 = 19; config.pin_d3 = 21; config.pin_d4 = 36; config.pin_d5 = 39; config.pin_d6 = 34; config.pin_d7 = 35; config.pin_xclk = 0; config.pin_pclk = 22; config.pin_vsync = 25; config.pin_href = 23; config.pin_sscb_sda = 26; config.pin_sscb_scl = 27; config.pin_pwdn = 32; config.pin_reset = -1; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; config.frame_size = FRAMESIZE_VGA; config.jpeg_quality = 10; config.fb_count = 2; // Camera init esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x", err); return; } } // Serve video stream void serve_video_stream(AsyncWebServerRequest *request) { Serial.println("Video stream requested"); if (request->hasParam("frame")) { // Get JPEG image from camera camera_fb_t * fb = esp_camera_fb_get(); if (!fb) { Serial.println("Camera capture failed"); request->send(500, "text/plain", "Camera capture failed"); return; } // Send JPEG image as stream AsyncWebServerResponse *response = request->beginResponse("image/jpeg", fb->len, [fb](uint8_t *buffer, size_t maxLen, size_t index) -> size_t { if (!index) { memcpy(buffer, fb->buf, fb->len); } return fb->len; }); response->addHeader("Cache-Control", "no-store"); request->send(response); // Release the memory esp_camera_fb_return(fb); } else { request->send(404); } } void setup() { Serial.begin(115200); // Connect to Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Initialize camera init_camera(); // Serve video stream server.on("/video_stream", HTTP_GET, serve_video_stream); // Start server server.begin(); } void loop() { } ``` 在浏览器中输入ESP32-CAM的IP地址,加上“/video_stream?frame”,即可看到视频流。 注意,由于ESP32-CAM的处理能力有限,视频流可能会有卡顿或延迟,需要根据实际情况调整分辨率、帧率等参数。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值