資料介紹
描述
問(wèn)候。
所以這里有一些引人注目的東西,Vader Cam 。
Vader Cam 是一個(gè)基于 ESP32 CAM 的設(shè)備,它是一個(gè)實(shí)時(shí)視頻源流設(shè)備,我們可以通過(guò)網(wǎng)絡(luò)應(yīng)用程序訪問(wèn)源并查看發(fā)生了什么。
這就像一個(gè)以達(dá)斯維德為主題的保姆攝像頭或監(jiān)控設(shè)備。
Darth Vader 一直在關(guān)注事物,我制作這個(gè)設(shè)備是為了用它來(lái)監(jiān)控在另一個(gè)房間里進(jìn)行的 3D 打印作業(yè),但我們可以使用這個(gè)設(shè)備來(lái)監(jiān)控各種各樣的東西,從保姆到孩子甚至寵物。
這篇文章是關(guān)于這個(gè) Vader Cam 的整個(gè)構(gòu)建過(guò)程,所以讓我們開(kāi)始吧。
所需材料
這些是這個(gè)內(nèi)置的東西 -
Seeed Studio 的定制 PCB
ESP32 凸輪
M7 二極管 SMA
ESP32 板的排針
關(guān)于 ESP32 CAM
ESP32 CAM 是一款非常實(shí)用的開(kāi)發(fā)板,它在板的底部配備了一個(gè) 2MP OV2640 攝像頭模塊和一個(gè) SD 讀卡器。
此外,它的價(jià)格約為 10 美元,對(duì)于這種功能強(qiáng)大的微控制器來(lái)說(shuō),這是一個(gè)相當(dāng)不錯(cuò)的價(jià)格標(biāo)簽。
本版本使用的WIFI模塊為ESP-32S,內(nèi)置32Mbit Flash和512KB Internal plus外置4M PSRAM。
它可以承受 5 伏電壓,這意味著我們可以使用低于 5V 的電壓為 ESP32 Cam 供電,如果您提供的電壓高于 5V,它就會(huì)被損壞。
為 Arduino IDE 安裝 ESP32 開(kāi)發(fā)板
為了在 Arduino IDE 上安裝第三方開(kāi)發(fā)板,我們必須復(fù)制他們的 JSON URL,
復(fù)制此 URL 并將其粘貼到 Arduino IDE 首選項(xiàng)中的附加板管理器 URL 中。
(如果您在附加板管理器中已經(jīng)有其他開(kāi)發(fā)板 URL,則可以在兩個(gè) URL 之間放置一個(gè)逗號(hào))
放好網(wǎng)址后,打開(kāi)板子管理器,在里面搜索ESP32,然后下載ESP32 Board包。
完成所有這些后,您需要重新啟動(dòng) Arduino IDE,新的 ESP32 板將出現(xiàn)在板管理器菜單中。
面包板設(shè)置
在開(kāi)始這個(gè)項(xiàng)目之前,我們首先準(zhǔn)備一個(gè)面包板設(shè)置,該設(shè)置由一個(gè) ESP32 Cam 和一個(gè) FTDI 板根據(jù)下面的示意圖連接。
ESP32 CAM 沒(méi)有板載編程芯片,這很糟糕,因此我們必須在串行編程模塊中添加一個(gè)外部 USB。
為此,我將使用這個(gè) USB 轉(zhuǎn)串口模塊。該模塊基于 FTDI FT232 芯片。您也可以使用其他串行轉(zhuǎn)換器,它們的接線將保持不變,因?yàn)槲覀冎恍鑼?TX 和 RX 與 ESP32 連接。
將 FTDI 輸出設(shè)置為 5V
將 FTDI 的 VCC(即 5V)連接到 ESP32 CAM 的 5V
地到地
RX 到 U0T
TX 轉(zhuǎn) U0R
GPIO0 是 IO0 到 GND(這將使 ESP32 CAM 進(jìn)入 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); }
?
閃爍板步驟
在閃爍過(guò)程之前,您需要更改示例草圖中的一些內(nèi)容。
轉(zhuǎn)到示例> ESP32> 相機(jī)并打開(kāi)CameraWebServer草圖
輸入您的 SSID 和密碼
將相機(jī)模塊從#define CAMERA_MODEL_WROVER_KIT更改為#define CAMERA_MODEL_AI_THINKER
現(xiàn)在,轉(zhuǎn)到工具并選擇正確的板,在我們的例子中是 AI-Thinker ESP32-CAM。
選擇正確的端口并點(diǎn)擊上傳。
現(xiàn)在,當(dāng) ESP32 開(kāi)始上傳過(guò)程時(shí),您將看到帶有點(diǎn)和破折號(hào)的連接消息。按下板底部的重置按鈕,點(diǎn)和劃線開(kāi)始。
如果您在此設(shè)置過(guò)程中遇到無(wú)法連接的錯(cuò)誤,這意味著您的時(shí)機(jī)不對(duì),請(qǐng)重試,當(dāng)?shù)谝粋€(gè)點(diǎn)出現(xiàn)在調(diào)試菜單中時(shí),長(zhǎng)按重置按鈕至少 1 秒鐘。
幾秒鐘后,您的草圖將被上傳。
現(xiàn)在從 FTDI 模塊中拔出 USB 并移除 GPIO0 和 GND 之間的跳線。
插入 USB 并打開(kāi)串行監(jiān)視器。
ESP32 將與 WIFI 連接(需要 1 分鐘),您將看到 ESP32 CAM 的 IP 地址。
結(jié)果到目前為止...
我們復(fù)制 ESP32 Cam 的 IP 地址并在 Web 瀏覽器中打開(kāi)它,它將顯示 ESP32 Cam 的實(shí)時(shí)信息。接下來(lái),我們開(kāi)始為此設(shè)置準(zhǔn)備 PCB。
1 / 2
完成面包板設(shè)置后,我們準(zhǔn)備了一個(gè)簡(jiǎn)單的 PCB 設(shè)計(jì),其中包括一個(gè) USB 微型端口和一個(gè)二極管,用于為 ESP32 Cam 供電。
至于讓這個(gè)電路板更美觀和更酷,我下載了一張黑白 Darth Vader 圖像并將其轉(zhuǎn)換為 BMP 圖像,這樣我就可以將它添加到 PCB 設(shè)計(jì)中。
我將 ESP32 Cam 放在 Darth Vader 臉的一側(cè),這樣看起來(lái) Vader 正在通過(guò) ESP32 Cam 看著我們。
從 Seeed Fusion 獲取 PCB
1 / 2
在完成 PCB 并生成其 Gerber 數(shù)據(jù)后,我將其發(fā)送到 SEEED STUDIO 以獲取樣本。
訂購(gòu)了帶有白色絲印的 RED 阻焊層的 PCB。
我在一周內(nèi)收到了多氯聯(lián)苯,考慮到價(jià)格也很低,它們的質(zhì)量非常好。
Seeed Fusion PCB 服務(wù)為 PCB 制造和 PCB 組裝提供一站式原型設(shè)計(jì),因此,他們?cè)?7 個(gè)工作日內(nèi)生產(chǎn)出優(yōu)質(zhì) PCB 和快速交鑰匙 PCBA。
Seeed Studio Fusion PCB 組裝服務(wù)負(fù)責(zé)從PCB 制造、零件采購(gòu)、組裝和測(cè)試服務(wù)的整個(gè)制造過(guò)程,因此您可以確保他們獲得優(yōu)質(zhì)產(chǎn)品。
在評(píng)估市場(chǎng)興趣并驗(yàn)證工作原型后,Seeed Propagate Service 可以通過(guò)專業(yè)指導(dǎo)和強(qiáng)大的聯(lián)系網(wǎng)絡(luò)幫助您將產(chǎn)品推向市場(chǎng)。
PCB組裝
PCB組裝包括兩個(gè)步驟,
添加焊膏和二極管
添加頭針和 USB 端口
焊膏和添加二極管
我們首先將焊膏添加到電路板底部的每個(gè)組件焊盤(pán),然后將二極管放置在其位置。
接下來(lái),我們小心地提起整個(gè) PCB 并將其放在熱板上。我正在使用我不久前制作的老式DIY 電爐。
熱板將表面加熱到焊膏熔化溫度,然后慢慢熔化。幾分鐘后焊膏完全融化,我們?nèi)∠翽CB并讓它冷卻片刻。
這是最終設(shè)置,我們使用烙鐵放置兩個(gè)插頭引腳連接器。
結(jié)果
我們將 ESP32 放在 VaderCam 板上并插入 5V 充電器。
等待幾秒鐘后,我們?cè)跒g覽器中打開(kāi) Web 應(yīng)用程序,我們可以看到來(lái)自 esp32 cam 的實(shí)時(shí)提要。
這就是今天的人們,如果您需要有關(guān)此項(xiàng)目的任何幫助,請(qǐng)發(fā)表評(píng)論。
?
- 帶有ESP32 CAM的超級(jí)簡(jiǎn)單安全攝像機(jī)
- 如何制作ESP32 CAM板監(jiān)控機(jī)器人汽車
- 基于ESP32-CAM的人工智能機(jī)器人設(shè)計(jì)資料 3次下載
- TinyML:ESP32 CAM和TFT上的實(shí)時(shí)圖像分類
- ESP32 CAM:遙控物體檢測(cè)攝像頭
- 帶有ESP32 CAM和Telegram的相機(jī)陷阱
- ESP32 CAM WEB服務(wù)器及入門(mén)指南
- 使用ESP32 CAM和Telegram App的家庭安全系統(tǒng)
- 使用ESP32CAM、Drive和Ubidots的運(yùn)動(dòng)檢測(cè)系統(tǒng)
- 帶有ESP32 CAM的笨拙但很棒的傻瓜相機(jī)
- esp32-cam入門(mén)資料 19次下載
- ESP32-CAM天線板資料免費(fèi)下載 13次下載
- ESP32-CAM高性價(jià)比溫濕度監(jiān)控系統(tǒng)配網(wǎng)與上網(wǎng)方案設(shè)計(jì)與實(shí)現(xiàn)
- esp32-cam 實(shí)現(xiàn)定時(shí)拍照并發(fā)送郵件
- 使用ESP32-CAM板訪問(wèn)網(wǎng)絡(luò) 43次下載
- ESP32能取代STM32嗎?哪個(gè)更好? 1.3w次閱讀
- 介紹兩款小安派開(kāi)源硬件:Cam-U和Cam-D 691次閱讀
- 什么是ESP32-CAM攝像頭? 2.4w次閱讀
- 基于ESP32的簡(jiǎn)易web服務(wù)器設(shè)計(jì) 3990次閱讀
- 基于ESP32-CAM的RSTP協(xié)議的網(wǎng)絡(luò)攝像頭 3945次閱讀
- 使用ESP32連接騰訊云實(shí)現(xiàn)遠(yuǎn)程控制 3745次閱讀
- 使用ESP32實(shí)現(xiàn)UDP通信的方法 6519次閱讀
- 基于ESP32制造有趣的超級(jí)馬里奧主題時(shí)鐘 4783次閱讀
- ESP8266/ESP32自動(dòng)下載原理 4741次閱讀
- OpenMV Cam上的RPC模塊 1444次閱讀
- ESP32的數(shù)字遙測(cè)實(shí)現(xiàn) 1779次閱讀
- 如何使用兩個(gè)舵機(jī)為ESP32-CAM創(chuàng)建云臺(tái)控制 1.4w次閱讀
- CAM軟件的定義及應(yīng)用特點(diǎn) 3.1w次閱讀
- CAM350工具的優(yōu)勢(shì)及使用注意事項(xiàng)說(shuō)明 4987次閱讀
- 基于CAM關(guān)聯(lián)比較器的FPGA雷達(dá)脈沖預(yù)分選器設(shè)計(jì) 1690次閱讀
下載排行
本周
- 1DD3118電路圖紙資料
- 0.08 MB | 1次下載 | 免費(fèi)
- 2AD庫(kù)封裝庫(kù)安裝教程
- 0.49 MB | 1次下載 | 免費(fèi)
- 3PC6206 300mA低功耗低壓差線性穩(wěn)壓器中文資料
- 1.12 MB | 1次下載 | 免費(fèi)
- 4網(wǎng)絡(luò)安全從業(yè)者入門(mén)指南
- 2.91 MB | 1次下載 | 免費(fèi)
- 5DS-CS3A P00-CN-V3
- 618.05 KB | 1次下載 | 免費(fèi)
- 6海川SM5701規(guī)格書(shū)
- 1.48 MB | 次下載 | 免費(fèi)
- 7H20PR5電磁爐IGBT功率管規(guī)格書(shū)
- 1.68 MB | 次下載 | 1 積分
- 8IP防護(hù)等級(jí)說(shuō)明
- 0.08 MB | 次下載 | 免費(fèi)
本月
- 1貼片三極管上的印字與真實(shí)名稱的對(duì)照表詳細(xì)說(shuō)明
- 0.50 MB | 103次下載 | 1 積分
- 2涂鴉各WiFi模塊原理圖加PCB封裝
- 11.75 MB | 89次下載 | 1 積分
- 3錦銳科技CA51F2 SDK開(kāi)發(fā)包
- 24.06 MB | 43次下載 | 1 積分
- 4錦銳CA51F005 SDK開(kāi)發(fā)包
- 19.47 MB | 19次下載 | 1 積分
- 5PCB的EMC設(shè)計(jì)指南
- 2.47 MB | 16次下載 | 1 積分
- 6HC05藍(lán)牙原理圖加PCB
- 15.76 MB | 13次下載 | 1 積分
- 7802.11_Wireless_Networks
- 4.17 MB | 12次下載 | 免費(fèi)
- 8蘋(píng)果iphone 11電路原理圖
- 4.98 MB | 6次下載 | 2 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191390次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81588次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65989次下載 | 10 積分
評(píng)論