1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
|
#include "esp_http_client.h" #include "esp_camera.h" #include <WiFi.h> #include <ArduinoJson.h>
const char* ssid = "SSID"; const char* password = "PASSWORD"; int capture_interval = 5 * 1000; const char* post_url = "http://192.168.137.1/test";
static String httpResponseString; long current_millis; long last_capture_millis = 0;
#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
void setup() { Serial.begin(115200); if (init_wifi()) { Serial.println("Internet connected"); } 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; } esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x", err); return; } }
bool init_wifi(){ int connAttempts = 0; Serial.println("\r\nConnecting to: " + String(ssid)); WiFi.begin(ssid, password); while (WiFi.status()!=WL_CONNECTED){ delay(500); Serial.print("."); if (connAttempts > 10) return false; connAttempts++;} return true; }
esp_err_t _http_event_handler(esp_http_client_event_t *evt){ if (evt->event_id == HTTP_EVENT_ON_DATA){ httpResponseString.concat((char *)evt->data);} return ESP_OK; }
static esp_err_t take_send_photo() { Serial.println("Taking picture..."); camera_fb_t * fb = NULL; esp_err_t res = ESP_OK;
fb = esp_camera_fb_get(); if (!fb) { Serial.println("Camera capture failed"); return ESP_FAIL; } httpResponseString = ""; esp_http_client_handle_t http_client; esp_http_client_config_t config_client = {0};
config_client.url = post_url; config_client.event_handler = _http_event_handler; config_client.method = HTTP_METHOD_POST; http_client = esp_http_client_init(&config_client); esp_http_client_set_post_field(http_client, (const char *)fb->buf, fb->len); esp_http_client_set_header(http_client, "Content-Type", "image/jpg"); esp_err_t err = esp_http_client_perform(http_client); if (err == ESP_OK) { StaticJsonDocument<200> doc; DeserializationError error = deserializeJson(doc, httpResponseString); if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.c_str()); } String url = doc["url"]; Serial.println(url); } esp_http_client_cleanup(http_client); esp_camera_fb_return(fb); }
void loop() { current_millis = millis(); if (current_millis - last_capture_millis > capture_interval) { last_capture_millis = millis(); take_send_photo(); } }
|