資料介紹
描述
問候。
所以這里有一些引人注目的東西,Vader Cam 。
Vader Cam 是一個基于 ESP32 CAM 的設備,它是一個實時視頻源流設備,我們可以通過網絡應用程序訪問源并查看發生了什么。
這就像一個以達斯維德為主題的保姆攝像頭或監控設備。
Darth Vader 一直在關注事物,我制作這個設備是為了用它來監控在另一個房間里進行的 3D 打印作業,但我們可以使用這個設備來監控各種各樣的東西,從保姆到孩子甚至寵物。
這篇文章是關于這個 Vader Cam 的整個構建過程,所以讓我們開始吧。
所需材料
這些是這個內置的東西 -
Seeed Studio 的定制 PCB
ESP32 凸輪
M7 二極管 SMA
ESP32 板的排針
關于 ESP32 CAM
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 中。
(如果您在附加板管理器中已經有其他開發板 URL,則可以在兩個 URL 之間放置一個逗號)
放好網址后,打開板子管理器,在里面搜索ESP32,然后下載ESP32 Board包。
完成所有這些后,您需要重新啟動 Arduino IDE,新的 ESP32 板將出現在板管理器菜單中。
面包板設置
在開始這個項目之前,我們首先準備一個面包板設置,該設置由一個 ESP32 Cam 和一個 FTDI 板根據下面的示意圖連接。
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。
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 的實時提要。
這就是今天的人們,如果您需要有關此項目的任何幫助,請發表評論。
?
- 帶有ESP32 CAM的超級簡單安全攝像機
- 如何制作ESP32 CAM板監控機器人汽車
- 基于ESP32-CAM的人工智能機器人設計資料 3次下載
- TinyML:ESP32 CAM和TFT上的實時圖像分類
- ESP32 CAM:遙控物體檢測攝像頭
- 帶有ESP32 CAM和Telegram的相機陷阱
- ESP32 CAM WEB服務器及入門指南
- 使用ESP32 CAM和Telegram App的家庭安全系統
- 使用ESP32CAM、Drive和Ubidots的運動檢測系統
- 帶有ESP32 CAM的笨拙但很棒的傻瓜相機
- esp32-cam入門資料 18次下載
- ESP32-CAM天線板資料免費下載 13次下載
- ESP32-CAM高性價比溫濕度監控系統配網與上網方案設計與實現
- esp32-cam 實現定時拍照并發送郵件
- 使用ESP32-CAM板訪問網絡 43次下載
- ESP32能取代STM32嗎?哪個更好? 2373次閱讀
- 介紹兩款小安派開源硬件:Cam-U和Cam-D 545次閱讀
- 什么是ESP32-CAM攝像頭? 2.1w次閱讀
- 基于ESP32的簡易web服務器設計 3300次閱讀
- 基于ESP32-CAM的RSTP協議的網絡攝像頭 3150次閱讀
- 使用ESP32連接騰訊云實現遠程控制 3240次閱讀
- 使用ESP32實現UDP通信的方法 5723次閱讀
- 基于ESP32制造有趣的超級馬里奧主題時鐘 4021次閱讀
- ESP8266/ESP32自動下載原理 4249次閱讀
- OpenMV Cam上的RPC模塊 1302次閱讀
- ESP32的數字遙測實現 1521次閱讀
- 如何使用兩個舵機為ESP32-CAM創建云臺控制 1.3w次閱讀
- CAM軟件的定義及應用特點 3w次閱讀
- CAM350工具的優勢及使用注意事項說明 4810次閱讀
- 基于CAM關聯比較器的FPGA雷達脈沖預分選器設計 1577次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多