commit 6b022bf9d89f0bdc7ee77d408818ba9367038e40 Author: thyik <66717752+thyik@users.noreply.github.com> Date: Sun Nov 22 15:06:09 2020 +0800 initial diff --git a/README.md b/README.md new file mode 100644 index 0000000..1ee8f11 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# IoT Image Publishing + +Illustration of WebCam using ESP32_CAM via Adruino + +* [MCU comparison](./docs/MCU.md) +* [WebCAM ESP32_CAM](./docs/WebCam_CSI.md) +* [LoRA](./docs/LoRA.md) diff --git a/docs/LoRA.md b/docs/LoRA.md new file mode 100644 index 0000000..7d252fb --- /dev/null +++ b/docs/LoRA.md @@ -0,0 +1,10 @@ +# LoRA + +## Characteristic +* Low Power (Battery Power) +* Low Bandwidth, Low Speed, Long Range (km) +* Network + +## Application +* Low Frequency data acquicition +* diff --git a/docs/MCU.md b/docs/MCU.md new file mode 100644 index 0000000..5cf1e70 --- /dev/null +++ b/docs/MCU.md @@ -0,0 +1,10 @@ +# Comparison + + +| MCU | CPU | GPIO | Wireless| Cost | +| ------------- |:-------------:| -----:|------|------| +| Raspberry Pi W | Quad Core | 36 | WiFi / Bluetooth | S$15 | +| ESP32_CAM | Single Core | 36 | WiFi / Bluetooth | S$10 | + + + diff --git a/docs/WebCam_CSI.md b/docs/WebCam_CSI.md new file mode 100644 index 0000000..49dca73 --- /dev/null +++ b/docs/WebCam_CSI.md @@ -0,0 +1,84 @@ + + +## CameraWebServer_ESP32-CAM.ino + +* Configure WiFi SSID +``` +const char* ssid = "Your SSID"; +const char* password = "Your Password"; +``` + +* Setup Camera CSI pin assignment +``` + 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; + +``` + +* Connect WiFi network +``` + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } +``` + +* Start httpd Web Camera Server +``` + startCameraServer(); + +``` + +## app_httpd.cpp +* Setup Web Server endpoint +``` + if (httpd_start(&camera_httpd, &config) == ESP_OK) { + httpd_register_uri_handler(camera_httpd, &index_uri); + httpd_register_uri_handler(camera_httpd, &cmd_uri); + httpd_register_uri_handler(camera_httpd, &status_uri); + httpd_register_uri_handler(camera_httpd, &capture_uri); + } +``` + +* index landing page callback to read camera source and publish camera image +``` +static esp_err_t index_handler(httpd_req_t *req){ + httpd_resp_set_type(req, "text/html"); + httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); + sensor_t * s = esp_camera_sensor_get(); + if (s->id.PID == OV3660_PID) { + return httpd_resp_send(req, (const char *)index_ov3660_html_gz, index_ov3660_html_gz_len); + } + return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len); +} +``` + +* streaming of camera source +``` +static esp_err_t stream_handler(httpd_req_t *req){ + camera_fb_t * fb = NULL; + esp_err_t res = ESP_OK; + size_t _jpg_buf_len = 0; + +``` \ No newline at end of file