色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>基于ESP32 CAM設備Vader Cam的構建

基于ESP32 CAM設備Vader Cam的構建

2022-10-24 | zip | 0.07 MB | 次下載 | 免費

資料介紹

描述

問候。

所以這里有一些引人注目的東西,Vader Cam

Vader Cam 是一個基于 ESP32 CAM 的設備,它是一個實時視頻源流設備,我們可以通過網絡應用程序訪問源并查看發生了什么。

這就像一個以達斯維德為主題的保姆攝像頭或監控設備。

Darth Vader 一直在關注事物,我制作這個設備是為了用它來監控在另一個房間里進行的 3D 打印作業,但我們可以使用這個設備來監控各種各樣的東西,從保姆到孩子甚至寵物。

這篇文章是關于這個 Vader Cam 的整個構建過程,所以讓我們開始吧。

所需材料

這些是這個內置的東西 -

Seeed Studio 的定制 PCB

ESP32 凸輪

M7 二極管 SMA

UART 編程

USB 微型端口

ESP32 板的排針

電源 - 智能手機適配器

關于 ESP32 CAM

poYBAGNVkTOAF7xtAAB0S8KOrlo436.png

ESP32 CAM 是一款非常實用的開發板,它在板的底部配備了一個 2MP OV2640 攝像頭模塊和一個 SD 讀卡器。

此外,它的價格約為 10 美元,對于這種功能強大的微控制器來說,這是一個相當不錯的價格標簽

本版本使用的WIFI模塊為ESP-32S,內置32Mbit Flash和512KB Internal plus外置4M PSRAM

它可以承受 5 伏電壓,這意味著我們可以使用低于 5V 的電壓為 ESP32 Cam 供電,如果您提供的電壓高于 5V,它就會被損壞。

Arduino IDE 安裝 ESP32 開發板

為了在 Arduino IDE 上安裝第三方開發板,我們必須復制他們的 JSON URL,

復制此 URL 并將其粘貼到 Arduino IDE 首選項中的附加板管理器 URL 中。

pYYBAGNVkTaAJ6shAAArJuMUolI422.png

(如果您在附加板管理器中已經有其他開發板 URL,則可以在兩個 URL 之間放置一個逗號)

放好網址后,打開板子管理器,在里面搜索ESP32,然后下載ESP32 Board包。

poYBAGNVkTiAR_3kAAA9t49HI-E344.png

完成所有這些后,您需要重新啟動 Arduino IDE,新的 ESP32 板將出現在板管理器菜單中。

面包板設置

在開始這個項目之前,我們首先準備一個面包板設置,該設置由一個 ESP32 Cam 和一個 FTDI 板根據下面的示意圖連接。

pYYBAGNVkTqARRN9AACYL9cOdAQ293.png

ESP32 CAM 沒有板載編程芯片,這很糟糕,因此我們必須在串行編程模塊中添加一個外部 USB。

為此,我將使用這個 USB 轉串口模塊。該模塊基于 FTDI FT232 芯片。您也可以使用其他串行轉換器,它們的接線將保持不變,因為我們只需將 TX 和 RX 與 ESP32 連接。

將 FTDI 輸出設置為 5V

將 FTDI 的 VCC(即 5V)連接到 ESP32 CAM 的 5V

地到地

RX 到 U0T

TX 轉 U0R

GPIO0 是 IO0 到 GND(這將使 ESP32 CAM 進入 Flash 模式)

主要代碼

?

#include "esp_camera.h"
#include 
#include "esp_timer.h"
#include "img_converters.h"
#include "Arduino.h"
#include "fb_gfx.h"
#include "soc/soc.h" //disable brownout problems
#include "soc/rtc_cntl_reg.h"  //disable brownout problems
#include "esp_http_server.h"

//Replace with your network credentials
const char *ssid = "JioFiber-nCDgC";
const char *password = "jiexaifieXai5chu";

#define PART_BOUNDARY "123456789000000000000987654321"

// This project was tested with the AI Thinker Model, M5STACK PSRAM Model and M5STACK WITHOUT PSRAM
#define CAMERA_MODEL_AI_THINKER
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM

// Not tested with this model
//#define CAMERA_MODEL_WROVER_KIT

#if defined(CAMERA_MODEL_WROVER_KIT)
  #define PWDN_GPIO_NUM    -1
  #define RESET_GPIO_NUM   -1
  #define XCLK_GPIO_NUM    21
  #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      19
  #define Y4_GPIO_NUM      18
  #define Y3_GPIO_NUM       5
  #define Y2_GPIO_NUM       4
  #define VSYNC_GPIO_NUM   25
  #define HREF_GPIO_NUM    23
  #define PCLK_GPIO_NUM    22

#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
  #define PWDN_GPIO_NUM     -1
  #define RESET_GPIO_NUM    15
  #define XCLK_GPIO_NUM     27
  #define SIOD_GPIO_NUM     25
  #define SIOC_GPIO_NUM     23
  
  #define Y9_GPIO_NUM       19
  #define Y8_GPIO_NUM       36
  #define Y7_GPIO_NUM       18
  #define Y6_GPIO_NUM       39
  #define Y5_GPIO_NUM        5
  #define Y4_GPIO_NUM       34
  #define Y3_GPIO_NUM       35
  #define Y2_GPIO_NUM       32
  #define VSYNC_GPIO_NUM    22
  #define HREF_GPIO_NUM     26
  #define PCLK_GPIO_NUM     21

#elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)
  #define PWDN_GPIO_NUM     -1
  #define RESET_GPIO_NUM    15
  #define XCLK_GPIO_NUM     27
  #define SIOD_GPIO_NUM     25
  #define SIOC_GPIO_NUM     23
  
  #define Y9_GPIO_NUM       19
  #define Y8_GPIO_NUM       36
  #define Y7_GPIO_NUM       18
  #define Y6_GPIO_NUM       39
  #define Y5_GPIO_NUM        5
  #define Y4_GPIO_NUM       34
  #define Y3_GPIO_NUM       35
  #define Y2_GPIO_NUM       17
  #define VSYNC_GPIO_NUM    22
  #define HREF_GPIO_NUM     26
  #define PCLK_GPIO_NUM     21

#elif defined(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
#else
  #error "Camera model not selected"
#endif

static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";

httpd_handle_t stream_httpd = NULL;

static esp_err_t stream_handler(httpd_req_t *req){
  camera_fb_t * fb = NULL;
  esp_err_t res = ESP_OK;
  size_t _jpg_buf_len = 0;
  uint8_t * _jpg_buf = NULL;
  char * part_buf[64];

  res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
  if(res != ESP_OK){
    return res;
  }

  while(true){
    fb = esp_camera_fb_get();
    if (!fb) {
      Serial.println("Camera capture failed");
      res = ESP_FAIL;
    } else {
      if(fb->width > 400){
        if(fb->format != PIXFORMAT_JPEG){
          bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
          esp_camera_fb_return(fb);
          fb = NULL;
          if(!jpeg_converted){
            Serial.println("JPEG compression failed");
            res = ESP_FAIL;
          }
        } else {
          _jpg_buf_len = fb->len;
          _jpg_buf = fb->buf;
        }
      }
    }
    if(res == ESP_OK){
      size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
      res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
    }
    if(res == ESP_OK){
      res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
    }
    if(res == ESP_OK){
      res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
    }
    if(fb){
      esp_camera_fb_return(fb);
      fb = NULL;
      _jpg_buf = NULL;
    } else if(_jpg_buf){
      free(_jpg_buf);
      _jpg_buf = NULL;
    }
    if(res != ESP_OK){
      break;
    }
    //Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
  }
  return res;
}

void startCameraServer(){
  httpd_config_t config = HTTPD_DEFAULT_CONFIG();
  config.server_port = 80;

  httpd_uri_t index_uri = {
    .uri       = "/",
    .method    = HTTP_GET,
    .handler   = stream_handler,
    .user_ctx  = NULL
  };
  
  //Serial.printf("Starting web server on port: '%d'\n", config.server_port);
  if (httpd_start(&stream_httpd, &config) == ESP_OK) {
    httpd_register_uri_handler(stream_httpd, &index_uri);
  }
}

void setup() {
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
 
  Serial.begin(115200);
  Serial.setDebugOutput(false);
  
  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; 
  
  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;
  }
  
  // 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;
  }
  // Wi-Fi connection
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  
  Serial.print("Camera Stream Ready! Go to: http://");
  Serial.print(WiFi.localIP());
  
  // Start streaming web server
  startCameraServer();
}

void loop() {
  delay(1);
}

?

閃爍板步驟

在閃爍過程之前,您需要更改示例草圖中的一些內容。

轉到示例> ESP32> 相機并打開CameraWebServer草圖

輸入您的 SSID 和密碼

將相機模塊從#define CAMERA_MODEL_WROVER_KIT更改為#define CAMERA_MODEL_AI_THINKER

現在,轉到工具并選擇正確的板,在我們的例子中是 AI-Thinker ESP32-CAM。

選擇正確的端口并點擊上傳。

現在,當 ESP32 開始上傳過程時,您將看到帶有點和破折號的連接消息。按下板底部的重置按鈕,點和劃線開始。

如果您在此設置過程中遇到無法連接的錯誤,這意味著您的時機不對,請重試,當第一個點出現在調試菜單中時,長按重置按鈕至少 1 秒鐘。

幾秒鐘后,您的草圖將被上傳。

現在從 FTDI 模塊中拔出 USB 并移除 GPIO0 和 GND 之間的跳線。

插入 USB 并打開串行監視器。

ESP32 將與 WIFI 連接(需要 1 分鐘),您將看到 ESP32 CAM 的 IP 地址。

結果到目前為止...

我們復制 ESP32 Cam 的 IP 地址并在 Web 瀏覽器中打開它,它將顯示 ESP32 Cam 的實時信息。接下來,我們開始為此設置準備 PCB。

PCB設計

pYYBAGNVkT2AIqkIAAKHsk4WEtU830.jpg

1 / 2

完成面包板設置后,我們準備了一個簡單的 PCB 設計,其中包括一個 USB 微型端口和一個二極管,用于為 ESP32 Cam 供電。

至于讓這個電路板更美觀和更酷,我下載了一張黑白 Darth Vader 圖像并將其轉換為 BMP 圖像,這樣我就可以將它添加到 PCB 設計中。

我將 ESP32 Cam 放在 Darth Vader 臉的一側,這樣看起來 Vader 正在通過 ESP32 Cam 看著我們。

從 Seeed Fusion 獲取 PCB

1 / 2

在完成 PCB 并生成其 Gerber 數據后,我將其發送到 SEEED STUDIO 以獲取樣本。

訂購了帶有白色絲印的 RED 阻焊層的 PCB。

我在一周內收到了多氯聯苯,考慮到價格也很低,它們的質量非常好。

Seeed Fusion PCB 服務為 PCB 制造和 PCB 組裝提供一站式原型設計,因此,他們在 7 個工作日內生產出優質 PCB 和快速交鑰匙 PCBA。

Seeed Studio Fusion PCB 組裝服務負責從PCB 制造、零件采購、組裝和測試服務的整個制造過程,因此您可以確保他們獲得優質產品

在評估市場興趣并驗證工作原型后,Seeed Propagate Service 可以通過專業指導和強大的聯系網絡幫助您將產品推向市場。

PCB組裝

PCB組裝包括兩個步驟,

添加焊膏和二極管

添加頭針和 USB 端口

焊膏和添加二極管

我們首先將焊膏添加到電路板底部的每個組件焊盤,然后將二極管放置在其位置。

接下來,我們小心地提起整個 PCB 并將其放在熱板上。我正在使用我不久前制作的老式DIY 電爐。

熱板將表面加熱到焊膏熔化溫度,然后慢慢熔化。幾分鐘后焊膏完全融化,我們取下PCB并讓它冷卻片刻。

這是最終設置,我們使用烙鐵放置兩個插頭引腳連接器

結果

我們將 ESP32 放在 VaderCam 板上并插入 5V 充電器。

等待幾秒鐘后,我們在瀏覽器中打開 Web 應用程序,我們可以看到來自 esp32 cam 的實時提要。

這就是今天的人們,如果您需要有關此項目的任何幫助,請發表評論。

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 吻嘴胸全身好爽床大全| 一二三四免费中文在线1| 日本人六九视频| 日本熟妇乱妇熟色A片蜜桃| 三级叫床震大尺度视频| 小妇人电影免费完整观看2021| 香蕉精品国产自在现线拍| 亚洲精品久久久久AV无码| 一个人色导航| 97精品国产亚洲AV高清| younv 学生国产在线视频| 国产成人国产在线观看入口| 国产AV亚洲国产AV麻豆| 国产偷国产偷亚州清高| 久久内在线视频精品mp4| 欧美人成人亚洲专区中文字幕| 色噜噜狠狠色综合欧洲| 性奴公司 警花| 中文字幕一区二区三区在线不卡 | gogogo在线观看| 超碰 无码 中文字幕| 国产成人a一在线观看| 回复术士人生重启在线观看| 久久免费电影| 人人舔人人爱| 亚洲91av| 伊人久久大香线蕉综合bd高清| xxx在线播放| 动漫美女的阴| 久久超碰色中文字幕| 免费看 a一级毛片| 人妻天天爽夜夜爽三区麻豆A片| 性色爽爱性色爽爱网站| 影音先锋av天堂| 大地影院免费观看视频| 国产小视频免费在线观看| 久久高清一本无码| 欧美亚洲韩日午夜| 小莹的性荡生活45章| 99re8久久热在线视频| 国产高清视频青青青在线|