基于Arduino IDE 和ESP32-CAM 制作远程摄像头

本文总结了使用Arduino IDE配置ESP32-CAM进行远程摄像头开发的经验,强调了在选择摄像头模块时应注意的问题。教程中提到了需要的资料包括Arduino IDE、ESP32-CAM模块和USB转串口模块,并提供了关键代码片段,包括WiFi连接和摄像头初始化设置。
摘要由CSDN通过智能技术生成

说明:具体教程及详细步骤参考:arduino-esp32-cam环境配置和例程使用

在这里仅仅针对个人在开发过程中的一点经验及上文帖子没提到的一些部分做一个总结。因为我当初根据这个教程做的时候有以下几点是导致我一开始浪费了大量时间精力的,特此提醒

  1. ESP32-CAM 本身就含有摄像头和ESP32的一个小开发板,所以从使用上来说,只需要这一个模组就可以完成所有的开发;
  2. 要想开发这个摄像头,我们首先要做的就是将这个模块和计算机通信上,所以需要Arduino IDE提供开发环境,需要USB转串口实现电脑和ESP32-CAM模块的连接;
  3. 在程序方面一开始有个选择摄像头模块的部分,要注意,很多人在这里出问题,如下:
    // Select camera model  在这里选择自己的摄像头模块,我们选择最后一个,
    //#define CAMERA_MODEL_WROVER_KIT  //This is the first,这个是默认的,不能用
    //#define CAMERA_MODEL_ESP_EYE
    //#define CAMERA_MODEL_M5STACK_PSRAM
    //#define CAMERA_MODEL_M5STACK_WIDE
    #define CAMERA_MODEL_AI_THINKER    // we shuoul

如何使用ESP32-CAM或ESP32-EYE + Omnivision相机制作小型,低成本的监控摄像头 - 包括应用和设备源。 硬件组件: Seeed ESP-CAM× 1 Espressif ESP-EYE× 1 Espressif Generic ESP32 IC× 1 软件应用程序和在线服务: iOS P2P视频应用 Android P2P视频应用 简单安全的标准监控摄像头 一个简单的用例可能是您希望制作标准的低成本,简单(安全)监控摄像头。标准监控摄像机通常随附大量软件,然后必须通过更新,安全修复等来支持。因此,没有桌面/服务器规模操作系统和运行服务的简化环境因其小得多的攻击面而具有更高的安全性。但如果这还不够,低成本和小尺寸应该说服你。 其他应用中的远程视频输入 我们的许多客户将视频监控摄像头视为独立应用程序,即您安装它并在需要查看远程端发生的情况时将视频流式传输到手机。但是,我们看到越来越多的项目将流式视频作为另一个应用程序的一部分。例如,带有视频流的宠物喂食器,具有音频和视频功能的门铃,可以监控的3D打印机等。 我们开始研发M5Stack ESP32 Cam。它没有额外的外部RAM,而是有一个USB到板上的ESP32 UART,这使得编程更容易(你不必手动操作GPIO0等进入闪存编程模式) M5Stack的问题在于它缺少外部存储器,当你需要流式传输大量数据并快速完成时,你需要保留一个未经确认的数据包缓冲区从相机流向应用程序,如果数据包已准备好重新发送在运输过程中丢失了。此外,您需要从相机缓冲帧缓冲区。当然,这可以进行优化,因此所有内容都使用相同的缓冲区,但这会违反关注点分离原则,并使集成更加困难。
好的,以下是一个基本的 Arduino 代码,用于将 ESP32-CAM 连接到蓝牙并实现无线监控: ```c++ #include "esp_camera.h" #include <BluetoothSerial.h> // Define the camera pins #define CAM_PIN_PWDN 32 #define CAM_PIN_RESET -1 #define CAM_PIN_XCLK 0 #define CAM_PIN_SIOD 26 #define CAM_PIN_SIOC 27 #define CAM_PIN_D7 35 #define CAM_PIN_D6 34 #define CAM_PIN_D5 39 #define CAM_PIN_D4 36 #define CAM_PIN_D3 21 #define CAM_PIN_D2 19 #define CAM_PIN_D1 18 #define CAM_PIN_D0 5 #define CAM_PIN_VSYNC 25 #define CAM_PIN_HREF 23 #define CAM_PIN_PCLK 22 // Create a BluetoothSerial object BluetoothSerial SerialBT; void setup() { Serial.begin(115200); // Initialize the camera camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = CAM_PIN_D0; config.pin_d1 = CAM_PIN_D1; config.pin_d2 = CAM_PIN_D2; config.pin_d3 = CAM_PIN_D3; config.pin_d4 = CAM_PIN_D4; config.pin_d5 = CAM_PIN_D5; config.pin_d6 = CAM_PIN_D6; config.pin_d7 = CAM_PIN_D7; config.pin_xclk = CAM_PIN_XCLK; config.pin_pclk = CAM_PIN_PCLK; config.pin_vsync = CAM_PIN_VSYNC; config.pin_href = CAM_PIN_HREF; config.pin_sscb_sda = CAM_PIN_SIOD; config.pin_sscb_scl = CAM_PIN_SIOC; config.pin_pwdn = CAM_PIN_PWDN; config.pin_reset = CAM_PIN_RESET; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; if (psramFound()) { config.frame_size = FRAMESIZE_UXGA; config.jpeg_quality = 10; config.fb_count = 2; } else { config.frame_size = FRAMESIZE_SVGA; config.jpeg_quality = 12; config.fb_count = 1; } esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x", err); return; } // Initialize the BluetoothSerial object SerialBT.begin("ESP32-CAM"); } void loop() { // Capture a frame from the camera camera_fb_t *fb = esp_camera_fb_get(); if (!fb) { Serial.println("Camera capture failed"); return; } // Send the frame over Bluetooth SerialBT.write(fb->buf, fb->len); // Release the frame buffer esp_camera_fb_return(fb); // Wait 50ms before capturing the next frame delay(50); } ``` 此代码使用 ESP32-CAM 模块连接到蓝牙,并从摄像头捕获图像,并通过蓝牙发送它们。请注意,此代码假定您已经将 ESP32-CAM 配置为连接到 WiFi 并具有 Internet 访问权限。如果您还没有完成此操作,您需要先完成此操作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值