Esp32 cam chatgpt

#include "esp_camera.h"

#include <WiFi.h>

#include "esp_http_server.h"


// ===================

// AI THINKER CAMERA PINS

// ===================

#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


// ===================

// WIFI SETTINGS (HOTSPOT MODE)

// ===================

const char* ssid = "ESP32-CAM";

const char* password = "12345678";


// ===================

// STREAM HANDLER

// ===================

httpd_handle_t stream_httpd = NULL;


static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=frame";

static const char* _STREAM_BOUNDARY = "\r\n--frame\r\n";

static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";


static esp_err_t stream_handler(httpd_req_t *req){

    camera_fb_t * fb = NULL;

    esp_err_t res = ESP_OK;

    char part_buf[64];


    res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);


    while(true){

        fb = esp_camera_fb_get();

        if (!fb) {

            Serial.println("Camera capture failed");

            return ESP_FAIL;

        }


        size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, fb->len);


        res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));

        res = httpd_resp_send_chunk(req, part_buf, hlen);

        res = httpd_resp_send_chunk(req, (const char *)fb->buf, fb->len);


        esp_camera_fb_return(fb);


        if(res != ESP_OK){

            break;

        }

    }

    return res;

}


// ===================

// START SERVER

// ===================

void startCameraServer(){

    httpd_config_t config = HTTPD_DEFAULT_CONFIG();


    httpd_uri_t stream_uri = {

        .uri       = "/",

        .method    = HTTP_GET,

        .handler   = stream_handler,

        .user_ctx  = NULL

    };


    if (httpd_start(&stream_httpd, &config) == ESP_OK) {

        httpd_register_uri_handler(stream_httpd, &stream_uri);

    }

}


// ===================

// CAMERA INIT

// ===================

void initCamera(){

    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;


    config.frame_size = FRAMESIZE_QVGA;

    config.jpeg_quality = 12;

    config.fb_count = 1;


    esp_err_t err = esp_camera_init(&config);

    if (err != ESP_OK) {

        Serial.printf("Camera init failed: 0x%x", err);

        return;

    }

}


// ===================

// SETUP

// ===================

void setup() {

    Serial.begin(115200);

    Serial.println();


    initCamera();


    // Hotspot mode

    WiFi.softAP(ssid, password);


    Serial.println("WiFi started");

    Serial.print("Connect to: ");

    Serial.println(ssid);

    Serial.print("IP address: ");

    Serial.println(WiFi.softAPIP());


    startCameraServer();


    Serial.println("Camera Stream Ready!");

}


// ===================

// LOOP

// ===================

void loop() {

    delay(1000);

}

Post a Comment

Previous Post Next Post

Contact Form