annotate espNode/garage_hall_cam/src/camera.cpp @ 1705:250f4c27d56f

less logging
author drewp@bigasterisk.com
date Sat, 23 Oct 2021 13:21:06 -0700
parents 7831b5de3572
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1678
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
1 // from https://raw.githubusercontent.com/RuiSantosdotme/ESP32-CAM-Arduino-IDE/master/ESP32-CAM-Video-Streaming/ESP32-CAM-Video-Streaming.ino
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
2
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
3
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
4
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
5 /*********
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
6 Rui Santos
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
7 Complete project details at https://RandomNerdTutorials.com/esp32-cam-video-streaming-web-server-camera-home-assistant/
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
8
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
9 IMPORTANT!!!
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
10 - Select Board "AI Thinker ESP32-CAM"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
11 - GPIO 0 must be connected to GND to upload a sketch
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
12 - After connecting GPIO 0 to GND, press the ESP32-CAM on-board RESET button to put your board in flashing mode
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
13
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
14 Permission is hereby granted, free of charge, to any person obtaining a copy
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
15 of this software and associated documentation files.
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
16
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
17 The above copyright notice and this permission notice shall be included in all
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
18 copies or substantial portions of the Software.
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
19 *********/
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
20
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
21 #include "esp_camera.h"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
22 #include <WiFi.h>
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
23 #include "esp_timer.h"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
24 #include "img_converters.h"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
25 #include "Arduino.h"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
26 #include "fb_gfx.h"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
27 #include "soc/soc.h" //disable brownout problems
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
28 #include "soc/rtc_cntl_reg.h" //disable brownout problems
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
29 #include "esp_http_server.h"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
30
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
31 //Replace with your network credentials
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
32 const char* ssid = "REPLACE_WITH_YOUR_SSID";
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
33 const char* password = "REPLACE_WITH_YOUR_PASSWORD";
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
34
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
35 #define PART_BOUNDARY "123456789000000000000987654321"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
36
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
37 // This project was tested with the AI Thinker Model, M5STACK PSRAM Model and M5STACK WITHOUT PSRAM
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
38 #define CAMERA_MODEL_AI_THINKER
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
39 //#define CAMERA_MODEL_M5STACK_PSRAM
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
40 //#define CAMERA_MODEL_M5STACK_WITHOUT_PSRAM
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
41
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
42 // Not tested with this model
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
43 //#define CAMERA_MODEL_WROVER_KIT
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
44
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
45 #if defined(CAMERA_MODEL_WROVER_KIT)
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
46 #define PWDN_GPIO_NUM -1
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
47 #define RESET_GPIO_NUM -1
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
48 #define XCLK_GPIO_NUM 21
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
49 #define SIOD_GPIO_NUM 26
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
50 #define SIOC_GPIO_NUM 27
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
51
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
52 #define Y9_GPIO_NUM 35
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
53 #define Y8_GPIO_NUM 34
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
54 #define Y7_GPIO_NUM 39
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
55 #define Y6_GPIO_NUM 36
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
56 #define Y5_GPIO_NUM 19
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
57 #define Y4_GPIO_NUM 18
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
58 #define Y3_GPIO_NUM 5
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
59 #define Y2_GPIO_NUM 4
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
60 #define VSYNC_GPIO_NUM 25
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
61 #define HREF_GPIO_NUM 23
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
62 #define PCLK_GPIO_NUM 22
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
63
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
64 #elif defined(CAMERA_MODEL_M5STACK_PSRAM)
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
65 #define PWDN_GPIO_NUM -1
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
66 #define RESET_GPIO_NUM 15
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
67 #define XCLK_GPIO_NUM 27
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
68 #define SIOD_GPIO_NUM 25
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
69 #define SIOC_GPIO_NUM 23
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
70
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
71 #define Y9_GPIO_NUM 19
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
72 #define Y8_GPIO_NUM 36
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
73 #define Y7_GPIO_NUM 18
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
74 #define Y6_GPIO_NUM 39
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
75 #define Y5_GPIO_NUM 5
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
76 #define Y4_GPIO_NUM 34
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
77 #define Y3_GPIO_NUM 35
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
78 #define Y2_GPIO_NUM 32
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
79 #define VSYNC_GPIO_NUM 22
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
80 #define HREF_GPIO_NUM 26
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
81 #define PCLK_GPIO_NUM 21
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
82
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
83 #elif defined(CAMERA_MODEL_M5STACK_WITHOUT_PSRAM)
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
84 #define PWDN_GPIO_NUM -1
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
85 #define RESET_GPIO_NUM 15
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
86 #define XCLK_GPIO_NUM 27
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
87 #define SIOD_GPIO_NUM 25
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
88 #define SIOC_GPIO_NUM 23
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
89
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
90 #define Y9_GPIO_NUM 19
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
91 #define Y8_GPIO_NUM 36
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
92 #define Y7_GPIO_NUM 18
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
93 #define Y6_GPIO_NUM 39
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
94 #define Y5_GPIO_NUM 5
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
95 #define Y4_GPIO_NUM 34
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
96 #define Y3_GPIO_NUM 35
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
97 #define Y2_GPIO_NUM 17
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
98 #define VSYNC_GPIO_NUM 22
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
99 #define HREF_GPIO_NUM 26
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
100 #define PCLK_GPIO_NUM 21
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
101
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
102 #elif defined(CAMERA_MODEL_AI_THINKER)
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
103 #define PWDN_GPIO_NUM 32
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
104 #define RESET_GPIO_NUM -1
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
105 #define XCLK_GPIO_NUM 0
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
106 #define SIOD_GPIO_NUM 26
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
107 #define SIOC_GPIO_NUM 27
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
108
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
109 #define Y9_GPIO_NUM 35
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
110 #define Y8_GPIO_NUM 34
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
111 #define Y7_GPIO_NUM 39
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
112 #define Y6_GPIO_NUM 36
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
113 #define Y5_GPIO_NUM 21
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
114 #define Y4_GPIO_NUM 19
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
115 #define Y3_GPIO_NUM 18
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
116 #define Y2_GPIO_NUM 5
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
117 #define VSYNC_GPIO_NUM 25
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
118 #define HREF_GPIO_NUM 23
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
119 #define PCLK_GPIO_NUM 22
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
120 #else
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
121 #error "Camera model not selected"
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
122 #endif
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
123
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
124 static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
125 static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
126 static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
127
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
128 httpd_handle_t stream_httpd = NULL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
129
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
130 static esp_err_t stream_handler(httpd_req_t *req){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
131 camera_fb_t * fb = NULL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
132 esp_err_t res = ESP_OK;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
133 size_t _jpg_buf_len = 0;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
134 uint8_t * _jpg_buf = NULL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
135 char * part_buf[64];
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
136
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
137 res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
138 if(res != ESP_OK){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
139 return res;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
140 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
141
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
142 // https://github.com/RuiSantosdotme/ESP32-CAM-Arduino-IDE/pull/4
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
143 res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
144 if(res != ESP_OK){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
145 return res;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
146 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
147
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
148 while(true){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
149 fb = esp_camera_fb_get();
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
150 if (!fb) {
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
151 Serial.println("Camera capture failed");
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
152 res = ESP_FAIL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
153 } else {
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
154 if(fb->width > 400){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
155 if(fb->format != PIXFORMAT_JPEG){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
156 bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
157 esp_camera_fb_return(fb);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
158 fb = NULL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
159 if(!jpeg_converted){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
160 Serial.println("JPEG compression failed");
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
161 res = ESP_FAIL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
162 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
163 } else {
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
164 _jpg_buf_len = fb->len;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
165 _jpg_buf = fb->buf;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
166 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
167 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
168 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
169 if(res == ESP_OK){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
170 size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
171 res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
172 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
173 if(res == ESP_OK){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
174 res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
175 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
176 if(res == ESP_OK){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
177 res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
178 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
179 if(fb){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
180 esp_camera_fb_return(fb);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
181 fb = NULL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
182 _jpg_buf = NULL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
183 } else if(_jpg_buf){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
184 free(_jpg_buf);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
185 _jpg_buf = NULL;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
186 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
187 if(res != ESP_OK){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
188 break;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
189 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
190 //Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
191 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
192 return res;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
193 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
194
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
195 void startCameraServer(){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
196 httpd_config_t config = HTTPD_DEFAULT_CONFIG();
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
197 config.server_port = 80;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
198
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
199 httpd_uri_t index_uri = {
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
200 .uri = "/",
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
201 .method = HTTP_GET,
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
202 .handler = stream_handler,
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
203 .user_ctx = NULL
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
204 };
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
205
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
206 //Serial.printf("Starting web server on port: '%d'\n", config.server_port);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
207 if (httpd_start(&stream_httpd, &config) == ESP_OK) {
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
208 httpd_register_uri_handler(stream_httpd, &index_uri);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
209 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
210 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
211
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
212 void cam_setup() {
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
213 WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
214
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
215 Serial.begin(115200);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
216 Serial.setDebugOutput(false);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
217
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
218 camera_config_t config;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
219 config.ledc_channel = LEDC_CHANNEL_0;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
220 config.ledc_timer = LEDC_TIMER_0;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
221 config.pin_d0 = Y2_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
222 config.pin_d1 = Y3_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
223 config.pin_d2 = Y4_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
224 config.pin_d3 = Y5_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
225 config.pin_d4 = Y6_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
226 config.pin_d5 = Y7_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
227 config.pin_d6 = Y8_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
228 config.pin_d7 = Y9_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
229 config.pin_xclk = XCLK_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
230 config.pin_pclk = PCLK_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
231 config.pin_vsync = VSYNC_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
232 config.pin_href = HREF_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
233 config.pin_sscb_sda = SIOD_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
234 config.pin_sscb_scl = SIOC_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
235 config.pin_pwdn = PWDN_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
236 config.pin_reset = RESET_GPIO_NUM;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
237 config.xclk_freq_hz = 20000000;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
238 config.pixel_format = PIXFORMAT_JPEG;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
239
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
240 if(psramFound()){
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
241 config.frame_size = FRAMESIZE_UXGA;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
242 config.jpeg_quality = 10;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
243 config.fb_count = 2;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
244 } else {
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
245 config.frame_size = FRAMESIZE_SVGA;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
246 config.jpeg_quality = 12;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
247 config.fb_count = 1;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
248 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
249
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
250 // Camera init
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
251 esp_err_t err = esp_camera_init(&config);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
252 if (err != ESP_OK) {
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
253 Serial.printf("Camera init failed with error 0x%x", err);
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
254 return;
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
255 }
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
256
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
257 // Start streaming web server
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
258 startCameraServer();
7831b5de3572 espNode checkpoint
drewp@bigasterisk.com
parents:
diff changeset
259 }