在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            博客專欄

            EEPW首頁 > 博客 > ESP32-S3搭建外網(wǎng)可訪問的網(wǎng)絡(luò)攝像頭(內(nèi)網(wǎng)穿透)

            ESP32-S3搭建外網(wǎng)可訪問的網(wǎng)絡(luò)攝像頭(內(nèi)網(wǎng)穿透)

            發(fā)布人:美男子玩編程 時間:2023-09-08 來源:工程師 發(fā)布文章

            本篇博文使用ESP32-S3搭建網(wǎng)絡(luò)攝像頭,相比較局域網(wǎng)攝像頭,本篇博文將分享如何搭建外網(wǎng)可以訪問的網(wǎng)絡(luò)攝像頭。

            這主要是使用內(nèi)網(wǎng)穿透技術(shù),內(nèi)網(wǎng)穿透是為了使具有某一個特定源 IP 地址和源端口號的數(shù)據(jù)包(這里指局域網(wǎng)攝像頭)不被網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備屏蔽而正確路由到內(nèi)網(wǎng)主機。

            主要流程分為兩步:

            1、先實現(xiàn)局域網(wǎng)訪問網(wǎng)絡(luò)攝像頭;

            2、在此基礎(chǔ),使用內(nèi)網(wǎng)穿透的方式,搭建外網(wǎng)可訪問的網(wǎng)絡(luò)攝像頭。

            1

            局域網(wǎng)攝像頭

            ESP32實現(xiàn)局域網(wǎng)攝像頭的方式比較簡單,驅(qū)動代碼如下:

            #include "esp_camera.h"
            #include
            //
            // 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"
            #include "DFRobot_AXP313A.h"
            DFRobot_AXP313A axp;
            // ===========================
            // Enter your WiFi credentials
            // ===========================
            const char* ssid = "";
            const char* password = "";
            void startCameraServer();
            void setupLedFlash(int pin);
            void setup() {
              Serial.begin(115200);
              Serial.setDebugOutput(true);
              Serial.println();
              while(axp.begin() != 0){
                Serial.println("init error");
                delay(1000);
              }
              axp.enableCameraPower(axp.eOV2640);  // 給攝像頭供電
              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);
            }

            代碼中有幾點需要注意:

            1、宏定義選擇適配的攝像頭模式。

            // ===================
            // 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

            2、無線路由器SSID和密碼要填寫正確。

            // ===========================
            // Enter your WiFi credentials
            // ===========================
            const char* ssid = "";
            const char* password = "";

            3、給攝像頭供電

            axp.enableCameraPower(axp.eOV2640);  // 給攝像頭供電

            4、板卡需要外接天線,否則可能無法連接路由器。

            編譯下載程序到板卡中,確保局域網(wǎng)訪問網(wǎng)絡(luò)攝像頭可正常使用。

            2

            內(nèi)網(wǎng)穿透網(wǎng)絡(luò)攝像頭

            內(nèi)網(wǎng)穿透我們使用花生殼這款軟件提供的內(nèi)網(wǎng)穿透服務(wù)。

            圖片


            在官網(wǎng)下載APP:https://hsk.oray.com/

            下載安裝完成后,在內(nèi)網(wǎng)穿透服務(wù)點擊新建映射,如下圖所示: 


            圖片


            填寫新建映射的基本信息,請注意內(nèi)網(wǎng)主機和內(nèi)網(wǎng)端口是局域網(wǎng)攝像頭的主機和端口(端口默認為80) ,如下圖所示:


            圖片


            新建映射完成后,可以在APP看到新增的設(shè)備列表,如下圖所示:


            圖片


            復(fù)制訪問****,在瀏覽器中打開:http://2j90962r69.goho.co:47918/

            即使不在同一個局域網(wǎng)內(nèi)也可以正常訪問攝像頭啦。




            *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點,如有侵權(quán)請聯(lián)系工作人員刪除。



            關(guān)鍵詞: 網(wǎng)絡(luò)攝像頭

            技術(shù)專區(qū)

            關(guān)閉