我們將向您展示如何使用 ESP32 攝像頭模塊構(gòu)建自己的簡(jiǎn)單 CCTV安全攝像頭。從修改硬件連接到編碼功能和啟用遠(yuǎn)程訪問(wèn),加入我們的分步教程,打造經(jīng)濟(jì)高效且可定制的監(jiān)控解決方案。
我們需要構(gòu)建這些部件的組件是:
ESP32 凸輪
FTDI編程器
跳線
亞克力切割身體部位
Micro-SD卡
ESP32 攝像頭模組
ESP32 相機(jī)是由樂鑫科技開發(fā)的一款功能強(qiáng)大、用途廣泛的微控制器,以其雙核處理能力、內(nèi)置 Wi-Fi 和藍(lán)牙功能以及豐富的 GPIO
引腳陣列而聞名,使其成為各種物聯(lián)網(wǎng)應(yīng)用的首選。其雙核架構(gòu)允許同時(shí)執(zhí)行任務(wù),從而能夠高效處理復(fù)雜的操作。
之前,我們已經(jīng)使用 ESP32 攝像頭模組構(gòu)建了智能考勤系統(tǒng)和口罩檢測(cè)系統(tǒng),如果您有興趣,可以查看這兩個(gè)項(xiàng)目。
ESP32 攝像頭模組引腳排列
ESP32 CAM 模組通常具有引腳排列,其中包括各種 GPIO 引腳,可實(shí)現(xiàn)多功能連接。
通常,它包括電源和接地引腳、用于相機(jī)的 GPIO 引腳、用于存儲(chǔ)擴(kuò)展的 SD 卡插槽、用于串行通信的 UART 引腳以及可用于各種用途的通用 GPIO
引腳,例如 I2C 或 SPI
通信、數(shù)字輸入/輸出,或用于與傳感器和執(zhí)行器連接。此外,它還通常包括用于啟用閃存、控制相機(jī)以及促進(jìn)啟動(dòng)和復(fù)位等編程模式的引腳。
FTDI 模塊引腳排列
FTDI模塊也稱為(Future Technology Devices International)模塊。
它通常用于 USB 到串行通信,通常具有包括以下引腳排列:
RXD(接收數(shù)據(jù)):這是FTDI芯片從外部設(shè)備接收數(shù)據(jù)的地方。
TXD(傳輸數(shù)據(jù)):從FTDI芯片傳輸?shù)酵獠吭O(shè)備的數(shù)據(jù)通過(guò)此引腳發(fā)送出去。
CTS(清除發(fā)送):也與硬件流控制有關(guān),此引腳向 FTDI 芯片指示外部設(shè)備已準(zhǔn)備好接收數(shù)據(jù)。
DTR(數(shù)據(jù)終端就緒):此引腳通常用于復(fù)位或控制外部設(shè)備。
5V 或 3.3V:根據(jù)模塊的不同,它提供 5 伏或 3.3 伏的電源輸出。
GND(接地):接地引腳為模塊提供參考電壓。
搭建 ESP32 DIY 監(jiān)控?cái)z像頭的分步教程
現(xiàn)在,在您獲得相關(guān)信息后,讓我們逐步了解該項(xiàng)目的制作過(guò)程: -
a) 設(shè)置開發(fā)環(huán)境:
安裝 Arduino IDE。
將 ESP32 開發(fā)板添加到 Arduino
IDE。復(fù)制以下鏈接“https://espressif.github.io/arduino-esp32/package_esp32_index.json”,并將其粘貼到“文件》首選項(xiàng)”》其他板管理器中的新行中。
從 tools》boards》manage 庫(kù)中安裝 ESP32 攝像頭模組所需的庫(kù),并在搜索欄中輸入“esp32”,然后通過(guò) expressif
安裝庫(kù)。
b) 接線:
FTDI 模組與 ESP32 CAM 的接線非常簡(jiǎn)單。
將 ESP32 CAM 的 Vcc 連接到 FTDI 的 5V 引腳。將 ESP32 CAM 的 GND 連接到 FTDI 的 GND。將 ESP32
CAM 的 RX 引腳連接到 FTDI 的 TX 引腳。將 ESP32 CAM 的 TX 引腳連接到 FTDI 的 RX 引腳。將 GPIO0 連接到
GND,以便您可以在 ESP32 中上傳代碼。
c) 如何使用 Arduino IDE 對(duì) ESP32 CAM 進(jìn)行編程?
安裝 ESP32 開發(fā)板后,進(jìn)入工具》開發(fā)板》ESP32 Arduino 和 Select Ai thinker ESP32 Cam 開發(fā)板。
完成后,轉(zhuǎn)到文件》示例》ESP32》相機(jī) Web 服務(wù)器并打開代碼
您需要在命令前面添加 // 并將其從 #define CAMERA_MODEL_AI_THINKER 中刪除 #define
CAMERA_MODEL_ESP_EYE。
接下來(lái),將“hotspot”和“hotspotpassword”字符串替換為手機(jī)的熱點(diǎn)ssid和密碼,然后上傳代碼。
d) 在瀏覽器上測(cè)試
獲取串行監(jiān)視器的 IP 地址,然后將其寫入您的移動(dòng)瀏覽器。
完成后,按開始流選項(xiàng),您將看到相機(jī)饋送。
e) 外殼設(shè)計(jì)和組裝
我想讓設(shè)計(jì)盡可能簡(jiǎn)單易行。因此,我用了一張簡(jiǎn)單的圖表紙作為相機(jī)的主體。如果你想要一個(gè)更耐用的身體。.您也可以使用PVC管或3D打印外殼。
對(duì)于前板和后板,我使用了onshape并對(duì)其進(jìn)行了設(shè)計(jì),然后進(jìn)行了激光切割。
然后,我們將 esp32 凸輪組裝到外殼中,這就是最終項(xiàng)目的樣子。
//Code for ESP32 CCTV Security Camera
#include "esp_camera.h"
#include < WiFi.h >
// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
// Ensure ESP32 Wrover Module or other board with PSRAM is selected
// Partial images will be transmitted if image exceeds buffer size
//
// You must select partition scheme from the board menu that has at least 3MB APP space.
// Face Recognition is DISABLED for ESP32 and ESP32-S2, because it takes up from 15
// seconds to process single frame. Face Detection is ENABLED if PSRAM is enabled as well
// ===================
// Select camera model
// ===================
//#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
//#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
// ** Espressif Internal Boards **
//#define CAMERA_MODEL_ESP32_CAM_BOARD
//#define CAMERA_MODEL_ESP32S2_CAM_BOARD
//#define CAMERA_MODEL_ESP32S3_CAM_LCD
//#define CAMERA_MODEL_DFRobot_FireBeetle2_ESP32S3 // Has PSRAM
//#define CAMERA_MODEL_DFRobot_Romeo_ESP32S3 // Has PSRAM
#include "camera_pins.h"
// ===========================
// Enter your WiFi credentials
// ===========================
const char* ssid = "ssid";
const char* password = "password";
void startCameraServer();
void setupLedFlash(int pin);
void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println();
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_sccb_sda = SIOD_GPIO_NUM;
config.pin_sccb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.frame_size = FRAMESIZE_UXGA;
config.pixel_format = PIXFORMAT_JPEG; // for streaming
//config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
config.fb_location = CAMERA_FB_IN_PSRAM;
config.jpeg_quality = 12;
config.fb_count = 1;
// if PSRAM IC present, init with UXGA resolution and higher JPEG quality
// for larger pre-allocated frame buffer.
if(config.pixel_format == PIXFORMAT_JPEG){
if(psramFound()){
config.jpeg_quality = 10;
config.fb_count = 2;
config.grab_mode = CAMERA_GRAB_LATEST;
} else {
// Limit the frame size when PSRAM is not available
config.frame_size = FRAMESIZE_SVGA;
config.fb_location = CAMERA_FB_IN_DRAM;
}
} else {
// Best option for face detection/recognition
config.frame_size = FRAMESIZE_240X240;
#if CONFIG_IDF_TARGET_ESP32S3
config.fb_count = 2;
#endif
}
#if defined(CAMERA_MODEL_ESP_EYE)
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
#endif
// 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;
}
sensor_t * s = esp_camera_sensor_get();
// initial sensors are flipped vertically and colors are a bit saturated
if (s- >id.PID == OV3660_PID) {
s- >set_vflip(s, 1); // flip it back
s- >set_brightness(s, 1); // up the brightness just a bit
s- >set_saturation(s, -2); // lower the saturation
}
// drop down frame size for higher initial frame rate
if(config.pixel_format == PIXFORMAT_JPEG){
s- >set_framesize(s, FRAMESIZE_QVGA);
}
#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
s- >set_vflip(s, 1);
s- >set_hmirror(s, 1);
#endif
#if defined(CAMERA_MODEL_ESP32S3_EYE)
s- >set_vflip(s, 1);
#endif
// Setup LED FLash if LED pin is defined in camera_pins.h
#if defined(LED_GPIO_NUM)
setupLedFlash(LED_GPIO_NUM);
#endif
WiFi.begin(ssid, password);
WiFi.setSleep(false);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
startCameraServer();
Serial.print("Camera Ready! Use 'http://");
Serial.print(WiFi.localIP());
Serial.println("' to connect");
}
void loop() {
// Do nothing. Everything is done in another task by the web server
delay(10000);
}
審核編輯:陳陳
-
攝像頭模塊
+關(guān)注
關(guān)注
0文章
13瀏覽量
3302 -
ESP32
+關(guān)注
關(guān)注
18文章
978瀏覽量
17524
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論